API troubleshooting
Every error response follows the same shape — start by reading the code and message fields:
{
"error": {
"code": "RATE_LIMITED",
"message": "Daily request quota exceeded. Resets at 00:00 UTC.",
"correlationId": "req_01j8x4k2m9n..."
}
}The correlationId appears on every response — success or error. Include it in any support request so we can locate the exact request in logs immediately.
Common problems
Unauthorised — missing or invalid API key
Check that your request includes the Authorization: Bearer YOUR_API_KEY header with the correct prefix. If the key was recently rotated or revoked, generate a new one in your dashboard.
Forbidden — endpoint not available on your plan
Your current plan doesn't include the endpoint you're calling. Check the pricing page to see which endpoints are available at each tier. The free tier covers search and basic company lookup.
Bad request — invalid parameter
Read the message field in the error response — it names the specific parameter that failed. Common causes: q must be at least 2 characters; pageSize max is 100; jurisdiction codes must appear in the supported list.
Not found — entity doesn't exist in this jurisdiction
The company or person ID you provided doesn't exist in the given jurisdiction. Confirm the jurisdiction code is correct — for example, UK companies use gb, not uk. The ID may also have changed if the company was dissolved and re-registered.
Rate limited — monthly or daily quota exceeded
Check the Retry-After response header — it gives the number of seconds before your quota resets. Call GET /v1/usage to see your remaining allowance. Daily limits reset at 00:00 UTC; monthly limits reset on your billing date. Upgrade your plan →
Server error — safe to retry
These are transient errors on our side. Both are safe to retry with exponential backoff. For 503s, wait at least 30 seconds before retrying — the upstream registry may be briefly unavailable. If you contact support, include the correlationId from the error response so we can trace the request.
Error code reference
| Status | Code | When it happens |
|---|---|---|
| 400 | INVALID_PARAMETER | A query parameter has an invalid value |
| 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 |
| 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 |
| 500 | INTERNAL_ERROR | Server error — safe to retry with exponential backoff |
| 503 | REGISTRY_UNAVAILABLE | Upstream registry temporarily unreachable — retry after 30 s |
Retry strategy
| Status | Strategy |
|---|---|
| 429 | Wait for the value in the Retry-After header (seconds), then retry |
| 500 | Retry with exponential backoff — start at 1 s, double each attempt, cap at 60 s |
| 503 | Wait 30 seconds, then retry |
| 4xx (others) | Do not retry — fix the request first |
Still stuck?
Email [email protected] with the correlationId from the failing response, the endpoint you called, and the request parameters. This lets us find the exact request in logs immediately.