For the complete documentation index, see llms.txt. This page is also available as Markdown.

DataDome Slider Captcha

This page explains the flow of solving the slider challenge of DataDome.

If you already familiar with solving DataDome challenges, you can either install one of our SDKs for easy integration, or head over to our API Reference if you want to handle the implementation yourself. The DataDome Bypass API overview covers which challenges the endpoints solve and how they are priced.

Slider

This challenge is served using a 403 status code and a response body that looks as follows:

<html>
   <head>
      <title>example.com</title>
      <style>#cmsg{animation: A 1.5s;}@keyframes A{0%{opacity:0;}99%{opacity:0;}100%{opacity:1;}}</style>
   </head>
   <body style="margin:0">
      <p id="cmsg">Please enable JS and disable any ad blocker</p>
      <script data-cfasync="false">var dd={'rt':'c','cid':'AHrlqAAAAAMA6gifcHcCX3IATaDxmw==','hsh':'EC3A9FB6F2A31D3AF16C270E6531D2','t':'fe','s':43337,'e':'5e8c40553ff322bdcba3d8e59224b6a2858cf1080c5e0f3923cc0fcd3d4217d5','host':'geo.captcha-delivery.com'}</script><script data-cfasync="false" src="https://ct.captcha-delivery.com/c.js"></script>
   </body>
</html>

This is almost the same response you would receive with a Interstitial challenge, however the reference to this URL: https://ct.captcha-delivery.com/c.js is unique to slider.

Parsing the HTML

Before we explain how you can manually parse the required values from the HTML posted above, first are shown code snippets of how it can be done easily with our SDKs:

If you would rather parse the response yourself, you will need to extract the following fields from the dd object that can be found in the response body: cid, hsh, t, s, e. You also need to store the URL that received the block, it is used as the referer, and the datadome cookie that is set on this blocked request. You can now build the URL as follows:

Fetching the slider script

After having parsed the deviceLink in the previous step, you need to make a GET request to it. Make sure that you are sending the same headers and in the same order as your browser. Read and save the response body of this request as we need it to submit to the Hyper Solutions API.

Fetching the challenge bundle

Most of the time the challenge bundle is inlined in the response body you just saved. Sometimes DataDome leaves it out of the page and loads it from its own file instead, with a tag like this:

DataDome picks between the two per request, so check this on every challenge instead of deciding it once. When the page loads the bundle from its own file, make a GET request to that URL yourself, using the same client, proxy and headers you used for the deviceLink, and save the response body. You submit it to the Hyper Solutions API as script. When the bundle is inlined, you leave script empty.

script is optional. Integrations that do not send it keep working, sending it is simply the more reliable path.

Our SDKs tell you which of the two cases you are in:

Fetching the slider puzzle

In order for the Hyper Solutions API to solve the slider challenge, it needs access to the images involved. The HTML/JavaScript that we have retrieved in the previous step contains data like this:

Parsing the Image URLs

You need to extract the captchaChallengePath value, which gives you the puzzle image URL directly. To get the piece image URL, simply replace .jpg with .frag.png.

You can parse captchaChallengePath using this regex:

Or if you already have the path extracted:

Once you have the puzzle URL, derive the piece URL by replacing the extension:

For example:

  • Puzzle URL: https://dd.prod.captcha-delivery.com/image/2026-01-19/17af5b20aafd238256f5a5d11cf475da.jpg

  • Piece URL: https://dd.prod.captcha-delivery.com/image/2026-01-19/17af5b20aafd238256f5a5d11cf475da.frag.png

Fetching the Images

You need to make a GET request to both URLs and store both responses (base64 encoded):

  • The .jpg response should be stored as puzzle

  • The .frag.png response should be stored as piece

Fetching the payload from API

Again we have handy SDK functions to help you with these API calls, if you want to implement the API calls yourself, head over to the API Reference. Alongside your usual session values (User-Agent, IP, Accept-Language, and the page URL as parentUrl), you need up to five challenge-specific values:

  • deviceLink: The link parsed in the previous sections.

  • html: The full response body of the GET request you made to the deviceLink URL.

  • script: The challenge bundle you fetched earlier. Optional, leave it empty when the page inlines the bundle.

  • puzzle: The base64-encoded bytes of the .jpg image.

  • piece: The base64-encoded bytes of the .frag.png image.

You can then generate the payload with the SDK as follows:

Posting payload, solving challenge

Our API returns a simple URL as the result of solving the slider challenge, all that is required is to make a GET request to this URL which looks as follows:

The response of this GET request will be as follows:

You can parse the JSON response, and update your cookieJar with the "cookie" you received from DataDome. You have now successfully solved DataDome's slider challenge, retrying the request that served this block should not give you a challenge anymore.

Last updated