SnoopScan
Working with it

Errors

Every code, what it means, what to do.

A failure is always the same shape, so you can branch on error.code and never parse a message:

{  "success": false,  "error": {    "code": "BLOCKED",    "message": "Target returned a challenge at every attempt",    "detail": { "status_code": 403 }  }}

Error codes

CodeHTTPWhat to do
INVALID_REQUEST400The body did not validate. The message names the field. Fix and retry.
UNAUTHORIZED401Missing, mistyped or revoked key. Check the Authorization header.
ROBOTS_DENIED403The site's robots rules disallow it. Retrying will not change that.
JOB_NOT_FOUND404Unknown job id, or one that has aged out.
RATE_LIMITED429Slow down, or raise the plan. Back off and retry.
TARGET_ERROR502The site itself answered with an error; the real status is in detail.status_code. Usually the URL.
FETCH_FAILED502The site could not be reached at all — DNS, TLS, refused connection. Worth one retry.
BLOCKED502The site refused every attempt. Retrying immediately rarely helps; try again later or from another country with location.
TIMEOUT504The page took longer than your timeout. Raise it, or drop waitFor.
EXTRACTION_FAILED500The page came back but nothing usable could be read from it. Try another format.
INSUFFICIENT_CREDITS402The balance is empty. Nothing was fetched and nothing was charged. Top up or wait for the monthly refresh.
FORBIDDEN_SCOPE403The key is valid but does not hold the scope this endpoint needs. Grant it in API keys.
ENGINE_REFUSED503That site is being given a rest after repeated failures. Try again later, or try a different site.
SEARCH_UNAVAILABLE503No search provider is configured on this deployment. Nothing is broken; search is simply not switched on here.
PLACES_UNAVAILABLE503Places is not part of this deployment.
PLATFORMS_UNAVAILABLE503Platform shortcuts are not part of this deployment.
PROXY_UNAVAILABLE503No proxy provider is configured, so a proxied fetch cannot be served.
COMPANY_UNAVAILABLE503Company enrichment is not part of this deployment.
INTERNAL500Ours, not yours. It is logged with a trace id; send it to us.

Retries

Retry FETCH_FAILED, TIMEOUT and RATE_LIMITED with a widening gap. Do not retry INVALID_REQUEST, UNAUTHORIZED or ROBOTS_DENIED — the same request will fail the same way.

A failure costs nothing. None of these count against your allowance, so a retry loop cannot quietly drain it.