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

# Getting started

If you're already familiar with solving DataDome challenges, you can either install one of our [SDKs](/start-here/readme-1.md) for easy integration, or head over to our [API Reference](/api-reference/datadome.md) if you want to handle the implementation yourself.

{% hint style="info" %}
As with any other antibot, make sure you use a working TLS client that mimics the latest version of Google Chrome, match the headers and header-order 1:1 with the browser, and make sure you are using an up-to-date User-Agent. See [Core Requirements](/start-here/core-requirements.md) for the full list.
{% endhint %}

### Identifying the challenge

Both challenges are served with a **403 status code** and a nearly identical HTML block page containing a `dd` object. Two fields tell them apart: the `rt` value inside the `dd` object, and the script URL at the bottom of the page.

#### Interstitial

A device-check page the API solves without a captcha.

**Identifying characteristics:**

* The `dd` object has `'rt':'i'`
* The block page references `https://ct.captcha-delivery.com/i.js` (note the `i.js`)

[Read the detailed guide →](/datadome/interstitial.md)

#### Slider (captcha)

A slider captcha where the API solves the puzzle from the challenge images.

**Identifying characteristics:**

* The `dd` object has `'rt':'c'`
* The block page references `https://ct.captcha-delivery.com/c.js` (note the `c.js`)

{% hint style="warning" %}
If the `dd` object has `t` set to `bv`, your proxy is hard blocked, solving the challenge will have no effect.
{% endhint %}

[Read the detailed guide →](/datadome/slider-captcha.md)

### Challenges returned from an API request

DataDome doesn't only block full page loads. When your code calls a JSON or XHR endpoint, DataDome may return the challenge **inline as a JSON body** instead of the 403 HTML block page:

{% code overflow="wrap" %}

```json
{ "url": "https://geo.captcha-delivery.com/interstitial/?initialCid=..." }
```

{% endcode %}

Here the `url` is a **ready-made device link**: DataDome has already built it, so there is no `dd` object to parse. Detect this case when the response body is JSON with a `url` field pointing at `captcha-delivery.com`.

Route by the URL **path**, then solve exactly as you would a block-page challenge, passing the `url` straight through as the device link:

* `.../interstitial/...` → the [interstitial](/datadome/interstitial.md) flow
* `.../captcha/...` → the [slider](/datadome/slider-captcha.md) flow

Because you already hold the device link, **skip the HTML-parsing step** (`ParseInterstitialDeviceCheckLink` / `ParseSliderDeviceCheckLink`). Fetch the device link, then call the interstitial or slider generation with that `url` as the `deviceLink`.

{% hint style="info" %}
The interstitial solve can hand off to the slider the same way. Its response looks like `{ "cookie": "...", "view": "captcha", "url": "..." }`, and when `view` is `captcha` you solve the slider using that `url`.
{% endhint %}

### Tags

Separately from the challenge flows above, DataDome expects the browser to post telemetry ("tags") that raise your session's trust score. See [Tags](/datadome/tags.md) for when and how to send these.

{% hint style="info" %}
**Further reading on our blog:** [Recording a clean DataDome capture](https://hypersolutions.co/blog/datadome-browser-sessions) explains why polluted browser captures still get blocked even when header order looks right.
{% endhint %}

### Complete Example

For a full working implementation with proper TLS client setup, header ordering, and cookie handling, see our examples repository:

{% embed url="<https://github.com/Hyper-Solutions/hypersolutions-examples>" %}
