Documentation Menu

API Endpoints

Updated 10/24/2026

Build DataDome URL API

POST
https://solver.solverify.net/buildDataDomeUrl

Convert the raw DataDome block response your HTTP client received into the challenge URL a datadome task expects with the buildDataDomeUrl endpoint. Submit the captured block page, JSON body, or redirect header, and the API returns the normalized captchaUrl together with the challenge type.

Use POST /buildDataDomeUrl after your client is blocked by DataDome and you captured the raw response, but you do not want to re-implement DataDome's challenge URL builder. If your workflow already knows the full challenge URL, you can skip this endpoint and submit it directly to Create Task as task.captchaUrl.

Build DataDome URL Endpoint

POST https://solver.solverify.net/buildDataDomeUrl

The API key must be provided as clientKey in the JSON request body.

Accepted Block Payloads

DataDome blocks HTTP clients in three common shapes, and all of them are supported:

Payload shapeTypical sourceField to send
HTML block pageBrowser document navigationbody
JSON body with a url fieldBlocked API callbody
Location header of a blocked redirectRedirect-following HTTP clientlocation

If you already captured the challenge URL, send it in captchaUrl to validate and normalize it.

The HTML shape is rebuilt exactly like DataDome's own JavaScript builds it: the API reads the var dd = {...} configuration from the block page and reconstructs the https://<host>/captcha/ or https://<host>/interstitial/ URL from its values.

Request Body

{
  "clientKey": "YOUR_API_KEY",
  "websiteURL": "https://accounts.example.com/login",
  "body": "<html>...<script>var dd = {'rt':'i','cid':'...','hsh':'...'}</script>...</html>"
}
FieldTypeRequiredDescription
clientKeystringYesYour Solverify API key. Keep this value private and only send it from trusted server-side code.
websiteURLstringYesThe protected page where the challenge was triggered. It becomes the referer parameter when the challenge URL is rebuilt from a block page. Maximum 2,048 characters.
bodystringConditionalThe raw response body that carried the challenge. Maximum 1 MB.
locationstringConditionalThe response Location header when the challenge arrived as a redirect. Maximum 4,096 characters.
captchaUrlstringConditionalAn already-known challenge URL to validate and normalize. When present it takes precedence over body and location. Maximum 4,096 characters.

At least one of body, location, or captchaUrl is required. When body is supplied, the API tries the JSON url field first, then the var dd = {...} block, then any embedded captcha-delivery.com challenge URL.

Success Response

A successful request returns errorId: 0 and both the challenge URL and its type:

{
  "errorId": 0,
  "captchaUrl": "https://geo.captcha-delivery.com/interstitial/?initialCid=...&hash=...&cid=...&referer=https%3A%2F%2Faccounts.example.com%2Flogin&s=1927&e=...&dm=cd&t=it",
  "challengeType": "interstitial",
  "errorCode": null,
  "errorDescription": null
}

Response Fields

FieldTypeDescription
errorIdnumber0 indicates that the request succeeded.
captchaUrlstringThe rebuilt challenge URL. Feed it to a datadome task exactly as returned; do not remove or rewrite its query parameters.
challengeTypestringinterstitial or captcha, matching the DataDome route the URL points at.
errorCodestring or nullMachine-readable error code when the request fails.
errorDescriptionstring or nullHuman-readable information about the error.

Solve the Rebuilt Challenge

Submit the returned captchaUrl in a datadome task with the same proxy and session context that triggered the block:

{
  "clientKey": "YOUR_API_KEY",
  "task": {
    "type": "datadome",
    "websiteURL": "https://accounts.example.com/login",
    "captchaUrl": "https://geo.captcha-delivery.com/interstitial/?initialCid=...",
    "proxyType": "http",
    "proxyAddress": "1.1.1.1",
    "proxyPort": "8080"
  }
}

See DataDome Solver API for the full task reference. DataDome challenge URLs are session and IP bound, so rebuild them from a fresh block payload when they expire instead of storing them for later use.

Build DataDome URL Code Examples

These examples rebuild a challenge URL from a captured block page and print the result.

curl --request POST \
  --url https://solver.solverify.net/buildDataDomeUrl \
  --header "Content-Type: application/json" \
  --data '{
    "clientKey": "YOUR_API_KEY",
    "websiteURL": "https://accounts.example.com/login",
    "body": "<html>...<script>var dd = {'rt':'i','cid':'...','hsh':'...'}</script>...</html>"
  }'

Possible Build DataDome URL Errors

Error codeDescription
ERROR_INVALID_REQUESTThe request body is missing required fields, or none of body, location, or captchaUrl was supplied.
ERROR_INVALID_TASKNo DataDome challenge was found in the supplied payload, or captchaUrl is not a captcha-delivery.com challenge URL.
ERROR_INVALID_KEYThe supplied Solverify API key is invalid.
ERROR_TEMPORARY_UNAVAILABLEThe API cache is temporarily overloaded or unavailable. Retry with backoff.

Always inspect errorId before using captchaUrl. For every supported API error, see Solverify API Error Codes.

When Should You Use This Endpoint?

Use POST /buildDataDomeUrl when:

  • Your HTTP client was blocked by DataDome and you captured the raw response body or redirect header.
  • Your integration receives DataDome blocks from multiple entry points and you want one consistent challenge URL builder.
  • You captured a challenge URL in a format your workflow does not handle and want it validated and normalized.

Skip it when you already have the exact captchaUrl produced by your own flow; submit that URL to a datadome task directly.

Frequently Asked Questions

Does buildDataDomeUrl create a task or charge my balance?

No. The endpoint only converts a captured payload into a challenge URL. It does not create a solving task, and no balance is consumed.

Do I need this endpoint to solve DataDome tasks?

No, it is an optional helper. It exists so integrations can forward whatever their HTTP client actually received instead of re-implementing DataDome's URL construction.

What payload should I send?

Send exactly what your HTTP client received: the block page HTML in body, the JSON response in body, or the Location header value in location. Always provide the websiteURL of the protected page.

Why did I receive ERROR_INVALID_TASK?

The supplied payload did not contain a recognizable DataDome challenge. Confirm that the request was actually blocked by DataDome, that the full response body (including the var dd = {...} script) was captured, or that the Location header was not truncated.

Can I reuse a rebuilt captchaUrl later?

DataDome challenge URLs are bound to the session and IP that triggered the block and are typically short-lived. Rebuild a fresh URL from a new block payload instead of storing one for later use.