Errors
All errors follow a consistent shape regardless of the endpoint.
Error shape
{
"error": {
"code": "RATE_LIMITED",
"message": "Daily request quota exceeded. Resets at 00:00 UTC.",
"correlationId": "req_01j8x4k2m9n..."
}
}Error codes
| HTTP status | Code | When it happens |
|---|---|---|
| 400 | INVALID_PARAMETER | A query parameter has an invalid value (e.g. pageSize over 100, q under 2 characters) |
| 400 | INVALID_JURISDICTION | Jurisdiction code not in the supported list |
| 401 | UNAUTHORIZED | API key missing, malformed, or missing the Bearer prefix |
| 401 | KEY_REVOKED | API key has been rotated or explicitly revoked |
| 403 | FORBIDDEN | Your plan doesn't include this endpoint — see pricing |
| 404 | NOT_FOUND | Entity ID doesn't exist in this jurisdiction |
| 422 | VALIDATION_ERROR | Request body failed validation (batch endpoint) |
| 429 | RATE_LIMITED | Monthly or daily quota exceeded — see rate limits |
| 500 | INTERNAL_ERROR | Server error — safe to retry; include correlationId when contacting support |
| 503 | REGISTRY_UNAVAILABLE | Upstream registry temporarily unreachable — retry after 30 seconds |
The correlationId field
Every response — success or error — includes a correlationId. Include it in any support request: it allows us to find your specific request in logs immediately, regardless of when it occurred.
// Success response
{
"results": [...],
"correlationId": "req_01j8x4k2m9n..."
}
// Error response
{
"error": {
"code": "NOT_FOUND",
"message": "Entity gb-99999999 not found.",
"correlationId": "req_01j8x4k2m9n..."
}
}Retrying requests
| Status | Strategy |
|---|---|
| 429 | Back off and retry after the value in the Retry-After header (seconds) |
| 500 | Safe to retry with exponential backoff |
| 503 | Retry after 30 seconds |
| 4xx (others) | Do not retry — the request itself is invalid; fix it first |