> ## Documentation Index
> Fetch the complete documentation index at: https://docs.parlayx.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Rate limits

> Your request budget, the headers that report it, and how to handle a 429.

Your organization can make **10 requests per second**, with a burst of 20. Every
API key your organization holds shares that budget, so creating more keys does
not raise it. Need more? Ask us and we will raise your rate.

Prices, order books and trades stream over the
[WebSocket](/streaming/overview), which has no request rate.

## Headers

Every authenticated response carries:

| Header | Meaning |
| - | - |
| `RateLimit-Limit` | Your sustained rate, in requests per second |
| `RateLimit-Remaining` | Roughly how many requests you can make right now |
| `RateLimit-Reset` | Seconds until your allowance is full again |

`RateLimit-Remaining` is approximate and can read higher than the limit, since a
burst holds more than one second's worth.

Each request can be answered by any of several API servers, and each server
counts your budget on its own. `RateLimit-Remaining` is the count on the server
that answered, so successive responses can repeat a value or go up, and a burst
can sometimes run past 20 before the first `429`. Plan for your `RateLimit-Limit`
and do not rely on going over it.

## Exceeding it

You get a `429` with the code `RATE_LIMITED` and a `Retry-After` header in
seconds. Wait that long and retry.

Your allowance refills continuously rather than resetting on a boundary, so
`Retry-After` is the time until your next request can succeed. A refused request
costs you nothing.

A `429` with the same code and header can also come from a budget other than your
own allowance. A few endpoints read live from the venue holding your account, and
those reads are paced against a limit that belongs to the account rather than to
you, and is shared with everyone else using it, including your own other keys.
So a request well inside your allowance can still be refused while that account
is busy. Handle it exactly the same way: wait the `Retry-After` interval and
retry. Nothing was placed or changed, so the same request is safe to repeat.

```ts theme={null}
import { createClient, RequestError } from "@parlayx/sdk";

const client = createClient({
  keyId: process.env.PARLAYX_KEY_ID!,
  privateKeyHex: process.env.PARLAYX_PRIVATE_KEY_HEX!,
});

try {
  return await client.polymarket.getBalance();
} catch (error) {
  if (error instanceof RequestError && error.code === "RATE_LIMITED") {
    await new Promise((r) => setTimeout(r, (error.retryAfterSeconds ?? 1) * 1000));
    return await client.polymarket.getBalance();
  }
  throw error;
}
```

> [!NOTE]
>
> A `429` with no JSON body is not your budget: it means we are shedding load
> across all customers. Retry with backoff and tell us if it persists.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.