Reference
Reliability Contract
What the platform handles for you, and what a failed request tells your client.
The Six Clauses
- Recoverable failures are the platform's job. Mode and tier choice, applying the platform's own hints, per-domain pacing, queueing of overflow, retries on timeouts and search-engine failover happen automatically, on by default, at the lowest tier that works.
- Only unreachable targets fail. 404 and 410 responses, an origin that is down, a login or paywall, and legally excluded targets fail. Each failure returns a stable machine-readable reason, a retryable flag and retry_after_seconds.
- A block page is never a success. A challenge, interstitial or block page is returned as a failure with its protection class, never as a successful scrape.
- A failed request is not charged. Credits held for a request that fails are refunded automatically.
- Circuit breakers separate strategy from site. Breakers distinguish failures caused by the request strategy from failures caused by the site, try a different strategy before tripping, and report when the domain becomes available again.
- Recovery is measured and published. The platform measures the share of requests that succeed after in-platform recovery per domain and publishes it as recovered_success_rate in the public domain stats. SDKs return the same contract and never turn a success into a failure.
Failure Fields
Every failed scrape carries a next_action object with a stable reason_class, a boolean retryable and retry_after_s (seconds, or null when no wait applies). retryable is true only when retrying, waiting or a higher tier can resolve the failure without changing the request, target or account.
JSON
{
"next_action": {
"type": "retry_with_tier",
"reason_class": "datadome",
"retryable": true,
"retry_after_s": null,
"retry_with": { "tier": "4", "mode": "js" }
}
}Status of each clause
The failure fields above apply today. Batch overflow queueing is built (
queue_over_limit, on by default per request) and is being switched on gradually, starting with measurement only: until it is active for your account, an item over your concurrency limit is rejected with a per-item reason and retry_after_seconds, never charged. Automatic hint application is tracked separately.How It Is Measured
The live reliability feed reports success, latency and cost by anti-bot class and tier. Per domain, /api/v1/domains/{domain}/public-stats reports success_rate and recovered_success_rate, aggregated over 30 days.