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

# Rate limits

> What is limited, what is not, and what the headers mean.

Rate limits protect the platform from bursts. They are **not** how spending is
controlled — credits do that.

## The limits

**10 requests per second**, with a **burst of 20**. The bucket is per API key,
so one key's traffic cannot exhaust another's.

## The headers

Every response carries:

| Header                  | Meaning                                          |
| ----------------------- | ------------------------------------------------ |
| `X-RateLimit-Limit`     | The **burst** size, 20 — not the per-second rate |
| `X-RateLimit-Remaining` | Tokens left in the bucket                        |

<Note>
  There is no `X-RateLimit-Reset`. The bucket refills continuously rather than at
  a fixed boundary, so there is no instant to report.
</Note>

## When you exceed it

```json theme={null}
{
  "error": {
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded",
    "message": "Too many requests.",
    "request_id": "req_01HXYZ"
  }
}
```

`429`, with a `Retry-After` header in seconds. **A rate-limited request is never
charged** — it did no work.

Back off and retry. `Retry-After` is the honest answer; exponential backoff on
top of it is polite.

## What is not rate limited

Provider-backed work — placing calls, running agents — is governed by your
**credit balance**, not by request count. A rate limit is about protecting
shared infrastructure; a balance is about what you have paid for. Conflating the
two would mean a well-funded customer being throttled for spending money.

Concurrent calls are capped separately, per account, and default to 5.
