Errors
Both surfaces emit envelope-shaped JSON; the OpenAI surface uses OpenAI's shape, the Anthropic surface uses Anthropic's.
OpenAI surface
Envelope:
{ "error": { "message": "...", "type": "...", "code": "..." } }| HTTP | type | code | Meaning |
|---|---|---|---|
| 400 | invalid_request_error | invalid_request | Body shape wrong / missing required fields |
| 400 | invalid_request_error | missing_model | `model` field absent + no X-QGRE-Model header |
| 401 | permission_error | missing_bearer | No / malformed Authorization header |
| 401 | permission_error | invalid_api_key | Bearer didn't match an active key |
| 403 | permission_error | model_forbidden | Key not allowed to call this model |
| 404 | invalid_request_error | model_not_found | model_id not in the configured upstream pool |
| 413 | invalid_request_error | payload_too_large | Body > max_body_mb (default 8 MB) |
| 429 | rate_limit_error | rate_limit_exceeded | Per-key bucket drained (Retry-After: 1) |
| 429 | rate_limit_error | ip_rate_limit_exceeded | IP bucket drained (anonymous-flooder defense) |
| 502 | upstream_error | bad_gateway | Upstream forward failed mid-request |
| 502 | upstream_error | upstream_stream_failed | Stream broke mid-flight (delivered as SSE error event then [DONE]) |
| 503 | service_unavailable | upstream_unavailable | All replicas for the model are unhealthy |
| 503 | service_unavailable | global_concurrency_exhausted | Global in-flight cap reached; retry shortly |
| 503 | service_unavailable | no_priced_upstream | model: "auto" + cost-tier but no priced upstream is healthy |
| 408 | service_unavailable | request_timeout | Per-route timeout exceeded (`abuse.short_request_timeout_secs`) |
Anthropic surface
Envelope:
{ "type": "error", "error": { "type": "...", "message": "..." } }| HTTP | type | Meaning |
|---|---|---|
| 400 | invalid_request_error | Malformed Messages JSON OR empty messages[] |
| 401 | permission_error | No bearer / invalid bearer |
| 403 | permission_error | Key not allowed for this model |
| 404 | not_found_error | Unknown model |
| 503 | overloaded_error | No healthy upstream replica |