Two independent budgets protect the API — one per **key**, one per **IP** for anonymous traffic.
## Keyed limits
| Limit | Value | Scope |
|---|---|---|
| Minimum interval | **1 request / 3 seconds** | per key |
| Hourly budget | **500 requests / hour** | per key |
A call that violates either returns `429` with an exact `Retry-After` header (whole seconds):
```responses
~~~429
{
"error": { "code": "rate_limit.interval", "message": "Too soon after the previous request" },
"request_id": "5f0c…"
}
~~~
```
- `rate_limit.interval` — second admitted call inside the 3-second window.
- `rate_limit.hourly_budget` — the 500/hour budget is exhausted.
> **Rejected requests don't count.** A 429 never consumes budget — the interval and hourly counters only advance on admitted calls. Back off by `Retry-After` and retry.
## Anonymous limits
Requests without a key (the keyless [Summarize](/docs/summarize) lane) are limited to **30 requests / minute / IP** — `429 rate_limit.ip_per_min` beyond that.
The keyless summarize lane additionally carries the free tier's own daily caps (`429 rate_limit.free_tier_daily`), surfaced with the same `Retry-After` header.
## Practical guidance
- One key per integration means one budget per integration — parallel integrations don't share the 3-second interval.
- The interval is strict: a well-behaved client tops out at 20 requests/minute, far below the 500/hour cap. The hourly budget only binds for burst-then-sustained patterns.
- Chat sends have their own daily message cap on top (`429 rate_limit.daily_messages`) — see [Chat](/docs/chat).
Rate limits
Two independent budgets protect the API — one per key, one per IP for anonymous traffic.
Keyed limits
| Limit | Value | Scope |
|---|---|---|
| Minimum interval | 1 request / 3 seconds | per key |
| Hourly budget | 500 requests / hour | per key |
A call that violates either returns 429 with an exact Retry-After header (whole seconds):
~~~429
{
"error": { "code": "rate_limit.interval", "message": "Too soon after the previous request" },
"request_id": "5f0c…"
}
~~~
• rate_limit.interval — second admitted call inside the 3-second window.
• rate_limit.hourly_budget — the 500/hour budget is exhausted.
Rejected requests don't count. A 429 never consumes budget — the interval and hourly counters only advance on admitted calls. Back off by Retry-After and retry.
Anonymous limits
Requests without a key (the keyless Summarize (/docs/summarize) lane) are limited to 30 requests / minute / IP — 429 rate_limit.ip_per_min beyond that.
The keyless summarize lane additionally carries the free tier's own daily caps (429 rate_limit.free_tier_daily), surfaced with the same Retry-After header.
Practical guidance
• One key per integration means one budget per integration — parallel integrations don't share the 3-second interval.
• The interval is strict: a well-behaved client tops out at 20 requests/minute, far below the 500/hour cap. The hourly budget only binds for burst-then-sustained patterns.
• Chat sends have their own daily message cap on top (429 rate_limit.daily_messages) — see Chat (/docs/chat).
Guides / Rate limits
Rate limits
Request budgets per key and per IP.
Two independent budgets protect the API — one per key, one per IP for anonymous traffic.
Keyed limits
| Limit | Value | Scope |
|---|---|---|
| Minimum interval | 1 request / 3 seconds | per key |
| Hourly budget | 500 requests / hour | per key |
A call that violates either returns 429 with an exact Retry-After header (whole seconds):
{
"error": { "code": "rate_limit.interval", "message": "Too soon after the previous request" },
"request_id": "5f0c…"
}
{
"error": { "code": "rate_limit.interval", "message": "Too soon after the previous request" },
"request_id": "5f0c…"
}
rate_limit.interval— second admitted call inside the 3-second window.rate_limit.hourly_budget— the 500/hour budget is exhausted.
Rejected requests don't count. A 429 never consumes budget — the interval and hourly counters only advance on admitted calls. Back off by Retry-After and retry.
Anonymous limits
Requests without a key (the keyless Summarize lane) are limited to 30 requests / minute / IP — 429 rate_limit.ip_per_min beyond that.
The keyless summarize lane additionally carries the free tier's own daily caps (429 rate_limit.free_tier_daily), surfaced with the same Retry-After header.
Practical guidance
- One key per integration means one budget per integration — parallel integrations don't share the 3-second interval.
- The interval is strict: a well-behaved client tops out at 20 requests/minute, far below the 500/hour cap. The hourly budget only binds for burst-then-sustained patterns.
- Chat sends have their own daily message cap on top (
429 rate_limit.daily_messages) — see Chat.