Error Codes
Every error response from the Zenoo API includes a machine-readable error code, a human-readable message, and a unique request ID.Response format
| Field | Description |
|---|---|
error | Machine-readable error code. Use this for programmatic error handling. |
message | Human-readable description. Log this, but do not display it to end users. |
request_id | Unique identifier for the request. Include this in support tickets. |
Error code reference
| Error Code | HTTP Status | Description | Retryable | Recommended Action |
|---|---|---|---|---|
VALIDATION_ERROR | 400 | Missing or invalid required fields | No | Fix the request payload and resubmit |
INVALID_JSON | 400 | Request body is not valid JSON | No | Check for syntax errors in the JSON body |
UNAUTHORIZED | 401 | Missing or invalid API key | No | Verify the X-API-KEY header value |
FORBIDDEN | 403 | API key does not have access to this project | No | Contact Zenoo support for access |
NOT_FOUND | 404 | Invalid project hash, endpoint, or resource | No | Verify the URL, project hash, and resource ID |
TOKEN_EXPIRED | 404 | Pull token has expired | No | Initiate a new verification to get fresh tokens |
PROCESSING | 204 | Results still processing (pull endpoint only) | Yes | Retry per polling strategy in Sync vs Async |
RATE_LIMITED | 429 | Too many requests | Yes | Wait for the duration in the Retry-After header |
INTERNAL_ERROR | 500 | Unexpected server error | Yes | Retry with exponential backoff |
PROVIDER_ERROR | 502 | Upstream provider failure (registry, screening) | Yes | Retry with exponential backoff |
SERVICE_UNAVAILABLE | 503 | Zenoo service temporarily unavailable | Yes | Retry after 30 seconds |
Examples
VALIDATION_ERROR (400)
VALIDATION_ERROR (400)
Returned when the request is missing required fields or contains invalid values.
INVALID_JSON (400)
INVALID_JSON (400)
Returned when the request body cannot be parsed as JSON.
UNAUTHORIZED (401)
UNAUTHORIZED (401)
FORBIDDEN (403)
FORBIDDEN (403)
Returned when the API key is valid but does not have access to the requested project.
NOT_FOUND (404)
NOT_FOUND (404)
Returned when the project hash, endpoint, or resource does not exist.
TOKEN_EXPIRED (404)
TOKEN_EXPIRED (404)
Returned when a pull token has expired. Pull tokens are valid for 30 days after results become available. Start tokens (verification URLs) expire after 24 hours.
RATE_LIMITED (429)
RATE_LIMITED (429)
Returned when request volume exceeds your project’s rate limit. The Response headers:
Retry-After header tells you how many seconds to wait.INTERNAL_ERROR (500)
INTERNAL_ERROR (500)
Returned for unexpected server errors. These are transient and should be retried.
PROVIDER_ERROR (502)
PROVIDER_ERROR (502)
Returned when an upstream verification provider (registry, screening) fails. Zenoo automatically retries provider failures for async flows. For sync flows, retry the request.
SERVICE_UNAVAILABLE (503)
SERVICE_UNAVAILABLE (503)
Retry logic
Use the following exponential backoff schedule for retryable errors:
RATE_LIMITED (429), always use the Retry-After header value instead of the default backoff schedule.
For detailed retry implementation, see Error Handling.
Next steps
- Rate Limits — Per-endpoint rate limits and best practices
- Error Handling — Retry strategies and circuit breaker behavior
- Glossary — Term definitions