Resolving DataDome 403 Errors
DataDome uses behavioral analysis and device fingerprinting to detect automated traffic. When requests fail verification, servers return 403 errors or serve deceptive block pages. MeshPrivacy generates valid datadome cookies by completing the behavioral verification process.
Error Codes
| Code | Meaning | Resolution |
|---|---|---|
| 403 | Access denied, challenge required | Generate valid datadome cookie via API |
| 200 | Deceptive block page (challenge HTML) | Detect and solve embedded challenge |
Note: DataDome may return 200 status with challenge HTML instead of 403. Check response content for dd= parameters.
Real-time API status: trust.meshprivacy.com
Cookies & Detection
datadome - Main verification tokenCookie TTL: approximately 10 minutes
dd= parameter in HTMLService Variants
DataDome ships three distinct service IDs in the MeshPrivacy API. Pick the one that matches the challenge type the target site serves.
datadome-invisiblePrimary
Background behavioral verification without user interaction. Analyzes browser fingerprint and behavior patterns silently.
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Protected page URL |
script_url | string | No | DataDome script URL (e.g. tags.js) |
initial_cid | string | No | Initial datadome cookie value for session continuity |
proxy_config | string | No | Proxy in http://user:pass@ip:port format |
user_agent | string | No | Custom user agent |
// Submit DataDome Invisible task
const response = await fetch('https://api.meshprivacy.com/v1/tasks/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY },
body: JSON.stringify({
service: 'datadome-invisible',
url: 'https://target-site.com/', // required
script_url: 'https://js.datadome.co/tags.js', // optional
initial_cid: '', // optional - existing datadome cookie
proxy_config: 'http://user:pass@ip:port', // optional
user_agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...' // optional
})
});
const { task_id } = await response.json();
const result = await fetch(`https://api.meshprivacy.com/v1/tasks/result/${task_id}`, {
headers: { 'X-API-Key': API_KEY }
});
const { cookies } = await result.json();
// Use cookies.datadome in your requestsdatadome-device-check
Device fingerprint validation challenge. Collects and verifies hardware and software characteristics without visual interaction.
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Protected page URL triggering device check |
script_url | string | No | DataDome script URL |
device_link | string | No | Device link token |
http_method | string | No | HTTP method (GET/POST) |
initial_cid | string | No | Initial datadome cookie value |
proxy_config | string | No | |
user_agent | string | No |
// Submit DataDome Device Check task
const response = await fetch('https://api.meshprivacy.com/v1/tasks/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY },
body: JSON.stringify({
service: 'datadome-device-check',
url: 'https://target-site.com/', // required
script_url: 'https://js.datadome.co/tags.js', // optional
device_link: '', // optional - device link token
http_method: 'GET', // optional - GET or POST
initial_cid: '', // optional
proxy_config: 'http://user:pass@ip:port', // optional
user_agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...' // optional
})
});
const { task_id } = await response.json();datadome-slider
Interactive slider captcha challenge. Requires drag interaction to verify human behavior patterns.
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Original protected page URL |
script_url | string | No | DataDome script URL |
device_link | string | No | Device link token |
http_method | string | No | HTTP method (GET/POST) |
captcha_url | string | No | Captcha redirect URL from geo.captcha-delivery.com |
initial_cid | string | No | Initial datadome cookie value |
proxy_config | string | No | |
user_agent | string | No |
// Submit DataDome Slider task
const response = await fetch('https://api.meshprivacy.com/v1/tasks/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY },
body: JSON.stringify({
service: 'datadome-slider',
url: 'https://target-site.com/', // required
script_url: 'https://js.datadome.co/tags.js', // optional
device_link: '', // optional
http_method: 'GET', // optional
captcha_url: 'https://geo.captcha-delivery.com/...', // optional - redirect URL
initial_cid: '', // optional
proxy_config: 'http://user:pass@ip:port', // optional
user_agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...' // optional
})
});
const { task_id } = await response.json();FAQ
dd= parameters, DataDome JavaScript includes, or challenge-specific HTML structure. A valid response will have your expected content.