> For the complete documentation index, see [llms.txt](https://docs.disasm.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.disasm.dev/datadome/api-reference.md).

# API Reference

{% hint style="success" %}
Base URL: **`https://dd.antibotapi.com`**
{% endhint %}

Every request requires your API key in the `x-api-key` header - see [Authentication](/getting-started/authentication.md).

## Solve a DataDome Interstitial challenge

> Generates the payload for a DataDome interstitial ("Verifying your device"). Submit the returned payload to <https://geo.captcha-delivery.com/interstitial/> over HTTP/1.1 to obtain the datadome cookie.

```json
{"openapi":"3.0.3","info":{"title":"DataDome API","version":"1.0.0"},"tags":[{"name":"Interstitial","description":"Solve the \"Verifying your device\" interstitial challenge."}],"servers":[{"url":"https://dd.antibotapi.com","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your API key. Create one in the dashboard at https://dashboard.disasm.dev."}},"schemas":{"InterstitialRequest":{"type":"object","required":["device_check_link","device_check_page"],"properties":{"device_check_link":{"type":"string","description":"The device-check / interstitial URL you constructed from the dd object."},"device_check_page":{"type":"string","description":"Base64-encoded HTML body returned when you GET the device_check_link."},"language":{"type":"string","description":"First language in your Accept-Language header.","default":"en-GB"},"user_agent":{"type":"string","description":"User-Agent to emulate. Defaults to the latest stable Chrome."},"ip_address":{"type":"string","description":"Proxy IP for the session, used to set the payload timezone. Defaults to a Europe/London timezone if omitted."}}},"InterstitialResponse":{"type":"object","properties":{"success":{"type":"boolean"},"payload":{"type":"string","description":"The application/x-www-form-urlencoded body to POST to https://geo.captcha-delivery.com/interstitial/ over HTTP/1.1."},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Client-hint headers (sec-ch-ua, sec-ch-ua-full-version-list, sec-ch-ua-arch, sec-ch-ua-model, sec-ch-device-memory, sec-ch-ua-platform, sec-ch-ua-mobile) to send on subsequent requests, per the origin's Accept-CH."}}},"Error":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string","description":"Human-readable explanation of what went wrong."}}}},"responses":{"BadRequest":{"description":"The request was invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/interstitial":{"post":{"tags":["Interstitial"],"summary":"Solve a DataDome Interstitial challenge","description":"Generates the payload for a DataDome interstitial (\"Verifying your device\"). Submit the returned payload to https://geo.captcha-delivery.com/interstitial/ over HTTP/1.1 to obtain the datadome cookie.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterstitialRequest"}}}},"responses":{"200":{"description":"Payload generated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InterstitialResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"}}}}}}
```

## Solve a DataDome CAPTCHA challenge

> Solves an image (slider) or audio DataDome CAPTCHA. The response includes captcha\_submit\_url, the fully built URL to GET in order to apply the solution.

```json
{"openapi":"3.0.3","info":{"title":"DataDome API","version":"1.0.0"},"tags":[{"name":"CAPTCHA","description":"Solve the slider (image) or audio CAPTCHA challenge."}],"servers":[{"url":"https://dd.antibotapi.com","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your API key. Create one in the dashboard at https://dashboard.disasm.dev."}},"schemas":{"CaptchaRequest":{"type":"object","required":["user_agent","html","captcha_link","type"],"properties":{"type":{"type":"string","enum":["image","audio"],"description":"Challenge type. Both the slider (image) and audio challenges are supported; switching between them can help on higher-security sites."},"captcha_link":{"type":"string","description":"The CAPTCHA URL you constructed from the dd object."},"html":{"type":"string","description":"Base64-encoded HTML of the CAPTCHA page (the page showing the slider)."},"user_agent":{"type":"string","description":"User-Agent to emulate. Defaults to the latest stable Chrome."},"background_image":{"type":"string","description":"Base64-encoded background image. Required when type is \"image\"."},"fragment_image":{"type":"string","description":"Base64-encoded fragment (slider) image. Required when type is \"image\"."},"audio_challenge":{"type":"string","description":"Base64-encoded audio file. Required when type is \"audio\"."},"language":{"type":"string","description":"First language in your Accept-Language header.","default":"en-GB"},"ip_address":{"type":"string","description":"Proxy IP for the session, used to set the payload timezone. Defaults to a Europe/London timezone if omitted."}}},"CaptchaResponse":{"type":"object","properties":{"success":{"type":"boolean"},"payload":{"type":"string","description":"Query parameters for the /check URL. Build your own submission URL from these, or use captcha_submit_url."},"captcha_submit_url":{"type":"string","description":"Fully built URL to GET in order to submit the solved CAPTCHA."},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Client-hint headers (sec-ch-ua, sec-ch-ua-full-version-list, sec-ch-ua-arch, sec-ch-ua-model, sec-ch-device-memory, sec-ch-ua-platform, sec-ch-ua-mobile) to send on subsequent requests, per the origin's Accept-CH."}}},"Error":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string","description":"Human-readable explanation of what went wrong."}}}},"responses":{"BadRequest":{"description":"The request was invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/captcha":{"post":{"tags":["CAPTCHA"],"summary":"Solve a DataDome CAPTCHA challenge","description":"Solves an image (slider) or audio DataDome CAPTCHA. The response includes captcha_submit_url, the fully built URL to GET in order to apply the solution.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaptchaRequest"}}}},"responses":{"200":{"description":"CAPTCHA solved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaptchaResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"}}}}}}
```

## Solve DataDome Tags (CH/LE)

> Generates a tags payload. Call once with type "ch", submit the payload, then call again with type "le" using the datadome cookie returned by the ch step.

```json
{"openapi":"3.0.3","info":{"title":"DataDome API","version":"1.0.0"},"tags":[{"name":"Tags","description":"Solve the tags.js device-signal challenge (CH then LE)."}],"servers":[{"url":"https://dd.antibotapi.com","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your API key. Create one in the dashboard at https://dashboard.disasm.dev."}},"schemas":{"TagsRequest":{"type":"object","required":["user_agent","site_key","cid","referer","type","ip_address"],"properties":{"type":{"type":"string","enum":["ch","le"],"description":"Solve \"ch\" first, then \"le\". ch carries browser properties; le carries the events payload (the second POST)."},"cid":{"type":"string","description":"The current datadome cookie in your jar."},"site_key":{"type":"string","description":"The ddk / DataDome site key."},"referer":{"type":"string","description":"The last URL visited, unescaped (no URL encoding)."},"user_agent":{"type":"string","description":"User-Agent for the session."},"ip_address":{"type":"string","description":"Proxy IP for the session, used to set the payload timezone."}}},"TagsResponse":{"type":"object","properties":{"success":{"type":"boolean"},"payload":{"type":"string","description":"The POST body to submit to DataDome, usually the request whose URL ends in /js/."}}},"Error":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string","description":"Human-readable explanation of what went wrong."}}}},"responses":{"BadRequest":{"description":"The request was invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/tags":{"post":{"tags":["Tags"],"summary":"Solve DataDome Tags (CH/LE)","description":"Generates a tags payload. Call once with type \"ch\", submit the payload, then call again with type \"le\" using the datadome cookie returned by the ch step.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagsRequest"}}}},"responses":{"200":{"description":"Tags payload generated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagsResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"}}}}}}
```

## Get the resolved IP and timezone

> Returns the IP address and timezone we resolve for the request, based on a GeoIP lookup. Useful for confirming a proxy is being read as expected.

```json
{"openapi":"3.0.3","info":{"title":"DataDome API","version":"1.0.0"},"tags":[{"name":"Utility","description":"Helper endpoints."}],"servers":[{"url":"https://dd.antibotapi.com","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your API key. Create one in the dashboard at https://dashboard.disasm.dev."}},"schemas":{"IpResponse":{"type":"object","properties":{"success":{"type":"boolean"},"ip":{"type":"string"},"timezone":{"type":"string"}}},"Error":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string","description":"Human-readable explanation of what went wrong."}}}},"responses":{"Unauthorized":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/get-ip":{"get":{"tags":["Utility"],"summary":"Get the resolved IP and timezone","description":"Returns the IP address and timezone we resolve for the request, based on a GeoIP lookup. Useful for confirming a proxy is being read as expected.","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.disasm.dev/datadome/api-reference.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
