Skip to main content

Error response format

All API errors return JSON:

HTTP status codes

Block detection

Every fetch response includes a meta.blocked field:
When meta.blocked is true:
  • The agent that got blocked is automatically excluded for this domain
  • Your next request will be routed to a different agent
  • The response still contains the full target body for your inspection
You can check per-agent health for a domain:
The health endpoint returns three states: available, limited (temporary), and unavailable (longer exclusion). Agents recover automatically.

Retry strategies

Rate limit (429)

Use exponential backoff: wait 1s, 2s, 4s, etc. Check GET /usage for your current rate limit status.

Blocked (meta.blocked = true)

No client-side retry needed. The API automatically routes your next request to a different, healthy agent. Just keep making requests normally.

Browser validation failure (502)

If you use expectSelector or expectContains on /browser and the rendered page doesn’t match, the API automatically retries on a different node before returning the error. No client-side retry needed for the first failure.

Timeout (504)

  • Increase the timeout field in your POST body (default: 30 seconds)
  • For /browser, note that browser startup adds ~2-5 seconds — set timeout accordingly
  • Use X-Geo to pick agents geographically closer to the target
  • Use GET /debug/pick?url=... to preview which agent would be selected

No agents available (502)

All agents for this domain are temporarily excluded. Wait a moment and retry, or use GET /network/health/{domain} to check recovery status.

WebSocket errors

AMQP errors

AMQP errors are delivered as SSE events:
After an error event, the SSE stream closes.

Common errors

Missing target URL

Invalid geo code

WebSocket connect timeout

The first JSON message with apiKey and url must be sent within 10 seconds of opening the WebSocket connection, or it will be closed with code 1008.