Skip to main content

Error format

Every error response has the same shape: a JSON object with a single error field.
We never return a stack trace or leak internal details.

Status codes

Handling specific cases

402 — Insufficient credits

The balance check happens before scraping, so a 402 means nothing was scraped and nothing was billed. Top up via POST /credits/buy and retry.

403 — Residential quota exhausted

During the beta, residential proxies run on a small free trial quota, separate from your credit balance. Once it’s used up (and residential isn’t unlocked on your account), a residential request returns:
Use datacenter or none in the meantime — see proxy_type.

429 — Rate limit

Requests are rate limited per API key. When you exceed the limit, the response includes a Retry-After header (in seconds) telling you when to try again.
A success: false scrape is not an error status — it returns 200 with success: false and an error message inside the JSON body (e.g. an unreachable target). These are not billed. See POST /scrape.