Skip to main content
Status codes on this surface are honest: each one means a distinct thing, and the body says which.
A 403 is never a credential problem here. On many APIs an authorization failure arrives as a 401 and integrators rotate keys forever trying to fix it. A 403 from this surface means your key is fine and lacks access to that endpoint — so the fix is a conversation, not a new key.

Retrying a 429

Every 429 carries:
  • Retry-After — seconds to wait
  • X-RateLimit-Limit / X-RateLimit-Remaining
  • X-RateLimit-Reset — epoch seconds
Rate limits are per key, with separate budgets per endpoint class, so your batch traffic cannot starve your interactive traffic. Three different things return 429, and the body distinguishes them:
Short-window throttling. Honour Retry-After and continue.
Counts only your API-key requests, never our internal traffic. X-RateLimit-Reset is the start of next month, UTC.
LLM-backed endpoints stop at your organization’s spend limit rather than billing past it. Raise the cap with us; retrying will not clear it.

Request IDs

Every response carries X-Request-Id, and error bodies echo it as request_id. Include it in any support request: it joins your call to our logs and to the exact billing ledger row in one lookup. You may also send your own X-Request-Id — 8 to 64 characters of [A-Za-z0-9._-] — and we will echo it back.

Latency: measured, not promised

The p95 comes from upstream model throttling rather than our compute, which is why it is quoted as an observation rather than a guarantee.
Set client timeouts on LLM-backed endpoints to 120 s or more. A 30-second timeout will fire on healthy requests under concurrency. If you use an OpenAI-compatible SDK against the gateway, its built-in backoff already engages on our 429s, because the errors arrive OpenAI-shaped.