Anti-bot vendor
DataDome liveDataDome, and the three things it throws at you.
A quiet background check, a "checking your device" page, and an image slider — shown in that order as a site trusts you less. Clear whichever one you get and it lets you in and remembers you. We solve it, and you keep your own connection.
Endpoint
POST /api/tasks
{
"target": "https://www.example.com/checkout",
"provider": "kasada",
"proxy": "http://user:[email protected]:8080"
}
Where the 5.31s went
{
"task_id": "3f6a1c02…",
"status": "success",
"solution": {
"ct": "eyJhbGciOi…q7Vx",
"cd": "{\"workTime\":17…}",
"st": 1757322131,
"r": "1-B",
"version": "ips-2026.31",
"cookies": { "KP_UIDz": "…" }
},
"latency_ms": 5310
}
Endpoint
POST /api/datadome/solve
{
"type": "interstitial",
"device_link": "https://geo.captcha-delivery.com/interstitial/?…",
"html": "<!doctype html>…"
}
Where the 0.35s went
{
"status": "success",
"post_url": "https://geo.captcha-delivery.com/interstitial/",
"payload": "jspl=…&ddk=…",
"headers": { "content-type": "…", … },
"user_agent": "Mozilla/5.0 …"
}
# replay it from your session. the datadome cookie is yours.
How it goes, start to finish
the answer comes straight back · no proxy ever leaves your side
-
01 yours
You fetch the challenge
From your own session, through your own proxy — the page you were sent to, and for a slider the puzzle pictures too.
-
02 ours
We build the reply
One call to us with what you fetched. Back comes the reply that gets you through: where to send it, what to send, and the browser to send it as.
-
03 yours
You reply
From the same session. The site lets you in and hands your session the pass it carries from then on — made for your address, because you’re the one using it.
Read this first
The two things that catch people.
Neither is a solver problem, and both look exactly like one. The first gets your request turned away before we ever run it; the second is a reply the site quietly refuses even though everything in it looks perfect.
For integrators: the exact field rules are in the reference.
2MB per field, measured after decompression · a device-check page runs about half a megabyte · send Content-Encoding: gzip if your stack can
- the most common early rejection Send the page as-is. Send the images encoded.
- The asymmetry is deliberate. A page body is text and travels fine as a JSON string, which is one encoding step fewer for you to get wrong; a JPEG cannot, so puzzle and piece go up as base64. Base64-encoding the html field is the single most frequent reason a request is refused before it is ever run.
- a refusal you cannot see Reply as the browser we return, not your own.
- The solve runs as one calibrated browser identity, and every response tells you which in user_agent, alongside the exact headers to send. Claim a different browser on the wire and the payload fails a cross-check you never see — and from your side that is indistinguishable from a solve that simply did not work.
Endpoint
One endpoint, three types.
The same key, the same balance, and the same plain reason when something doesn’t land — across everything here. For integrators: every field and its rules are in the reference.
The "checking your device" page and the slider puzzle. You keep your own connection; we tell you exactly what to send so it waves you through.
| What you get | Typical time | Price |
|---|---|---|
|
The "checking your device" page
The screen most scrapers hit first. We return exactly what to post so your session sails through. about 350 ms
|
about 350 ms |
$3.00
per 1,000
|
|
The puzzle slider
We find the notch and drive a human-looking drag. Slower on purpose, because that's what passes. 2 to 4 seconds
|
2 to 4 seconds |
$3.00
per 1,000
|
|
Trust signals
The background data a real browser sends. Send it too and you'll see far fewer challenges in the first place. about 200 ms
|
about 200 ms |
$3.00
per 1,000
|
Answers in the same request. Nothing to poll.
One way in, not three — you just tell us which challenge you got. You don’t get to choose it; DataDome decides, so it’s one thing you set rather than three separate addresses to remember.
There’s no proxy to hand over and nothing to wait for. You make every request yourself, so nothing here hangs on someone else’s proxy or can fail because of one — the answer comes straight back, in about 350 ms for a device check and 2 to 4 seconds for a slider, where the drag is paced to look human and rushing it is the one sure way to fail.
What comes back depends on which challenge it was, and each carries only what its own reply needs. The device check and slider live on *.captcha-delivery.com; the background script and where it reports to live on *.datadome.co. The two aren’t interchangeable, and pointing either at the protected site’s own address is refused by name rather than passed along.
| What DataDome drew | Typical time | Price |
|---|---|---|
|
The "checking your device" page
The one you’ll meet most, and the first you’ll wire up. you send device_link + html · you replay POST payload to post_url
about 350 ms
|
about 350 ms |
$0.003
$3.00 per 1,000
|
|
The puzzle slider
We find the gap in the picture and drag the piece at human speed — that pacing is the whole point, which is why it isn’t instant. you send captcha_link + html (+ puzzle, piece) · you replay GET check_url
2 to 4 seconds
|
2 to 4 seconds |
$0.003
$3.00 per 1,000
|
|
Trust signals
The quiet signals the script sends in the background. Not a challenge at all — they build trust before a challenge appears, so sending them means meeting fewer of the two above. you send tags_js + page_url + ddk · you replay POST body to endpoint
about 200 ms
|
about 200 ms |
$0.003
$3.00 per 1,000
|
typical is the middle of the distribution, not a best case · you pay for a returned solve and nothing else
Worked
Fetch, send, replay.
The interstitial, start to finish. One call to us in the middle of two of your own. field reference →
$ curl -X POST app.getsolvr.io/api/datadome/solve \
-H "X-API-Key: solv_live_…" \
-H "Content-Type: application/json" \
-d '{
"type": "interstitial",
"device_link": "https://geo.captcha-delivery.com/interstitial/?initialCid=…",
"html": "<!doctype html>…the page you just fetched, raw…"
}'
{
"task_id": "9c1e4a7b-…",
"status": "success",
"type": "interstitial",
"solution": {
"post_url": "https://geo.captcha-delivery.com/interstitial/",
"payload": "…url-encoded form body…",
"headers": { … send all of these … },
"user_agent": "Mozilla/5.0 …"
}
}
$ curl -X POST <post_url> \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "<every header we returned>" \
-A "<the user_agent we returned>" \
--data "<payload>"
200 { "view": "redirect", "cookie": "datadome=…" } ← set it, carry on
200 { "view": "captcha", … } ← escalated: fetch that page, come back with type slider
Same session for all three hops. The page is bound to the session that fetched it and to the exit address that will replay it, and challenge pages are single-use: one fetched for one attempt cannot be re-sent for another. We keep the solve record for 72h for your own debugging; the cookie itself never passes through us.
Failures
When a solve doesn't land.
A plain reason, never a bare error and a shrug. None of these touch your balance. And because you make every request yourself, the proxy problems you’d see on the Kasada side can’t happen here — what’s left is almost always a page that no longer matches the session it came from.
Every reason we can give →-
Don’t retryYour request wasn’t quite right
The request was rejected. Usually the challenge page is stale or truncated, or device_link is missing its query string. Re-fetch the device-check page and retry with the fresh pair.
bad_request -
RetryThe page no longer matched its session
The page ran but produced no solve request. That normally means the challenge page no longer matches the session it was fetched on — DataDome pages are single-use. Fetch a fresh challenge on a fresh sticky session and retry.
rejected -
Don’t retryWe don’t handle this challenge yet
That challenge variant is not supported yet. Report it and it will be tuned.
unsupported_target -
RetryWe were briefly full
The solver is at capacity. Retry shortly.
busy
the wording matches the challenge you sent · when we’re full we back off and never bill you
Three things that look like failures and are not
- A slider where you expected a device check
- Which one DataDome draws depends on your address and its reputation, not on your solve. Switch to a fresh address and try again — the same rule as a flagged proxy on Kasada.
- A refused pass on a strict site
- On the strictest sites, how fast you move is judged too. Jumping from opening a page to submitting a form with no pause counts against you even with a perfect reply. Move at human speed on form flows; on ordinary pages it doesn’t matter.
- It worked once and not again
- Challenge pages work once. A page you fetched for one attempt can’t be sent again for another — fetch a fresh one each time.
Questions
DataDome, asked and answered.
The questions people arrive with, including the one about the missing proxy field, which is a feature.
What is DataDome?
A bot blocker that ramps up instead of deciding once. A script on the page quietly sends signals about your browser; if that is not enough it shows a "checking your device" page; if that is still not enough, an image slider. Clear whichever one you get and the site lets you in and remembers you from then on. Those challenge pages are served from *.captcha-delivery.com, not from the site itself.
Why is there no proxy field?
Because you make every request yourself. You fetch the challenge from your own session, send us what you got, and we send back exactly what to reply with — where to send it, what to send, and the browser to send it as. You reply from the same session, so the pass the site gives out is tied to your address, not ours. There is nothing to wait for either: the answer comes straight back, in about about 350 ms for a device check.
Which type do I send?
Whichever one DataDome showed you. You do not choose — that is why it is one option you set rather than three separate addresses to remember. Most people meet the "checking your device" page first. If your reply comes back with a slider instead of a pass, your session was bumped up a level — fetch that page and come back as a slider. Sending the background signals on ordinary page loads builds trust ahead of time, so you meet fewer of the other two at all.
How much does it cost?
$0.003 for a device check, $0.003 for a slider and $0.003 for the background signals — $3.00, $3.00 and $3.00 per 1,000 — and nothing when a solve fails. A bad request, an error on our side, or us being briefly full all cost nothing. The slider is one and a half times the device check, not ten, because it is the level-up you did not choose.
DataDome is a trademark of its owner, which is not affiliated with Solvr. The name is used here to identify the protection this service answers. For authorised testing of systems you own or may assess.