Docs/Docs / Error Semantics

Errors and Warnings

How to read `success`, `error`, `warning`, and target status codes without guessing.

Published
March 11, 2026
Updated
March 11, 2026
Category
docs
Engine errors vs target warningsStatus code interpretationCloud and self-host semantics

Response semantics

  • success: true means the pipeline produced usable page content.
  • success: false means the request failed — either an engine error or the target returned an error status (4xx/5xx) with minimal content.
  • error is present when success: false. It describes what went wrong.
  • warning flags degraded target outcomes (anti-bot pages, problematic status codes) when success: true — meaning content was produced but may be incomplete.
  • metadata.statusCode is the target site's HTTP status.
  • data may still be present when success: false if partial content was extracted.

The important distinction is that there are two layers of status:

  • the HTTP status returned by fastCRW,
  • and the target site's own status exposed through metadata.statusCode.

You need both to debug real scraping failures.

HTTP status codes returned by the API

StatusMeaning
200Success
400Invalid request parameters (bad URL, invalid JSON body, invalid selector)
401Invalid or missing API key
404Endpoint not found
422Validation failed (unknown format, invalid schema, extraction error)
429Rate limit or credit quota exceeded
502Engine internal error
503Server at capacity
504Request timed out

How To Read Common Cases

SituationWhat it usually meansWhat to do next
HTTP 200 with warningThe request succeeded, but the target result is degradedInspect warning and metadata.statusCode
HTTP 400Your request body is invalidFix fields, selectors, or schema
HTTP 422The request shape is valid JSON but semantically invalidCheck format names, schema, or extraction config
HTTP 429Rate limit or credit ceiling hitBack off and honor Retry-After
HTTP 502 / 504Upstream or timeout issueRetry with backoff

Common engine errors

ErrorWhen it happens
Invalid URLURL is malformed or targets a blocked address
Invalid selectorCSS selector or XPath expression cannot be parsed
Renderer timeoutJS rendering exceeded the page timeout
Navigation failedCDP browser could not load the page
Response too largePage exceeded the maximum allowed size
Invalid JSON schemaSchema provided for extraction is malformed
Extraction failureLLM extraction failed (no LLM configured, or LLM returned an error)
No JS renderer availablerenderJs: true but no CDP browser is configured

Common warnings

WarningWhen it appears
Target returned 403 ForbiddenTarget site blocked the request
Target returned 429 Too Many RequestsTarget site rate limited the request
Blocked by anti-bot protectionPage contains Cloudflare/captcha markers
JS rendering was requested but no renderer is availableFallback to HTTP-only fetch

Retry Guidance

Retrying helps only for some classes of failure:

  • retry 429, 502, and 504 with backoff,
  • do not blindly retry 400 or 422,
  • and treat repeated warnings from the same domain as a target compatibility problem, not a random transient issue.

If a page is repeatedly blocked by anti-bot protection, longer retry loops usually make the situation worse rather than better.