Status codes
400Bad Request — a required field is missing or a rule was broken. Check the body against the rules on the relevant page.401Unauthorized — invalid API key or no session. See Authentication Methods.402Payment Required — not enough credit. See The Credit System.403Forbidden — the URL is blacklisted, or the resource belongs to another account.404Not Found — no flow, node or record with that id.422Unprocessable Entity — validation failed. Work through the items in themessagearray.500Internal Server Error — an unexpected server error. Retry after a short delay.504Gateway Timeout — a background call exceeded 50 seconds. See Limits and Timeouts.
Error body shapes
The standard shape:
{
"statusCode": 400,
"message": "pack_id is required",
"error": "Bad Request"
}Validation errors, where message is an array:
{
"statusCode": 422,
"message": [
"email must be an email",
"password must be longer than 8 characters"
],
"error": "Unprocessable Entity"
}And from the auth layer:
{ "code": "UNAUTHORIZED", "message": "Unauthorized" }message can be either a string or an array. Handle both in your client, or error rendering will break on validation failures.
Common situations
401but the key looks right — the header name is wrong; usex-api-key, notAuthorization.401on a key that used to work — it was revoked (enabled: false). Create a new one.402— the balance is exhausted; checkremainingviaGET /api/users/api-keys.403on a scrape — the target URL is blacklisted.400, POST rejected —method: "POST"in browser mode; switch tohttpor usefill_form.400, capture rejected —capture_networkin http mode; switch tobrowser.504on a template endpoint — the microservice call ran long; retry.
Retry policy
500,502,503,504— retry with exponential backoff, at most three times (2 s, 4 s, 8 s).400,401,402,403,404,422— do not retry; fix the request or the account first.- Scraping requests already retry internally as many times as
options.retry_countallows.