Before you submit — these must be correct
If any of these are wrong, your token may be accepted by our solver but rejected or scored poorly by the target site.
- The datadome cookie is IP-bound. Use the same proxy for warming and for your subsequent requests.
- Warm trust BEFORE you get blocked. The point of tags is to prevent the challenge — once you're hard-blocked, use DataDomeSlider or the cookie path instead.
- Tags raise session trust; they don't guarantee zero challenges. Keep DataDomeSlider wired as a fallback for sessions that still get challenged.
DataDome Tags Solver, solved in 5.0s.
Proactively warm DataDome session trust before a slider or interstitial fires. Submits device and behavioral tags deterministically and returns a refreshed datadome cookie.
DataDome's JS tag continuously POSTs device + behavioral telemetry to its /js/ collector to build session trust in the background. When that trust is high enough, DataDome never escalates to a slider or interstitial. This solver assembles and submits those tags for you — deterministically, no browser — so you can warm a session up-front instead of solving a challenge after you're already blocked.
Quick Integration
import requests, time
API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"
# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
"clientKey": KEY,
"task": {
"type": "DataDomeTags",
"websiteURL": "https://example.com/",
"ddk": "AE3F04AD3F0DEADBEEF00112233445566",
"proxyType": "http",
"proxyAddress": "123.45.67.89",
"proxyPort": "8080",
"proxyLogin": "user",
"proxyPassword": "pass"
}
}).json()
task_id = task["taskId"]
print(f"Task created: {task_id}")
# Step 2: Poll for result
while True:
result = requests.post(f"{API}/getTaskResult", json={
"clientKey": KEY,
"taskId": task_id
}).json()
if result["status"] == "ready":
print("Solved!", result["solution"])
break
elif result["status"] == "failed":
print("Failed:", result.get("errorDescription"))
break
time.sleep(1)
Using the result
# Step 3: Use the result — drop-in Cookie: header replay
sol = result["solution"]
headers = {
"Cookie": sol["cookie"],
"User-Agent": sol.get("userAgent", ""),
}
# IMPORTANT: route through the SAME proxy you supplied at solve time
resp = requests.get("https://target.example.com/", headers=headers, proxies={
"http": "http://USER:PASS@PROXY_HOST:PORT",
"https": "http://USER:PASS@PROXY_HOST:PORT",
})
print(resp.status_code, len(resp.text), "bytes")1. Send Payload
Dispatch your DataDomeTags to our processing cluster via the secure API endpoint.
2. Solving Engine
You provide the site's DataDome client key (ddk) and your current session. We assemble the tags payload and submit the two sequential collector POSTs (type='ch' then type='le'), returning the refreshed datadome cookie. No puzzle, no interstitial, no browser.
3. Get Result
Poll getTaskResult for the validated token, then finalize your automated request.
Task Parameters
API SpectypetypestringreqrequiredDataDomeTagsProxyLess or DataDomeTagswebsiteURLtypestringreqrequiredThe protected page URL (used as Referer/origin)ddktypestringreqrequiredThe DataDome client-side key (static per site). Aliases: sitekey, s.datadomeCookietypestringreqoptionalYour current datadome cookie for session continuity. Alias: cid, or the cookies array.userAgenttypestringreqoptionalThe User-Agent to bind the tags to. Reuse it on replay.acceptLanguagetypestringreqoptionalAccept-Language header (default en-US,en;q=0.9).tagsUrltypestringreqoptionalOverride the collector endpoint — some sites first-party-proxy the DataDome tags under their own domain.proxyTypetypestringreqrequiredProxy protocol: http, https, socks4, or socks5proxyAddresstypestringreqrequiredProxy IP address or hostnameproxyPorttypenumberreqrequiredProxy port numberproxyLogintypestringreqoptionalProxy username (if auth required)proxyPasswordtypestringreqoptionalProxy password (if auth required)userAgenttypestringreqoptionalUser-Agent string to use. Must match the UA you use when submitting the tokenResponse Shape
cookietypestringThe refreshed datadome cookie value — set it on your domain for subsequent requests from the same IPdatadometypestringAlias of cookie (same value)userAgenttypestringThe User-Agent the tags/cookie are bound to — replay with this exact valueExample response
{
"errorId": 0,
"status": "ready",
"solution": {
"cookie": "datadome=<refreshed datadome cookie value, IP-bound>",
"datadome": "datadome=<same value>",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
}
}Error response
{
"errorId": 1,
"errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
"errorDescription": "Solver gave up."
}Features
Pricing & Stats
Start solving datadome tags.
$0.10 in free credits — no card. ~250 free solves to test before you spend.