Documentation
API ReferenceErrors and limits
// Docs

Errors and limits

HTTP errors, batch errors, and the limits that apply to the public API.

The public API returns errors as { "error": "<machine-readable message>" } with a conventional HTTP status. Batch-level business errors come back inside a 202 or 429 response as batchError.

HTTP status codes

Statuserror valueCause
400invalid json, urls must be a non-empty string array, idempotency-key required, idempotency-key must be 255 characters or fewerThe request body or the idempotency header failed validation
401missing bearer token, invalid api keyNo Authorization: Bearer header, or the key does not exist
403api key lookup failed, scope deniedThe key lookup failed, or the key lacks the required scope
404not foundThe task ID does not exist or belongs to another account
409idempotency conflictThe same Idempotency-Key arrived with a different body
413batch too largeMore than 100 URLs, or the body exceeds about 900 KB
425request is still processingThe same idempotency key is still in flight. Retry after Retry-After seconds
429rate limit exceededToo many requests. Honor the Retry-After header
500processing failed, task lookup failedA server-side failure. The idempotent replay returns the same error

Batch errors

When the whole batch fails on an account or billing limit, POST /api/v1/urls returns 429 with batchError set. A 202 response can also carry batchError: null plus per-URL rejectedUpfront entries.

batchErrorCause
batch_too_largeMore than 100 URLs in one request
first_order_limitBatches over 50 URLs require at least one paid order on the account
daily_limitThe account passed its daily submission cap of 2,000 URLs
insufficient_creditsThe credit balance or pending volume cannot cover the batch
account_unavailableThe account is banned or unavailable

Rate limits

Two sliding-window limits apply, both defaulting to one minute.

LimitDefaultScope
Per IP30 requests / minutepublicApiIp
Per API key120 requests / minutepublicApiKey

A 429 response includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and Retry-After headers.

Per-URL rejection reasons

URLs rejected during intake validation appear in rejectedUpfront and do not consume credits. See Submit URLs for the full table.