Error Codes
Errors render in the caller’s dialect envelope — OpenAI {"error":{message,type,code}} or Anthropic {"type":"error","error":{type,message}}. The type values are dialect-neutral:
| Error type | HTTP | Meaning |
|---|---|---|
invalid_request_error | 400 | Malformed request, a missing mandatory header, or context length exceeded |
content_filter_error | 400 | The content was rejected by a safety filter |
authentication_error | 401 | Missing or invalid token |
permission_error | 403 | Not permitted — includes a token tenant that doesn’t match X-Kis-Tenant when enforcement is on |
not_found_error | 404 | Unknown model alias |
rate_limit_error | 429 | A rate or cost budget was exceeded (Retry-After set) |
api_error | 502 | An upstream provider returned an error |
overloaded_error | 503 | Every upstream failed, or the gateway is not yet ready |
timeout_error | 504 | Upstream timed out (a canceled request is 408) |
Response headers: X-Kis-Request-ID is echoed, X-Kis-Idempotent-Replay: true on an idempotent replay, and Retry-After accompanies a 429.