Docs/Errors

Errors

Every error is a JSON body carrying statusCode, statusMessage (a message field mirrors it), and data with a stable machine-readable code and the call's requestId - branch on data.code, not the English message. Failed calls are never billed - retrying costs nothing.

Every response - success or error - also carries the same id in the X-Request-Id header. Include it when reporting a problem and we can find your exact call.

400invalid_requestThe url parameter is missing or not a valid URL, a format / framework / fields value is unknown, or the target resolves to a private or internal address (blocked).
401invalid_api_keyThe API key is missing, malformed, invalid, or revoked.
402billing_issueThe key's subscription is past due, canceled, or inactive - update billing in the dashboard or create a new key.
403target_blockedThe target site is blocking automated requests.
404not_foundThe target page doesn't exist - or, on /v1/code, the selector matched no element (the message lists the sections that do exist).
408target_timeoutThe target site took longer than 15 seconds to respond.
422unprocessable_content/v1/code only: the selected element produced no renderable content - pick a different selector from sections.
429rate_limited · quota_exceededPer-minute rate limit exceeded (rate_limited - the message says how many seconds until it resets), or your credit allowance is used up (quota_exceeded) - on free keys that is the monthly quota; on paid plans it is the quota plus the billed overage allowance.
500internal_errorThe extraction failed unexpectedly. Retrying is safe - failed calls are never billed.
502target_errorThe target site responded with an error status of its own.
503target_unreachable · render_unavailableThe target site is unreachable - down, or refusing connections. render_unavailable means render=true was requested but JS rendering is not available - retry without it.