200 OK. Errors return a JSON body with a detail field that describes what went wrong.
HTTP status codes
All error responses share the same shape — a
detail string, plus an optional code:
code field is a stable, machine-readable identifier. It appears only where it adds a distinction the HTTP status alone doesn’t carry — for example, telling a per-second rate limit (rate_limited) apart from an exhausted daily quota (daily_quota_exceeded), both of which return 429. When code is absent, the status code and detail are sufficient; branch on code only when you need to react to the specific conditions documented below.
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–97 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
Two distinct conditions return429. Use the code field to tell them apart — they need different handling, and the Retry-After header reflects that.
Per-second rate limit — code: "rate_limited"
Returned when you exceed 20 requests per second per API key across the entire /v1/* API.
429
Retry-After value (usually 1; rises to 5 when you exceed the limit by 3x or more, to break tight retry loops) and back off before retrying. Better still, avoid the 429 entirely: every authenticated response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers describing your current per-key window, so you can self-throttle. 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 rate.
Daily quota — code: "daily_quota_exceeded"
Returned by metered free endpoints (such as POST /v1/content-spam-check) when you exhaust the day’s allowance. Here Retry-After is the number of seconds until the quota resets at UTC midnight — typically thousands of seconds, not 1.
429
Retry-After value), or spread your usage across the day. The cap is shared with the corresponding in-dashboard tool.
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
503 Service Unavailable — code: "engine_unavailable"
Returned when a backing analysis engine is temporarily unavailable — for example, the content spam-check engine behind POST /v1/content-spam-check.
503