200 OK. Errors return a JSON body with a detail field that describes what went wrong.
HTTP status codes
| Code | Status | When it’s returned |
|---|---|---|
200 | OK | Request succeeded. |
400 | Bad Request | Request body or path parameter is malformed (e.g. empty email list, invalid job_id format, more than 100,000 emails in a bulk submission). |
401 | Unauthorized | X-API-Key header is missing or contains an invalid key. |
403 | Forbidden | Insufficient credit balance for the requested operation. |
404 | Not Found | The requested job_id does not exist or does not belong to your API key. |
409 | Conflict | Bulk job results requested before the job has reached complete. |
422 | Unprocessable Entity | Query, path, or body parameter failed type validation. |
429 | Too Many Requests | Rate limit exceeded. |
500 | Internal Server Error | An unexpected server error occurred. Rare; typically transient. |
502 | Bad Gateway | The downstream verification service is temporarily unavailable. |
400 Bad Request
Returned when the request is structurally valid but semantically rejected. Common causes:- Empty
emailsarray onPOST /v1/bulk - More than 100,000 entries in
emails - A path-level
job_idthat isn’t a valid UUID
400
detail message — it identifies the offending field. For job_id errors, confirm you’re passing the UUID returned by POST /v1/bulk.
401 Unauthorized
Returned when theX-API-Key header is missing or contains an invalid key.
401
X-API-Key header with a valid API key. The header name is case-sensitive.
cURL
403 Forbidden — insufficient credits
Returned when your credit balance is too low for the requested operation. Single verifications cost 0.2 credits; bulk submissions are pre-charged for the full deduplicated cost. The error body tells you both your current balance and what was required.403
404 Not Found
Returned when ajob_id doesn’t exist, or exists but belongs to a different API key.
404
job_id from the original POST /v1/bulk response and that you’re authenticating with the same API key that created the job.
409 Conflict — job not ready
Returned byGET /v1/bulk/{job_id}/results when the job hasn’t finished yet. The detail includes the job’s current status.
409
GET /v1/bulk/{job_id} until status is complete (or partial_complete_retrying if you want partial results) before fetching results. Partial results can also be fetched directly — see bulk results for partial-fetch behaviour.
422 Unprocessable Entity — validation errors
Returned when a query, path, or body parameter fails type validation (e.g.email is missing, timeout is outside the 3–90 range, request body isn’t valid JSON).
422
detail string identifies the offending parameter and the validation rule it violated. Common cases: missing required field, value outside allowed range, wrong type.
429 Too Many Requests
Returned when you exceed the rate limit of 20 requests per second per API key across the entire/v1/* API. The response includes a Retry-After header indicating how many seconds to wait before retrying.
429
Retry-After value (currently always 1, may grow in future) and back off before retrying. For sustained high throughput, use the POST /v1/bulk endpoint instead — it’s designed for large-volume workloads and isn’t subject to the per-second cap. Contact us if you need a higher single-verification rate.
500 Internal Server Error
Returned when an unexpected server-side error occurs. These are rare and typically transient. How to fix: Wait a moment and retry the request. If the error persists, contact OrbiSearch support with the request details and timestamp. Credits deducted before the error are automatically refunded.502 Bad Gateway
Returned when the downstream email verification service is temporarily unavailable.502
Common errors and fixes
| Error | Cause | Fix |
|---|---|---|
API key required in X-API-Key header | Missing X-API-Key header | Add --header "X-API-Key: YOUR_API_KEY" to every request |
Insufficient credits... | Balance below required cost | Top up your balance and retry |
Email list cannot be empty | POST /v1/bulk with empty emails array | Include at least one address |
Maximum 100,000 emails per batch | Bulk submission too large | Split into multiple jobs of ≤100,000 each |
Invalid job ID format | job_id is not a valid UUID | Use the job_id returned by POST /v1/bulk verbatim |
Job not found | job_id doesn’t exist or belongs to another API key | Confirm the job ID and authenticate with the original API key |
Job is not completed yet... | Fetched results before the job reached complete | Poll job status or accept the partial result set |
Rate limit exceeded... | More than 20 requests per second | Honour Retry-After; use /v1/bulk for high volume |