| 400 | VALIDATION_ERROR | client | Malformed body, unknown parameter, unsupported combination | no |
| 400 | CONTENT_BLOCKED_BY_POLICY | client | Your organization’s content policy blocked the input | no |
| 400 | ASSISTANT_PREFILL_UNSUPPORTED | client | Trailing assistant turn sent to a model that rejects prefill | no |
| 401 | AUTHENTICATION_ERROR | client | Missing, malformed, revoked or expired API key | no |
| 401 / 403 | BYOK_KEY_INVALID | client | Your own provider key was rejected by the provider | no |
| 402 | WALLET_INSUFFICIENT_FUNDS | client | Your AI Reserve credit is exhausted — top up | no |
| 402 | WALLET_NOT_ENABLED | client | Billing is not enabled for your organization | no |
| 402 | BUDGET_EXCEEDED (usage_cap_exceeded on OpenAI-compatible routes; 429 ThrottlingException on Bedrock-compatible routes) | client | An admin budget (organization, team or member) is reached | no |
| 402 | SESSION_BUDGET_EXCEEDED | client | Your own per-session budget is reached | no |
| 402 | BYOK_BALANCE_EXHAUSTED | client | Your own provider account is out of credit | no |
| 403 | AUTHORIZATION_ERROR | client | The key is valid but may not do this (inactive user, scope, IP/country screen) | no |
| 403 | MODEL_NOT_ALLOWED | client | Model not allowed for your organization, key, or jurisdiction policy | no |
| 403 | INTEGRATION_BLOCKED | client | Your team has blocked this coding tool | no |
| 404 | MODEL_NOT_FOUND | client | Unknown model id — the message suggests close matches | no |
| 404 | NOT_FOUND | client | Unknown resource (file, job, voice, endpoint) | no |
| 408 | TIMEOUT_ERROR | provider | The provider’s own request timeout, relayed | yes, or switch models |
| 413 | VALIDATION_ERROR | client | Request body over the size limit, or a prompt over the model’s context window | no |
| 422 | MODEL_NOT_CONFIGURED | platform | The model exists but is not fully onboarded (no pricing) — you were not charged | switch models |
| 429 | RATE_LIMIT_EXCEEDED | client | Your organization’s or key’s rate limit; Retry-After is the window reset | yes |
| 429 | RATE_LIMIT_EXCEEDED | provider | The provider is rate-limiting this model | yes, or switch models |
| 429 | BYOK_RATE_LIMITED | client | Your own provider key is rate-limited by the provider | yes |
| 500 | INTERNAL_ERROR | platform | An AI Reserve component failed; the message says what happened and whether you were charged (you were not, unless a finished generation could not be stored) | yes |
| 500 | STREAM_ERROR | platform / provider | The engine returned no body, or the stream failed before the first byte | yes |
| 502 | UPSTREAM_ERROR | provider | The provider returned an error we could not recover from | yes, or switch models |
| 503 | SERVICE_UNAVAILABLE | platform | AI Reserve could not reach its inference engine, an enforcement component or its file storage — you were not charged | yes (Retry-After) |
| 503 | UPSTREAM_ERROR | provider | The provider is unavailable | yes, or switch models |
| 503 | provider_insufficient_balance | platform | AI Reserve’s own account with the provider is out of credit — not your credit, you were not charged | yes, or switch models |
| 503 | provider_account_unavailable | platform | The provider has suspended AI Reserve’s account — you were not charged | yes, or switch models |
| 504 | TIMEOUT_ERROR | platform | The gateway gave up waiting for the engine (request budget or first-byte ceiling) — you were not charged | yes; stream long generations |
| 504 | TIMEOUT_ERROR | provider | The provider did not answer in time (pinned serving groups report the provider by name) | yes, or switch models |