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. We can’t detect these mismatches for you.
- The datadome cookie is IP + device bound — replay through the same proxy and userAgent we used.
What is DataDome Interstitial?
DataDome guards sites with several surfaces; the interstitial is the full-page block — a 'please wait / verifying you are human' page (often an HTTP 403 with an embedded challenge) that must be cleared before the real page loads, distinct from the inline slider puzzle. Clearing it issues a `datadome` cookie that authorizes subsequent requests. This task takes your target + proxy, runs the interstitial challenge, and returns that clearance cookie with the User-Agent it was validated against.
How it works
Send Task
POST your DataDomeInterstitialTask with the target URL and sitekey to our API. We'll queue it instantly.
We Solve
We load the DataDome-protected URL through your proxy, let the interstitial challenge execute and validate, and harvest the issued `datadome` clearance cookie together with the matching User-Agent. DataDome binds the cookie to the egress IP and device signals, so it's returned ready to replay through the same proxy + UA.
Get Token
Poll getTaskResult — when status is 'ready', the solution contains the token to inject into the target page.
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": "DataDomeInterstitialTask",
"proxyPort": "10001",
"proxyType": "http",
"proxyLogin": "your-proxy-username",
"websiteURL": "https://www.example.com/",
"proxyAddress": "gw.your-proxy-provider.com",
"proxyPassword": "your-proxy-password"
}
}).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)
# Step 3: Use the result — set every cookie on a session jar
sol = result["solution"]
session = requests.Session()
for c in sol["cookies"]:
session.cookies.set(c["name"], c["value"], domain=c.get("domain"), path=c.get("path", "/"))
session.headers["User-Agent"] = sol.get("userAgent", "")
# IMPORTANT: route through the SAME proxy you supplied at solve time
resp = session.get("https://target.example.com/", proxies={
"http": "http://USER:PASS@PROXY_HOST:PORT",
"https": "http://USER:PASS@PROXY_HOST:PORT",
})
print(resp.status_code, len(resp.text), "bytes")Task parameters
websiteURLtypestringreqyesThe DataDome-protected page showing the interstitial.userAgenttypestringreqnoOverride the User-Agent used during solve. If you override it, replay with the same UA — DataDome binds the cookie to the (IP, UA) pair.proxyTypetypestringreqnohttp, https, or socks5.proxyAddresstypestringreqyesProxy host (IP or hostname). Required — the solve is IP-bound.proxyPorttypeintegerreqyesProxy port.proxyLogintypestringreqnoProxy username, if your proxy needs auth.proxyPasswordtypestringreqnoProxy password, if your proxy needs auth.Solution response
cookiestypearrayCookie objects {name, value, domain, path}. The key one is the `datadome` clearance cookie. Set every returned cookie on your client.userAgenttypestringThe exact User-Agent used during solve. Reuse it verbatim on replay.ipBoundtypebooleanAlways true — replay through the same proxy you submitted with.domaintypestringHostname the cookie was validated against (host of websiteURL).Example response
Full getTaskResult response shape. The fields in the table above describe what's inside solution — the outer envelope (errorId, status) is identical for every captcha type.
{
"errorId": 0,
"status": "ready",
"solution": {
"domain": "www.example.com",
"cookies": [
{
"name": "datadome",
"path": "/",
"value": "<datadome clearance cookie>",
"domain": ".example.com"
}
],
"ipBound": true,
"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
Failures use the same envelope with errorId: 1 plus errorCode + errorDescription. See the error-code reference for the full list.
{
"errorId": 1,
"errorCode": "ERROR_CAPTCHA_UNSOLVABLE",
"errorDescription": "Solver gave up — automatically refunded."
}Pending response
While the solver is still working, getTaskResult returns status: "processing". Poll every 1–2 seconds until ready or failed.
{
"errorId": 0,
"status": "processing"
}Features
task types
required: DataDomeInterstitialTask