Skip to content

DataDome

DataDome is a real-time bot protection service used by e-commerce, media, and classified ad websites. When DataDome detects suspicious activity, it presents a CAPTCHA interstitial (often a slider or GeeTest-style puzzle) and sets a datadome cookie upon successful verification. Solving the DataDome challenge returns this cookie, which you must include in subsequent requests to bypass the protection.

TypeDescription
DataDomeTokenSolves the standard DataDome CAPTCHA challenge (slider or puzzle interstitial).
DataDomeDeviceCheckTokenSolves the DataDome device check challenge — triggered when DataDome requires device identity verification.
DataDomeSliderTokenSolves the DataDome slider challenge specifically. Use when the target serves only the slider variant.
ParameterTypeRequiredDescription
typestringYesDataDomeToken
websiteURLstringYesThe URL of the page protected by DataDome
captchaUrlstringYesThe full URL of the DataDome captcha page (the interstitial challenge URL, typically starts with https://geo.captcha-delivery.com/captcha/)
userAgentstringNoThe User-Agent string to use during solving. If omitted, the provider uses a default.

When a proxy is required by the provider:

ParameterTypeRequiredDescription
proxyTypestringYeshttp, socks4, or socks5
proxyAddressstringYesProxy IP or hostname
proxyPortintegerYesProxy port
proxyLoginstringNoProxy username
proxyPasswordstringNoProxy password
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "DataDomeToken",
"websiteURL": "https://example.com/protected-page",
"captchaUrl": "https://geo.captcha-delivery.com/captcha/?initialCid=AHrlqAAAAAMA...",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ..."
}
}

With proxy:

{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "DataDomeToken",
"websiteURL": "https://example.com/protected-page",
"captchaUrl": "https://geo.captcha-delivery.com/captcha/?initialCid=AHrlqAAAAAMA...",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...",
"proxyType": "http",
"proxyAddress": "1.2.3.4",
"proxyPort": 8080,
"proxyLogin": "user",
"proxyPassword": "pass"
}
}
{
"errorId": 0,
"taskId": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing"
}
{
"cookie": "datadome=4jHGk9..."
}
FieldTypeDescription
cookiestringThe full datadome cookie string in name=value format. Set this cookie on the target domain to bypass DataDome protection.
  1. When you encounter a DataDome challenge, capture the captcha interstitial URL from the page redirect or response headers.
  2. Submit the task with the websiteURL and captchaUrl.
  3. Poll for the solution.
  4. Set the datadome cookie in your HTTP client or browser for the target domain.
  5. Retry your original request. DataDome will recognize the valid cookie and grant access.
import requests
import time
API_KEY = "YOUR_API_KEY"
response = requests.post("https://api.ucaptcha.net/createTask", json={
"clientKey": API_KEY,
"task": {
"type": "DataDomeToken",
"websiteURL": "https://example.com/protected-page",
"captchaUrl": "https://geo.captcha-delivery.com/captcha/?initialCid=AHrlqAAAAAMA...",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ..."
}
})
task_id = response.json()["taskId"]
while True:
result = requests.post("https://api.ucaptcha.net/getTaskResult", json={
"clientKey": API_KEY,
"taskId": task_id
}).json()
if result["status"] == "ready":
cookie_value = result["solution"]["cookie"]
print("Cookie:", cookie_value)
# Use the cookie to access the protected page
name, value = cookie_value.split("=", 1)
session = requests.Session()
session.cookies.set(name, value, domain="example.com")
page = session.get("https://example.com/protected-page")
print("Status:", page.status_code)
break
elif result["status"] == "failed":
print("Error:", result.get("errorDescription"))
break
time.sleep(5)
const API_KEY = "YOUR_API_KEY";
const { taskId } = await fetch("https://api.ucaptcha.net/createTask", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: "DataDomeToken",
websiteURL: "https://example.com/protected-page",
captchaUrl: "https://geo.captcha-delivery.com/captcha/?initialCid=AHrlqAAAAAMA...",
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ..."
}
})
}).then(r => r.json());
while (true) {
const result = await fetch("https://api.ucaptcha.net/getTaskResult", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ clientKey: API_KEY, taskId })
}).then(r => r.json());
if (result.status === "ready") {
console.log("Cookie:", result.solution.cookie);
break;
} else if (result.status === "failed") {
console.error("Error:", result.errorDescription);
break;
}
await new Promise(r => setTimeout(r, 5000));
}
Terminal window
# Create the task
curl -X POST https://api.ucaptcha.net/createTask \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "DataDomeToken",
"websiteURL": "https://example.com/protected-page",
"captchaUrl": "https://geo.captcha-delivery.com/captcha/?initialCid=AHrlqAAAAAMA..."
}
}'
# Poll for the result (replace TASK_ID with the returned taskId)
curl -X POST https://api.ucaptcha.net/getTaskResult \
-H "Content-Type: application/json" \
-d '{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID"
}'
  • 2Captcha
  • CapSolver
  • CapMonster
  • RiskByPass

The following backward-compatible type names are also accepted:

AliasMaps To
DataDomeSliderTaskDataDomeToken

If you are using the RiskByPass compatibility layer, the equivalent task_type values are:

uCaptcha TypeRiskByPass task_type
DataDomeTokendatadome-invisible
DataDomeDeviceCheckTokendatadome-device-check
DataDomeSliderTokendatadome-slider