Errors
Errors use standard HTTP status codes and a consistent JSON body.
{
"error": {
"code": "not_found",
"message": "No data found for this request. You were not charged.",
"request_id": "req_k3J9xQ2mT0aB"
}
}Always log the request_id. It is also in the x-request-id header and lets support find your exact request.
| Status | Code | Meaning | Charged |
|---|---|---|---|
| 400 | missing_parameter / invalid_parameter / invalid_request | A parameter is missing or malformed, for example a VIN that is not 17 valid characters. | No |
| 401 | missing_api_key / invalid_api_key | No key was sent, or the key is wrong or revoked. | No |
| 402 | insufficient_credits | Your credit balance can’t cover this request. | No |
| 403 | account_suspended | The account has been suspended. Contact support. | No |
| 404 | not_found / endpoint_not_found | No data exists for this lookup, or the route does not exist. | No |
| 429 | rate_limited | Too many requests. Honour the retry-after header. | No |
| 502 | upstream_error / upstream_unreachable | Our data provider returned an error. Safe to retry. | No |
| 503 | maintenance | Planned maintenance. Retry after the retry-after header. | No |
| 504 | upstream_timeout | Our data provider took too long. Safe to retry. | No |
Handling failures
- Treat
4xxas a problem with the request. Don’t retry unchanged, except429. - Retry
502,503and504with exponential backoff. You are not charged for failed attempts. - Set a client timeout of at least 30 seconds; some lookups depend on slower upstream sources.