Rate limits
The edge load balancer enforces rate limits before a request reaches
the API. When you exceed a limit, you get HTTP 429.
Review the current limits (AI beta)
Section titled “Review the current limits (AI beta)”| Bucket | Limit |
|---|---|
Per Authorization value (any auth) |
600 req / 60 s |
| Per Internet Protocol (IP) address (unauthenticated) | 60 req / 60 s |
These limits apply across the entire /v1/* surface, not per
endpoint.
Detect a 429 response
Section titled “Detect a 429 response”The load balancer generates the 429 response body as a short HTML
page, not the standard JSON error envelope. The response has no
Retry-After header:
HTTP/2 429content-type: text/html; charset=UTF-8
<!doctype html>…<title>429</title>429 Too Many RequestsA 429 can also come from the model provider when it’s busy. That
response uses the
standard error envelope
with "type": "rate_limit_error". It means the model is busy, not
that you hit your limit. Handle it the same way.
Configure client retries
Section titled “Configure client retries”- Catch
429responses explicitly. - Back off exponentially with jitter. For example, start at 1 s, double the delay on each retry up to a 30 s ceiling, and add 0–500 ms of jitter.
- Cap total retries at a number that matches your service-level objective (SLO), typically 3 to 5 attempts.
- Don’t retry on
400,401,402,403,404, or413. These responses don’t succeed on a second attempt. The exception is a403with"type": "billing_account_pending", which clears once the account’s billing setup finishes.
Plan for streaming and long requests
Section titled “Plan for streaming and long requests”A streaming chat completion counts as a single request against the rate limit, regardless of its duration. If you exceed the limit while a stream is in progress, the in-flight stream completes. The load balancer throttles only the next request.
The gateway also applies a server-side timeout to each call to the
model provider, currently 110 seconds. It retries a call that times
out up to three more times. If every attempt times out, the gateway
returns 504 with "type": "timeout_error", not 429. For a
streaming request, the timeout covers the wait for the stream to
start, not its full duration.