API error codes and HTTP status mapping
Every EvalGate error code, its HTTP status, what it means, and how to handle errors in TypeScript and Python with try/catch examples.When a request fails, EvalGate always returns a JSON object in the same envelope shape — regardless of the HTTP status code. Parsing this envelope lets you handle every error class in a single place.
Error envelope
Every error response has this structure:A machine-readable constant identifying the error class. Use this field for programmatic error handling — never parse
message.A human-readable description of what went wrong. Suitable for logs and development debugging; do not display this to end users without filtering.
Optional additional context. For
VALIDATION_ERROR, this contains a Zod issues array describing which fields failed and why. null for all other codes.A UUID that uniquely identifies the request on EvalGate’s servers. Include this value in any support ticket — the team can use it to locate the exact request in logs. The same UUID appears in the
x-request-id response header.Error codes and HTTP status mapping
| Code | HTTP status | When it occurs |
|---|---|---|
UNAUTHORIZED | 401 | Missing or invalid API key |
FORBIDDEN | 403 | Key lacks required scope for this resource |
NO_ORG_MEMBERSHIP | 403 | Authenticated user is not a member of the target organization |
QUOTA_EXCEEDED | 403 | Organization has reached a usage limit (upgrade required) |
NOT_FOUND | 404 | Resource does not exist, or the ID belongs to a different organization |
VALIDATION_ERROR | 400 | Request body or query parameters failed schema validation |
CONFLICT | 409 | A resource with the same identifier already exists |
RATE_LIMITED | 429 | Too many requests — back off and retry after the X-RateLimit-Reset time |
INTERNAL_ERROR | 500 | Unexpected server error — include the requestId when contacting support |
SERVICE_UNAVAILABLE | 503 | EvalGate is temporarily unavailable — retry with exponential backoff |
QUOTA_EXCEEDED and NO_ORG_MEMBERSHIP both map to HTTP 403. Distinguish them by the code field, not the status code.