{
  "openapi": "3.0.1",
  "info": {
    "title": "DataDome Unblocker — bypass DataDome & get clearance cookies",
    "description": "Get past DataDome and keep the cookie. Returns the real page plus the datadome clearance cookie your own scraper can reuse. No browser: 4 HTTP requests, ~4 seconds. Powered by xhr.dev.",
    "version": "0.1",
    "x-build-id": "vQYWCYI6OkVx4koVm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/xhrdev~datadome-unblocker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-xhrdev-datadome-unblocker",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/xhrdev~datadome-unblocker/runs": {
      "post": {
        "operationId": "runs-sync-xhrdev-datadome-unblocker",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/xhrdev~datadome-unblocker/run-sync": {
      "post": {
        "operationId": "run-sync-xhrdev-datadome-unblocker",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "sites": {
            "title": "Sites",
            "type": "array",
            "description": "The DataDome-protected sites to unblock. This Actor only runs against sites it has been proven on — each one below was challenged and solved on every attempt across four consecutive verification runs. Sites that merely return a page without ever being challenged are deliberately not listed: nothing was solved, so no clearance cookie was produced, and we will not promise a capability we have not actually tested.",
            "items": {
              "type": "string",
              "enum": [
                "grainger.com",
                "idealista.com",
                "etsy.com",
                "yelp.com",
                "saksfifthavenue.com",
                "anthropologie.com",
                "bestwestern.com",
                "neimanmarcus.com",
                "allegro.pl",
                "leboncoin.fr",
                "book-secure.com"
              ],
              "enumTitles": [
                "Grainger (grainger.com)",
                "Idealista (idealista.com)",
                "Etsy (etsy.com)",
                "Yelp (yelp.com)",
                "Saks Fifth Avenue (saksfifthavenue.com)",
                "Anthropologie (anthropologie.com)",
                "Best Western (bestwestern.com)",
                "Neiman Marcus (neimanmarcus.com)",
                "Allegro (allegro.pl)",
                "leboncoin (leboncoin.fr)",
                "D-EDGE Book Secure (book-secure.com)"
              ]
            },
            "default": [
              "grainger.com"
            ]
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Left off by default: this Actor solves cleanly without a proxy, from the container's own datacenter address, on every supported site but two. saksfifthavenue.com and neimanmarcus.com refuse that address, so when no proxy is set here those two are sent through Residential automatically. Set a proxy yourself and every site uses yours. DataDome binds every clearance cookie to the IP that earned it, so reuse the cookie from the same session either way.",
            "default": {
              "useApifyProxy": false
            }
          },
          "returnHtml": {
            "title": "Return page HTML",
            "type": "boolean",
            "description": "Include the full HTML of the unblocked page in each dataset item. Turn this off if you only want the cookie — it makes the dataset much smaller.",
            "default": true
          },
          "returnCookies": {
            "title": "Return clearance cookies",
            "type": "boolean",
            "description": "Include the datadome clearance cookie and a ready-to-send Cookie header. This is what lets your own scraper keep going without solving again.",
            "default": true
          },
          "maxRetries": {
            "title": "Attempts per URL",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many times to try a URL before giving up. Each attempt takes a fresh proxy session, so a dead exit node or a burnt IP gets a genuinely new chance.",
            "default": 3
          },
          "maxConcurrency": {
            "title": "Concurrent URLs",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many URLs to work on at once. The solve path is HTTP-only and cheap, so this can go higher than a browser scraper would tolerate.",
            "default": 5
          },
          "startUrls": {
            "title": "Specific URLs (optional)",
            "type": "array",
            "description": "Optional. Exact pages to unblock, instead of each site's homepage. Every URL must be on one of the supported domains above, or it is refused before the run starts.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "targetPolicy": {
            "title": "Which sites to allow",
            "enum": [
              "verified-only",
              "allow-any"
            ],
            "type": "string",
            "description": "Verified only (the default) refuses any URL outside the supported list, before the run starts, so you never pay for a run against a target nobody has checked. Allow any lifts that restriction for URLs given in \"Specific URLs\" — results are not guaranteed. Need a site added to the supported list? Ask at https://xhr.dev.",
            "default": "verified-only"
          },
          "timeoutSecs": {
            "title": "Timeout per request (seconds)",
            "minimum": 10,
            "maximum": 300,
            "type": "integer",
            "description": "Deadline for each individual HTTP request in the flow, including the solve itself.",
            "default": 120
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}