Rate limits
Three limits apply independently: how fast you may send requests, how many may be in flight at once, and how many tokens you may consume in a billing period.
Three separate limits
| Limit | Window | Error when exceeded |
|---|---|---|
| Requests per minute | Fixed 60-second window | rate_limit_error |
| Concurrent requests | In-flight at any instant | rate_limit_error |
| Token allowance | Billing period | quota_exceeded |
The exact numbers come from your plan and are shown on the pricing page. They can be raised on your account without changing plan — ask.
Rate limit headers
Every response carries your current position in the per-minute window.
anthropic-ratelimit-requests-limit: 600
anthropic-ratelimit-requests-remaining: 587
anthropic-ratelimit-requests-reset: 2026-07-30T17:04:00+00:00
A 429 from the per-minute limit also carries Retry-After in
seconds. Honouring it is the fastest way through — it is the exact time until the
window rolls over, not a guess.
Concurrency
A concurrency slot is held for the whole life of a request, including a long streamed completion. Slots carry a timeout, so a client that disconnects mid-stream cannot leak a slot and slowly starve your account.
If you are running a batch job, cap your worker pool at your concurrency limit rather than relying on 429s to throttle you. It is faster and it leaves headroom for your interactive traffic.
Monthly allowance
Tokens count against the allowance with cache reads weighted at 10% and cache writes at 125%, matching how they are priced upstream. Prompt caching therefore stretches your allowance as well as reducing your bill.
Once the allowance is used, behaviour depends on your plan. If overage is enabled you
keep serving and the excess is billed per million tokens. If it is not, requests are
refused with quota_exceeded. Either way there is a hard ceiling — a
runaway loop on your side cannot run up an unbounded bill.
Checking your usage
GET /v1/usage is free and not rate limited. Poll it to degrade gracefully
rather than discovering the limit through a 429.
curl https://ai.dijitul.uk/v1/usage -H "x-api-key: $GATEWAY_API_KEY"
{
"period": { "start": "2026-07-14T00:00:00+01:00", "end": "2026-08-14T00:00:00+01:00" },
"plan": "studio",
"residency": "eu",
"privacy_mode": "tokenise",
"tokens": {
"allowance": 14000000,
"used": 8420117,
"remaining": 5579883,
"percent_used": 60.14,
"overage_allowed": true
},
"rate_limit": { "requests_per_minute": 600, "remaining": 587, "concurrency": 12 },
"by_model": [
{ "model": "claude-sonnet-4-6", "requests": 4120, "billable_tokens": 7900112, "cost_gbp": 61.2841 }
]
}
Handling limits well
- Retry
rate_limit_errorwith backoff; never retryquota_exceeded. - Use
Retry-Afterwhen present rather than a fixed sleep. - Add jitter, or a fleet of workers will retry in lockstep and collide again.
- Watch
percent_usedand warn your own users before you hit the ceiling. - Use a cheaper model for bulk work — allowance is counted in tokens, not requests.