error.code programmatically and quote request_id when you contact support.
This page covers the error envelope, the full code table, the fail-closed behavior on unknown parameters, and how to use the request identifier.
The error envelope
Errors mirror the success envelope: anerror object replaces data, and the request identifier is preserved at both the top level and inside error.
The error payload. Present instead of
data on any failed request.The request identifier, repeated at the envelope root. Identical to
error.request_id.Error codes
Codes are stable. The HTTP status always matches the code as listed here.| Code | HTTP status | Meaning |
|---|---|---|
bad_request | 400 | The request was malformed: an invalid value, a missing required field, or an unknown query parameter. |
unauthorized | 401 | No API key was provided, or the key is invalid. Send a valid key via x-api-key or Authorization: Bearer. |
forbidden | 403 | The key is valid but lacks the scope required for the route (for example, calling an ops:read route with a data:read key). |
not_found | 404 | The requested resource does not exist (for example, an unknown entity, observation, or event id). |
rate_limited | 429 | You exceeded the rate limit for your client and scope in the current window. See Rate limits. |
internal_error | 500 | An unexpected server error. Retry with backoff; if it persists, contact support with the request_id. |
Branch your error handling on
error.code, never on the HTTP status alone and never on the message string. The code is the part of the contract that is guaranteed stable.Fail closed on unknown parameters
Conduit rejects unknown query parameters rather than silently ignoring them. If you send a parameter the endpoint does not recognize (for example, a typo likecontry instead of country), the request fails with bad_request and a 400 status.
This is deliberate. Silently ignoring a misspelled filter would return data that does not match what you asked for, which is worse than a clear error. Fail-closed means a typo surfaces immediately instead of quietly returning the wrong rows.
A typo fails closed (cURL)
Handling errors in code
Using request_id with support
Every error response carries arequest_id (and its requestId twin). The value identifies your exact request in the server logs.
When something looks wrong and you reach out for help, include:
- the
request_idfrom the failing response, - the
error.codeyou received, - the full URL you called (with parameters).
Rate limits
The 429 body, the limit headers, and backoff guidance.
Response envelope
How errors mirror the success envelope.