{
  "openapi": "3.0.1",
  "info": {
    "title": "Akamai SBSD Unblocker — bypass SBSD, get clearance cookies",
    "description": "Answer Akamai's SBSD channel — the bundle that posts its own bodies back, scored separately from the _abck sensor. Returns the page behind the challenge plus the cookies that unlocked it. Powered by xhr.dev.",
    "version": "0.1",
    "x-build-id": "up7DMCQAkaokNG4cF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/xhrdev~akamai-sbsd-unblocker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-xhrdev-akamai-sbsd-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~akamai-sbsd-unblocker/runs": {
      "post": {
        "operationId": "runs-sync-xhrdev-akamai-sbsd-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~akamai-sbsd-unblocker/run-sync": {
      "post": {
        "operationId": "run-sync-xhrdev-akamai-sbsd-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 SBSD-protected sites to clear. Every site listed here is verified end to end on Apify itself, not just on a desktop — each one answers its SBSD carriers from a generated ledger and serves the document behind the challenge, repeatedly, from the platform's own address. The list grows on request.",
            "items": {
              "type": "string",
              "enum": [
                "hilton.com",
                "aircanada.com"
              ],
              "enumTitles": [
                "Hilton — hotel search (hilton.com)",
                "Air Canada — booking (aircanada.com)"
              ]
            },
            "default": [
              "hilton.com"
            ]
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional, and usually best left off. Both supported sites were verified clearing straight from the container's own address, and Akamai relays its telemetry through the browser rather than judging the exit — so unlike DataDome work, the address is not what is being scored. Apify's RESIDENTIAL group is refused: it bills ~$8/GB against this Actor and was measured at $0.040 per URL against $0.0077 with no proxy, on identical solve rates. Datacenter groups are fine, and you can always point proxyUrls at your own residential or ISP endpoint.",
            "default": {
              "useApifyProxy": false
            }
          },
          "returnHtml": {
            "title": "Return page HTML",
            "type": "boolean",
            "description": "Include the full HTML of the unblocked page in each dataset item.",
            "default": true
          },
          "returnCookies": {
            "title": "Return clearance cookies",
            "type": "boolean",
            "description": "Include the full cookie jar — the SBSD cookies (bm_s, bm_so, bm_sc, bm_lso), _abck where the property gates on it, and the rest — plus a ready-to-send Cookie header.",
            "default": true
          },
          "blockAssets": {
            "title": "Block images, media and fonts",
            "type": "boolean",
            "description": "On by default, and it is mostly a cost setting. Images and fonts dominate the bytes a browser pulls — a measured two-URL run moved 11.7 MB, about 90% of it pictures — and on a residential proxy those bytes are the expensive part. Akamai scores JavaScript execution and the sensor conversation, not decoded images, and the SBSD ledger derives its resource inventory from the page's HTML rather than from what was actually fetched. Turn it off if you need the images themselves.",
            "default": true
          },
          "maxRetries": {
            "title": "Attempts per URL",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "How many times to try a URL before giving up. Each attempt takes a fresh browser context, and a fresh proxy session if a proxy is configured — which is the point: on this channel a failure is usually the exit address rather than the payload, so a retry on a new session is a genuinely different attempt. Three by default because shared residential pools hand out exits that Akamai has already seen.",
            "default": 3
          },
          "maxConcurrency": {
            "title": "Concurrent URLs",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many URLs to work on at once. Each concurrent solve is a browser context running a bootstrap, a reload and — on a property that gates on both channels — a full sensor conversation, so keep this low.",
            "default": 2
          },
          "startUrls": {
            "title": "Specific URLs (optional)",
            "type": "array",
            "description": "Optional. Exact pages to clear, instead of each site's default page. Every URL must be on one of the supported domains above, or it is refused before the run starts. Note that protection often sits on an application path rather than the apex — www.aircanada.com is an unprotected region chooser, while /ca/en/aco/home.html behind it is challenged.",
            "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. That matters here more than for an HTTP-based unblocker: on a property that does not run SBSD there is no carrier to answer, so the attempt spends its full deadline discovering that. Need a site added? Ask at https://xhr.dev.",
            "default": "verified-only"
          },
          "timeoutSecs": {
            "title": "Solve deadline (seconds)",
            "minimum": 30,
            "maximum": 600,
            "type": "integer",
            "description": "How long one URL gets. An SBSD solve runs a bootstrap, waits for its self-reload, and then — on a property that gates on both channels — a full sensor conversation on top. Raise this before lowering it.",
            "default": 180
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}