Content-Type: application/problem+json and a consistent JSON body.
Error Response Format
Fields
| Field | Type | Required | Description |
|---|---|---|---|
status | integer | Yes | The HTTP status code. |
title | string | Yes | A short, stable, human-readable summary of the problem type. This string does not change between occurrences of the same error class. |
type | string (URI) | No | A URI that identifies the problem type and links to this documentation page. Clients can use this to route errors programmatically. |
detail | string | No | A human-readable explanation specific to this occurrence of the problem. Describes what went wrong and, where possible, how to fix it. |
instance | string (URI) | No | A URI identifying the specific resource involved in the error. |
error_code | string (enum) | No | A stable, machine-readable code identifying the error subtype within an HTTP status class. Use this to branch on specific error causes without parsing detail strings. See Error Codes. |
HTTP Status Codes
400 — Invalid Request
The request was malformed and could not be parsed — for example, the body is not valid JSON or a field has the wrong type.- Malformed or unparseable JSON body
- Field value of the wrong type (e.g., string where integer expected)
- Invalid resource ID format
401 — Authentication Required
The request did not include valid credentials, or the provided credentials are invalid or expired.- Missing
Authorizationheader - Expired or revoked API key
- Expired OAuth access token — re-authenticate and retry
- Unrecognized credential format
Authorization: Bearer <credential> header. See Authentication.
403 — Access Forbidden
The caller is authenticated but lacks permission for the requested action on a resource they can read. This is distinct from 404: a 403 confirms the resource exists but the action is not allowed.404 — Resource Not Found
The requested resource does not exist, or the caller has no read access to it. The API intentionally does not distinguish between these two cases to prevent resource enumeration.405 — Method Not Allowed
The HTTP method used is not supported by this endpoint.409 — Resource Conflict
The request conflicts with the current state of the server, typically because a resource with the same unique identifier already exists.415 — Unsupported Media Type
TheContent-Type header is missing or not supported. Endpoints that accept a request body require Content-Type: application/json.
422 — Validation Error
The request was well-formed but failed semantic validation — for example, a required field is missing or a value is outside the allowed range.- Missing required fields
- Value outside the allowed range or not in the allowed enum set
429 — Rate Limit Exceeded
The caller has exceeded the allowed request rate. The response includes aRetry-After header indicating how many seconds to wait before retrying.
| Header | Description |
|---|---|
Retry-After | Number of seconds to wait before retrying. |
500 — Internal Server Error
An unexpected error occurred on the server. This is not caused by the client request and is safe to retry with exponential backoff.502 — Bad Gateway
The server received an invalid response from an upstream service. Retry with exponential backoff.503 — Service Unavailable
The service is temporarily unavailable, usually due to maintenance or overload. Retry with exponential backoff.Error Codes
Theerror_code field provides a stable, machine-readable identifier for the specific error subtype. It is only present on 4xx responses where the distinction is actionable by the client. Server errors (5xx) do not include error_code.
error_code | HTTP Status | Description |
|---|---|---|
VALIDATION_ERROR | 400 | The request body failed schema validation (e.g. malformed JSON, wrong field type). |
MISSING_REQUIRED_FIELD | 422 | A required field is absent or empty. The detail field names the missing field. |
INVALID_FIELD_VALUE | 422 | A field is present but its value is invalid (out of range, wrong format, etc.). |
INVALID_ENUM_VALUE | 422 | A field contains a value not in the allowed enum set. |
INVALID_ID | 400 | A resource ID could not be decoded (wrong format or wrong type). |
RESOURCE_NOT_FOUND | 404 | The requested resource does not exist or is not accessible to the caller. |
RESOURCE_ALREADY_EXISTS | 409 | A resource with the same unique identifier already exists. |
ACCESS_DENIED | 403 | The caller is authenticated but lacks permission for this action on this resource. |
AUTHENTICATION_REQUIRED | 401 | No credentials were provided, or the credential format was not recognized. |
INVALID_CREDENTIALS | 401 | Credentials were provided but are invalid, expired, or revoked. |
RATE_LIMIT_EXCEEDED | 429 | The caller has exceeded the allowed request rate. Check the Retry-After header. |
UNSUPPORTED_MEDIA_TYPE | 415 | The Content-Type header is missing or not application/json. |
METHOD_NOT_ALLOWED | 405 | The HTTP method is not supported by this endpoint. |