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.
Type Description 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.
Parameter Type Required Description typestring Yes DataDomeTokenwebsiteURLstring Yes The URL of the page protected by DataDome captchaUrlstring Yes The full URL of the DataDome captcha page (the interstitial challenge URL, typically starts with https://geo.captcha-delivery.com/captcha/) userAgentstring No The User-Agent string to use during solving. If omitted, the provider uses a default.
When a proxy is required by the provider:
Parameter Type Required Description proxyTypestring Yes http, socks4, or socks5proxyAddressstring Yes Proxy IP or hostname proxyPortinteger Yes Proxy port proxyLoginstring No Proxy username proxyPasswordstring No Proxy password
"clientKey" : " YOUR_API_KEY " ,
"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 " ,
"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 ... " ,
"proxyAddress" : " 1.2.3.4 " ,
"taskId" : " 550e8400-e29b-41d4-a716-446655440000 " ,
"cookie" : " datadome=4jHGk9... "
Field Type Description cookiestring The full datadome cookie string in name=value format. Set this cookie on the target domain to bypass DataDome protection.
When you encounter a DataDome challenge, capture the captcha interstitial URL from the page redirect or response headers.
Submit the task with the websiteURL and captchaUrl.
Poll for the solution.
Set the datadome cookie in your HTTP client or browser for the target domain.
Retry your original request. DataDome will recognize the valid cookie and grant access.
Caution
The datadome cookie is typically bound to the User-Agent and IP address. If you specified a userAgent in the task, use that same User-Agent in your subsequent requests. If you used a proxy, continue using the same proxy IP.
response = requests. post ( " https://api.ucaptcha.net/createTask " , json = {
" 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 " ]
result = requests. post ( " https://api.ucaptcha.net/getTaskResult " , 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 )
elif result[ " status " ] == " failed " :
print ( " Error: " , result. get ( " errorDescription " ))
const API_KEY = " YOUR_API_KEY " ;
const { taskId } = await fetch ( " https://api.ucaptcha.net/createTask " , {
headers: { " Content-Type " : " application/json " },
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 ... "
const result = await fetch ( " https://api.ucaptcha.net/getTaskResult " , {
headers: { " Content-Type " : " application/json " },
body: JSON . stringify ( { clientKey: API_KEY , taskId } )
if ( result . status === " ready " ) {
console . log ( " Cookie: " , result . solution . cookie );
} else if ( result . status === " failed " ) {
console . error ( " Error: " , result . errorDescription );
await new Promise ( r => setTimeout ( r , 5000 ));
curl -X POST https://api.ucaptcha.net/createTask \
-H " Content-Type: application/json " \
"clientKey": "YOUR_API_KEY",
"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 " \
"clientKey": "YOUR_API_KEY",
2Captcha
CapSolver
CapMonster
RiskByPass
The following backward-compatible type names are also accepted:
Alias Maps To DataDomeSliderTaskDataDomeToken
If you are using the RiskByPass compatibility layer , the equivalent task_type values are:
uCaptcha Type RiskByPass task_type DataDomeTokendatadome-invisibleDataDomeDeviceCheckTokendatadome-device-checkDataDomeSliderTokendatadome-slider