Errors & Status Codes
Openference aims to return clear errors while protecting upstream details when appropriate.Common status codes
Example error body
Retry-After header plus type, code, retry_after_seconds, and max_rpm in the body:
resets_at timestamp (ISO-8601) telling you when the allowance returns:
/v1/messages (Anthropic-native), limit errors use the Anthropic error envelope — { "type": "error", "error": { "type": "rate_limit_error", "message": "...", "code": "..." } } — so Anthropic-SDK clients surface the message natively.
Successful responses also carry X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers (your burst budget and when the 60-second window rolls) — see Rate Limits.
Important semantics
- Upstream failures never count against quota. A 529 “Overloaded” capacity response or a 502 upstream error does not consume your plan or credit balance.
- Limit responses are retry-friendly:
- Plan rate limit — your account exceeded its per-window allowance, weekly cap, or per-minute burst limit. Burst-limit 429s carry a
Retry-Afterheader (exact time until your sliding 60-second window frees capacity) and acode/retry_after_secondsbody. Without credit balance, window/weekly exhaustion returns 402 with aresets_attimestamp; on-demand credits may allow continued use past the per-window allowance and weekly cap. - Temporary abuse/capacity throttle — a short-lived lower per-minute cap applied to this key only when automated signals detect disproportionate high-volume load that may harm shared model capacity. Credits do not bypass this throttle. This is a rate reduction, not a block — the key keeps serving at the lower rate, so retry shortly at the reduced rate rather than waiting out the throttle. The response includes a short
Retry-Afterheader (seconds until your next retry, typically under a minute — not the full throttle duration) andretry_after_seconds/max_rpmfields in the body.
- Plan rate limit — your account exceeded its per-window allowance, weekly cap, or per-minute burst limit. Burst-limit 429s carry a
- 529 vs 429: Capacity issues return 529 Overloaded (with a
Retry-Afterheader) while we fail over or wait for providers to recover. They do not trigger the abuse throttle by themselves during platform-wide capacity events.
Capacity messages you may see
- “We’re experiencing heavy usage right now, which may cause increased latency or temporary unavailability…”
- “The model provider is temporarily unavailable…”
ZDR mode denial
API keys with ZDR mode enabled (see the FAQ) are hard-restricted to the providers we classify as zero-data-retention. Requesting a model that has no ZDR route — for example MiniMax M3 — returns 403 with codemodel_not_available_in_zdr_mode:
GET /v1/models for that key, so well-behaved clients never send them.