{
  "openapi": "3.1.0",
  "info": {
    "title": "Captcha.fun Solver API",
    "version": "1.0.0",
    "summary": "One API key, one balance, every captcha and anti-bot solver.",
    "description": "Public solve API of Captcha.fun. Every product follows the same flow: `POST /v1/request` with a `kind` returns a solve `id`; poll `GET /v2/response/{id}` until `ready` is true; then use the returned token, cookies, or headers together with the returned `userAgent`.\n\nAuthentication: send your key in the `API_KEY` header (format `CAPFUN-...`). Billing: only successful solves are charged. This spec covers the public solver API.",
    "contact": {
      "name": "Captcha.fun",
      "url": "https://www.captcha.fun"
    }
  },
  "servers": [
    {
      "url": "https://api.captcha.fun",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Solve",
      "description": "Create a solve and fetch its result."
    },
    {
      "name": "Account",
      "description": "Balance and catalog."
    }
  ],
  "paths": {
    "/v1/request": {
      "post": {
        "tags": [
          "Solve"
        ],
        "operationId": "createSolve",
        "summary": "Create a solve",
        "description": "Creates a solve and returns its `id` immediately. The `kind` field selects the product. Only successful solves are charged. Fetch the result with GET /v2/response/{id} (recommended) or GET /v1/response/{id}.",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "APP_ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Optional application identifier recorded with the request for tracking."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SolveRequest"
              },
              "examples": {
                "recaptcha-v3": {
                  "summary": "reCAPTCHA v3",
                  "value": {
                    "kind": "recap_v3_enterprise",
                    "url": "https://your-domain.example/login",
                    "siteKey": "YOUR_RECAPTCHA_SITE_KEY",
                    "action": "login"
                  }
                },
                "recaptcha-v2": {
                  "summary": "reCAPTCHA v2",
                  "value": {
                    "kind": "recap_v2",
                    "url": "https://your-domain.example/login",
                    "siteKey": "YOUR_RECAPTCHA_SITE_KEY"
                  }
                },
                "turnstile": {
                  "summary": "Cloudflare Turnstile",
                  "value": {
                    "kind": "turnstile",
                    "url": "https://your-domain.example/login",
                    "siteKey": "YOUR_TURNSTILE_SITE_KEY",
                    "action": "login"
                  }
                },
                "hcaptcha": {
                  "summary": "hCaptcha Enterprise",
                  "value": {
                    "kind": "hcaptcha",
                    "url": "https://your-domain.example/login",
                    "siteKey": "YOUR_HCAPTCHA_SITE_KEY"
                  }
                },
                "hcaptcha-invisible": {
                  "summary": "hCaptcha Invisible",
                  "value": {
                    "kind": "hcaptcha_invis",
                    "url": "https://your-domain.example/login",
                    "siteKey": "YOUR_HCAPTCHA_SITE_KEY"
                  }
                },
                "geetest": {
                  "summary": "GeeTest",
                  "value": {
                    "kind": "geetest",
                    "url": "https://your-domain.example/login",
                    "siteKey": "YOUR_GEETEST_CAPTCHA_ID"
                  }
                },
                "friendly-captcha": {
                  "summary": "Friendly Captcha",
                  "value": {
                    "kind": "friendly_captcha",
                    "url": "https://your-domain.example/login",
                    "siteKey": "YOUR_FRIENDLY_CAPTCHA_SITE_KEY"
                  }
                },
                "captchafox": {
                  "summary": "CaptchaFox",
                  "value": {
                    "kind": "captchafox",
                    "url": "https://your-domain.example/login",
                    "siteKey": "YOUR_CAPTCHAFOX_SITE_KEY"
                  }
                },
                "funcaptcha-invisible": {
                  "summary": "FunCaptcha Invisible",
                  "value": {
                    "kind": "funcaptcha_invis",
                    "url": "https://your-domain.example/login",
                    "siteKey": "YOUR_ARKOSE_PUBLIC_KEY"
                  }
                },
                "cloudflare-waf": {
                  "summary": "Cloudflare WAF",
                  "value": {
                    "kind": "cf_waf",
                    "url": "https://your-domain.example/protected-page"
                  }
                },
                "datadome": {
                  "summary": "DataDome",
                  "value": {
                    "kind": "datadome",
                    "url": "https://your-domain.example/protected-page"
                  }
                },
                "datadome-interstitial": {
                  "summary": "DataDome Interstitial",
                  "value": {
                    "kind": "datadome_interstitial",
                    "url": "https://your-domain.example/challenge"
                  }
                },
                "perimeterx": {
                  "summary": "PerimeterX",
                  "value": {
                    "kind": "perimeterx",
                    "url": "https://your-domain.example",
                    "challengeHtml": "<CAPTURED_PERIMETERX_BLOCK_PAGE_HTML>"
                  }
                },
                "perimeterx-hold": {
                  "summary": "PerimeterX Hold",
                  "value": {
                    "kind": "perimeterx_hold",
                    "url": "https://your-domain.example",
                    "blockData": "<CAPTURED_BLOCK_JSON_OR_HTML>"
                  }
                },
                "perimeterx-invisible": {
                  "summary": "PerimeterX Invisible",
                  "value": {
                    "kind": "perimeterx_invisible",
                    "url": "https://your-domain.example"
                  }
                },
                "akamai-abck": {
                  "summary": "Akamai (_abck)",
                  "value": {
                    "kind": "akamai_abck",
                    "url": "https://your-domain.example"
                  }
                },
                "akamai-sbsd": {
                  "summary": "Akamai (sbsd/bm_sc)",
                  "value": {
                    "kind": "akamai_sbsd",
                    "url": "https://your-domain.example"
                  }
                },
                "akamai-sec-cpt": {
                  "summary": "Akamai (sec_cpt)",
                  "value": {
                    "kind": "akamai_sec_cpt",
                    "url": "https://your-domain.example"
                  }
                },
                "kasada": {
                  "summary": "Kasada",
                  "value": {
                    "kind": "kasada",
                    "url": "https://your-domain.example",
                    "protectedUrl": "https://your-domain.example/api/login"
                  }
                },
                "kasada-cd": {
                  "summary": "Kasada (cd)",
                  "value": {
                    "kind": "kasada_cd",
                    "url": "https://your-domain.example",
                    "protectedUrl": "https://your-domain.example/api/login"
                  }
                },
                "kasada-tl-payload": {
                  "summary": "Kasada (tl payload)",
                  "value": {
                    "kind": "kasada_tl_payload",
                    "url": "https://your-domain.example"
                  }
                },
                "tmpt": {
                  "summary": "Ticketmaster TMPT",
                  "value": {
                    "kind": "tmpt",
                    "url": "https://www.ticketmaster.com/event/EXAMPLE"
                  }
                },
                "imperva": {
                  "summary": "Imperva",
                  "value": {
                    "kind": "imperva",
                    "url": "https://your-domain.example"
                  }
                },
                "incapsula-utmvc": {
                  "summary": "Incapsula (_utmvc)",
                  "value": {
                    "kind": "incapsula_utmvc",
                    "url": "https://your-domain.example"
                  }
                },
                "reese84": {
                  "summary": "Incapsula (reese84)",
                  "value": {
                    "kind": "reese84",
                    "url": "https://your-domain.example"
                  }
                },
                "aws-waf": {
                  "summary": "AWS WAF",
                  "value": {
                    "kind": "aws_waf",
                    "url": "https://your-domain.example"
                  }
                },
                "shape": {
                  "summary": "Shape",
                  "value": {
                    "kind": "shape",
                    "url": "https://your-domain.example/login",
                    "challengeHtml": "<CAPTURED_LOGIN_PAGE_HTML>",
                    "protectedUrl": "https://your-domain.example/api/login"
                  }
                },
                "castle": {
                  "summary": "Castle",
                  "value": {
                    "kind": "castle",
                    "url": "https://your-domain.example/login"
                  }
                },
                "forter": {
                  "summary": "Forter",
                  "value": {
                    "kind": "forter",
                    "url": "https://your-domain.example"
                  }
                },
                "riskified": {
                  "summary": "Riskified",
                  "value": {
                    "kind": "riskified",
                    "url": "https://your-domain.example"
                  }
                },
                "threatmetrix": {
                  "summary": "ThreatMetrix",
                  "value": {
                    "kind": "threatmetrix",
                    "url": "https://your-domain.example",
                    "threatMetrixOrgId": "YOUR_THREATMETRIX_ORG_ID",
                    "threatMetrixSessionId": "YOUR_TRANSACTION_SESSION_ID"
                  }
                },
                "vercel-challenge": {
                  "summary": "Vercel Challenge",
                  "value": {
                    "kind": "vercel_challenge",
                    "url": "https://your-domain.example"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Solve accepted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SolveCreated"
                },
                "example": {
                  "id": "550e8400-e29b-41d4-a716-446655440000",
                  "message": "Started Solving"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request. Messages include: `API_KEY Header Missing`, `API_KEY Does Not Exist`, `API_KEY Has No Credits`, `API_KEY does not support this product`, `invalid kind`, `<kind> solve requires <field>`, `Invalid proxy format`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "message": "invalid kind"
                }
              }
            }
          },
          "429": {
            "description": "Per-key request limit exceeded. Honor `Retry-After`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "message": "request limit exceeded"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Seconds until the window resets."
              },
              "X-RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Unix time when the window resets."
              }
            }
          },
          "500": {
            "description": "Server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "message": "failed to resolve request charge"
                }
              }
            }
          }
        }
      }
    },
    "/v2/response/{id}": {
      "get": {
        "tags": [
          "Solve"
        ],
        "operationId": "getSolveV2",
        "summary": "Get a solve result (readiness poll)",
        "description": "Recommended. Returns immediately: `202` with `ready: false` while the solve is running, `200` with `ready: true` once it has finished (`status` is `SUCCESS` or `FAILURE`). Poll about once per second.",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The `id` returned by POST /v1/request."
          }
        ],
        "responses": {
          "200": {
            "description": "Finished.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SolveResultV2"
                }
              }
            }
          },
          "202": {
            "description": "Still solving.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SolveResultV2"
                },
                "example": {
                  "status": "PENDING",
                  "success": false,
                  "userAgent": "",
                  "secUa": "",
                  "token": "",
                  "ready": false
                }
              }
            }
          },
          "400": {
            "description": "`API_KEY Header Missing` or `API_KEY Incorrect` (the id belongs to another key).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "message": "API_KEY Incorrect"
                }
              }
            }
          },
          "404": {
            "description": "`Request Not Found` (unknown id, or the finished solve is no longer retained).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "message": "Request Not Found"
                }
              }
            }
          }
        }
      }
    },
    "/v1/response/{id}": {
      "get": {
        "tags": [
          "Solve"
        ],
        "operationId": "getSolveV1",
        "summary": "Get a solve result (long poll)",
        "description": "Holds the connection open until the solve finishes, for up to 60 seconds. On timeout it returns `200` with `status: FAILURE`, even though the solve may still be running; prefer GET /v2/response/{id}.",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The `id` returned by POST /v1/request."
          }
        ],
        "responses": {
          "200": {
            "description": "Finished, or timed out after 60 seconds (`status: FAILURE`).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SolveResult"
                }
              }
            }
          },
          "400": {
            "description": "`API_KEY Header Missing` or `API_KEY Incorrect`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "message": "API_KEY Incorrect"
                }
              }
            }
          },
          "404": {
            "description": "`Request Not Found` (unknown id, or the finished solve is no longer retained).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "message": "Request Not Found"
                }
              }
            }
          }
        }
      }
    },
    "/v1/report/{id}": {
      "post": {
        "tags": [
          "Solve"
        ],
        "operationId": "reportSolve",
        "summary": "Report a failed solve",
        "description": "Report a `SUCCESS` solve whose result the target site rejected. Only successful solves can be reported, and reports are accepted for 10 minutes after the solve finished. Reporting does not change the status returned by subsequent result reads.",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "description": "The `id` returned by POST /v1/request."
          }
        ],
        "responses": {
          "200": {
            "description": "Reported.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportResponse"
                }
              }
            }
          },
          "400": {
            "description": "`Invalid Solve Status` (not `SUCCESS`), `API_KEY Header Missing`, or `API_KEY Incorrect`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "message": "Invalid Solve Status"
                }
              }
            }
          },
          "404": {
            "description": "`Request Not Found` (unknown id, or the solve finished more than 10 minutes ago).",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "message": "Request Not Found"
                }
              }
            }
          }
        }
      }
    },
    "/v1/stats": {
      "get": {
        "tags": [
          "Account"
        ],
        "operationId": "getStats",
        "summary": "Get credits and solve counts",
        "description": "Remaining credits plus successful and failed solve counts for the API key.",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatsResponse"
                }
              }
            }
          },
          "400": {
            "description": "`API_KEY Header Missing` or `API_KEY Does Not Exist`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "message": "API_KEY Does Not Exist"
                }
              }
            }
          }
        }
      }
    },
    "/v1/products": {
      "get": {
        "tags": [
          "Account"
        ],
        "operationId": "listProducts",
        "summary": "List products and default credit costs",
        "description": "Public listing of purchasable products with their default credit cost per successful solve. A documented kind does not guarantee availability for every API key.",
        "responses": {
          "200": {
            "description": "OK.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductsResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "API_KEY",
        "description": "API key, format `CAPFUN-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`."
      }
    },
    "schemas": {
      "RecaptchaV3SolveRequest": {
        "type": "object",
        "title": "reCAPTCHA v3",
        "description": "Get standard and Enterprise reCAPTCHA v3 tokens. The site owner verifies each token with Google.",
        "required": [
          "kind",
          "url",
          "siteKey",
          "action"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "recap_v3",
              "recap_v3_enterprise",
              "recap_v3_proxy",
              "recap_v3_enterprise_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "siteKey": {
            "type": "string",
            "description": "Site key of the challenge."
          },
          "action": {
            "type": "string",
            "description": "The reCAPTCHA v3 `action` value the page passes to `grecaptcha.execute`. The API rejects the request (400) when it is empty."
          },
          "isSession": {
            "type": "boolean",
            "description": "Appends `&waf=session` to the reCAPTCHA script URL (Google Cloud Armor session-token integration)."
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "recaptcha-v3",
          "name": "reCAPTCHA v3",
          "vendor": "reCAPTCHA",
          "category": "captcha",
          "result": "token",
          "gets": "reCAPTCHA v3 token",
          "kinds": [
            "recap_v3",
            "recap_v3_enterprise",
            "recap_v3_proxy",
            "recap_v3_enterprise_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/recaptcha-v3",
          "title": "reCAPTCHA v3 API Reference",
          "description": "Get standard and Enterprise reCAPTCHA v3 tokens. The site owner verifies each token with Google.",
          "overview": [
            "Use `recap_v3` for standard reCAPTCHA v3 and `recap_v3_enterprise` for Google Cloud Enterprise site keys."
          ],
          "usingResult": [
            "Submit `token` with the protected request. The site owner verifies the token, action, and hostname with Google.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "Solved reCAPTCHA token"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "03AGdBq25SiXT-pmSeBXjzScW-EiocHwwpwqJRCAI7Z..."
          },
          "listPriceByKind": {
            "recap_v3": {
              "creditsPerSolve": 10,
              "usdPer1000": 1.0
            },
            "recap_v3_enterprise": {
              "creditsPerSolve": 25,
              "usdPer1000": 2.5
            }
          }
        }
      },
      "RecaptchaV2SolveRequest": {
        "type": "object",
        "title": "reCAPTCHA v2",
        "description": "Solve reCAPTCHA v2 checkbox, invisible, and Enterprise widgets and submit the token as `g-recaptcha-response`.",
        "required": [
          "kind",
          "url",
          "siteKey"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "recap_v2",
              "recap_v2_proxy",
              "recap_v2_invis",
              "recap_v2_invis_proxy",
              "recap_v2_enterprise",
              "recap_v2_enterprise_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "siteKey": {
            "type": "string",
            "description": "Site key of the challenge."
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "recaptcha-v2",
          "name": "reCAPTCHA v2",
          "vendor": "reCAPTCHA",
          "category": "captcha",
          "result": "token",
          "gets": "g-recaptcha-response token",
          "kinds": [
            "recap_v2",
            "recap_v2_proxy",
            "recap_v2_invis",
            "recap_v2_invis_proxy",
            "recap_v2_enterprise",
            "recap_v2_enterprise_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/recaptcha-v2",
          "title": "reCAPTCHA v2 API Reference",
          "description": "Solve reCAPTCHA v2 checkbox, invisible, and Enterprise widgets and submit the token as `g-recaptcha-response`.",
          "overview": [
            "Pick the kind that matches the site: `recap_v2` for the checkbox, `recap_v2_invis` for the invisible badge, or `recap_v2_enterprise` for Google Cloud Enterprise site keys."
          ],
          "usingResult": [
            "Submit the token as the `g-recaptcha-response` field of the protected form, then verify it with Google’s `siteverify` endpoint and your secret key.",
            "Tokens are single-use and expire after about two minutes. Submit right away, using the returned `userAgent`.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "Solved token. Submit it as `g-recaptcha-response`"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "03AFcWeA5KFNfU0hVp7KJ8iEQJb2TOdRW8n2b..."
          },
          "availability": "coming-soon",
          "warning": "This product is marked coming soon on the public rate card. Check GET /v1/products and your API key's product access before sending a request.",
          "listPriceByKind": {
            "recap_v2": {
              "creditsPerSolve": 15,
              "usdPer1000": 1.5
            },
            "recap_v2_invis": {
              "creditsPerSolve": 15,
              "usdPer1000": 1.5
            },
            "recap_v2_enterprise": {
              "creditsPerSolve": 25,
              "usdPer1000": 2.5
            }
          }
        }
      },
      "TurnstileSolveRequest": {
        "type": "object",
        "title": "Cloudflare Turnstile",
        "description": "Solve Cloudflare Turnstile widgets and submit the token as `cf-turnstile-response`.",
        "required": [
          "kind",
          "url",
          "siteKey"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "turnstile",
              "turnstile_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "siteKey": {
            "type": "string",
            "description": "Site key of the challenge."
          },
          "action": {
            "type": "string",
            "description": "Widget `action`, if set. Your server must compare the `action` returned by `siteverify` with the expected value"
          },
          "turnstileMetadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Widget metadata, e.g. `{ \"cData\": \"...\" }`. Passed to the widget as-is"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "turnstile",
          "name": "Cloudflare Turnstile",
          "vendor": "Cloudflare",
          "category": "captcha",
          "result": "token",
          "gets": "cf-turnstile-response token",
          "kinds": [
            "turnstile",
            "turnstile_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/turnstile",
          "title": "Cloudflare Turnstile API Reference",
          "description": "Solve Cloudflare Turnstile widgets and submit the token as `cf-turnstile-response`.",
          "overview": [
            "Supports managed, non-interactive, and invisible widgets. Pass the widget's `action` and `cData` values when set. After `siteverify` succeeds, your server must compare the returned `action` and `cdata` with its expected values before accepting the request."
          ],
          "usingResult": [
            "Submit the token as `cf-turnstile-response` and verify it with Cloudflare's `siteverify` endpoint and your secret key. Require a successful response and compare the returned `action` and `cdata` with your expected values when set.",
            "Tokens are single-use and short-lived. Submit right away.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "Solved token. Submit it as `cf-turnstile-response`"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "0.ABCdEFGhIJKlMNoPQrSTUvWxYz0123456..."
          },
          "listPrice": {
            "creditsPerSolve": 15,
            "usdPer1000": 1.5
          }
        }
      },
      "HcaptchaSolveRequest": {
        "type": "object",
        "title": "hCaptcha Enterprise",
        "description": "Solve hCaptcha Enterprise silent-pass challenges and submit the token as `h-captcha-response`.",
        "required": [
          "kind",
          "url",
          "siteKey"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "hcaptcha",
              "hcaptcha_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "siteKey": {
            "type": "string",
            "description": "Site key of the challenge."
          },
          "hcaptchaRqdata": {
            "type": "string",
            "description": "Per-request `rqdata` blob the page embeds with the site key, if any"
          },
          "hcaptchaApiHost": {
            "type": "string",
            "description": "Custom hCaptcha API host for self-hosted or regional sites. Omit for `hcaptcha.com`"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "hcaptcha",
          "name": "hCaptcha Enterprise",
          "vendor": "hCaptcha",
          "category": "captcha",
          "result": "token",
          "gets": "h-captcha-response token",
          "kinds": [
            "hcaptcha",
            "hcaptcha_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/hcaptcha",
          "title": "hCaptcha Enterprise API Reference",
          "description": "Solve hCaptcha Enterprise silent-pass challenges and submit the token as `h-captcha-response`.",
          "overview": [
            "Supports silent-pass Enterprise sites; interactive image grids are not supported. If the page embeds `rqdata`, pass it as `hcaptchaRqdata`. The token is bound to it and `siteverify` checks it."
          ],
          "usingResult": [
            "Submit the token as the `h-captcha-response` field, then verify it with hCaptcha’s `siteverify` endpoint and your secret key.",
            "Tokens are single-use and short-lived. Submit right away, once, using the returned userAgent, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "Solved token. Submit it as `h-captcha-response`"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
          },
          "listPrice": {
            "creditsPerSolve": 15,
            "usdPer1000": 1.5
          }
        }
      },
      "HcaptchaInvisibleSolveRequest": {
        "type": "object",
        "title": "hCaptcha Invisible",
        "description": "Solve invisible hCaptcha and submit the token as `h-captcha-response`.",
        "required": [
          "kind",
          "url",
          "siteKey"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "hcaptcha_invis",
              "hcaptcha_invis_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "siteKey": {
            "type": "string",
            "description": "Site key of the challenge."
          },
          "hcaptchaRqdata": {
            "type": "string",
            "description": "Per-request `rqdata` blob the page embeds with the site key, if any"
          },
          "hcaptchaApiHost": {
            "type": "string",
            "description": "Custom hCaptcha API host for self-hosted or regional sites. Omit for `hcaptcha.com`"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "hcaptcha-invisible",
          "name": "hCaptcha Invisible",
          "vendor": "hCaptcha",
          "category": "captcha",
          "result": "token",
          "gets": "h-captcha-response token",
          "kinds": [
            "hcaptcha_invis",
            "hcaptcha_invis_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/hcaptcha-invisible",
          "title": "hCaptcha Invisible API Reference",
          "description": "Solve invisible hCaptcha and submit the token as `h-captcha-response`.",
          "overview": [
            "If the page embeds `rqdata`, pass it as `hcaptchaRqdata`. The token is bound to it and `siteverify` checks it."
          ],
          "usingResult": [
            "Submit the token as the `h-captcha-response` field, then verify it with hCaptcha’s `siteverify` endpoint and your secret key.",
            "Tokens are single-use and short-lived. Submit right away.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "Solved token. Submit it as `h-captcha-response`"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
          },
          "listPrice": {
            "creditsPerSolve": 15,
            "usdPer1000": 1.5
          }
        }
      },
      "GeetestSolveRequest": {
        "type": "object",
        "title": "GeeTest",
        "description": "Solve GeeTest v4 and v3 challenges and submit the result for site-owner verification.",
        "required": [
          "kind",
          "url",
          "siteKey"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "geetest",
              "geetest_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "siteKey": {
            "type": "string",
            "description": "Site key of the challenge."
          },
          "geetestChallenge": {
            "type": "string",
            "description": "Required for v3. Challenge from your own register call; setting it switches the solve to v3. Challenges are single-use and short-lived — mint one fresh challenge per solve attempt and never retry a failed attempt with the same challenge"
          },
          "geetestApiServer": {
            "type": "string",
            "description": "v3 only. Self-hosted API host. Omit for GeeTest’s servers"
          },
          "geetestProduct": {
            "type": "string",
            "description": "Widget mode: `bind` (default), `popup`, or `float`"
          },
          "geetestLang": {
            "type": "string",
            "description": "Widget language. Defaults to `eng` / `en`"
          },
          "geetestNewCaptcha": {
            "type": "string",
            "description": "v3 only. `true` or `1` sends `new_captcha` on init"
          },
          "geetestRiskType": {
            "type": "string",
            "description": "Gated v4 sites only. Site-issued risk token; without it `/load` fails with `illegal risk_type`"
          },
          "geetestUserInfo": {
            "type": "string",
            "description": "v4 only. Site-issued `userInfo` JSON, e.g. `{\"session_id\":\"...\"}`, passed through as-is"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "geetest",
          "name": "GeeTest",
          "vendor": "GeeTest",
          "category": "captcha",
          "result": "geetest",
          "gets": "GeeTest v4 or v3 validate values",
          "kinds": [
            "geetest",
            "geetest_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/geetest",
          "title": "GeeTest API Reference",
          "description": "Solve GeeTest v4 and v3 challenges and submit the result for site-owner verification.",
          "overview": [
            "v4 (default): `siteKey` is the `captchaId`. Returns four fields for GeeTest’s validate endpoint.",
            "v3: `siteKey` is the `gt`, and `geetestChallenge` is the challenge from your own register call. Returns `geetest_challenge`, `geetest_validate`, and `geetest_seccode`.",
            "Optional: `geetestApiServer` for self-hosted v3, `geetestRiskType` for gated v4, and `geetestUserInfo` when v4 is bound to the site’s session."
          ],
          "usingResult": [
            "v4: the site owner verifies `lot_number`, `captcha_output`, `pass_token`, and `gen_time` through GeeTest’s validate endpoint, using the HMAC-SHA256 `sign_token`.",
            "v3: submit `geetest_challenge`, `geetest_validate`, and `geetest_seccode` to the site’s validate endpoint. The result is single-use, so use it right away.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "geetest.lot_number",
              "type": "string",
              "description": "v4 lot number"
            },
            {
              "name": "geetest.captcha_output",
              "type": "string",
              "description": "v4 captcha output"
            },
            {
              "name": "geetest.pass_token",
              "type": "string",
              "description": "v4 pass token"
            },
            {
              "name": "geetest.gen_time",
              "type": "string",
              "description": "v4 generation time"
            },
            {
              "name": "geetest.geetest_challenge",
              "type": "string",
              "description": "v3 challenge"
            },
            {
              "name": "geetest.geetest_validate",
              "type": "string",
              "description": "v3 validate value"
            },
            {
              "name": "geetest.geetest_seccode",
              "type": "string",
              "description": "v3 seccode"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "",
            "geetest": {
              "lot_number": "0241c2ef9dc0f0e5a3d0e1f5f2ad5c8d",
              "captcha_output": "5KAmMKVkldquKZ8DP5ehcG8LDv1brhRYgCbj9...",
              "pass_token": "8e035d781cd7f7c1d6c2f45ae2b0b8c8fb...",
              "gen_time": "1735689600"
            }
          },
          "listPrice": {
            "creditsPerSolve": 15,
            "usdPer1000": 1.5
          }
        }
      },
      "FriendlyCaptchaSolveRequest": {
        "type": "object",
        "title": "Friendly Captcha",
        "description": "Solve Friendly Captcha proof-of-work widgets and submit the solution with the protected form.",
        "required": [
          "kind",
          "url",
          "siteKey"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "friendly_captcha",
              "friendly_captcha_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "siteKey": {
            "type": "string",
            "description": "Site key of the challenge."
          },
          "friendlyVersion": {
            "type": "string",
            "description": "Widget line: `v1` (default), `v2`, `v1-eu`, or `v2-eu`. Must match the site",
            "enum": [
              "v1",
              "v2",
              "v1-eu",
              "v2-eu"
            ]
          },
          "friendlyCdnOrigin": {
            "type": "string",
            "description": "Widget script origin for self-hosted or EU sites. Omit for the public CDN"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "friendly-captcha",
          "name": "Friendly Captcha",
          "vendor": "Friendly Captcha",
          "category": "captcha",
          "result": "token",
          "gets": "frc-captcha-solution value",
          "kinds": [
            "friendly_captcha",
            "friendly_captcha_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/friendly-captcha",
          "title": "Friendly Captcha API Reference",
          "description": "Solve Friendly Captcha proof-of-work widgets and submit the solution with the protected form.",
          "overview": [
            "Returns `frc-captcha-solution` for v1 widgets and `frc-captcha-response` for v2. Set `friendlyVersion` to the site’s widget line; add `-eu` for EU-region keys.",
            "Pass `friendlyCdnOrigin` if the site serves the widget from its own origin instead of the public CDN."
          ],
          "usingResult": [
            "Submit the value under the field name the site expects (`frc-captcha-solution` for v1, `frc-captcha-response` for v2), then verify it server-side with your Friendly Captcha API key.",
            "Solutions are single-use and expire roughly five minutes after minting — submit them immediately.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "Solved value: `frc-captcha-solution` (v1) or `frc-captcha-response` (v2)"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "e8e1a897de2ea1fa5db0d2fd8.ABCdEF.1735689600"
          },
          "listPrice": {
            "creditsPerSolve": 10,
            "usdPer1000": 1.0
          }
        }
      },
      "CaptchafoxSolveRequest": {
        "type": "object",
        "title": "CaptchaFox",
        "description": "Solve CaptchaFox challenges and submit the token with the protected form.",
        "required": [
          "kind",
          "url",
          "siteKey"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "captchafox",
              "captchafox_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "siteKey": {
            "type": "string",
            "description": "Site key of the challenge."
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "captchafox",
          "name": "CaptchaFox",
          "vendor": "CaptchaFox",
          "category": "captcha",
          "result": "token",
          "gets": "CaptchaFox token",
          "kinds": [
            "captchafox",
            "captchafox_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/captchafox",
          "title": "CaptchaFox API Reference",
          "description": "Solve CaptchaFox challenges and submit the token with the protected form.",
          "overview": [
            "Always include `url` and `siteKey`. Creation can accept a request without `url`, but that request cannot produce a usable solve result."
          ],
          "usingResult": [
            "Submit the token with the protected form or API call, then verify it server-side with your CaptchaFox secret key. Tokens are single-use, short-lived, and scored against the solving egress — replay promptly, once, with the returned userAgent from the same proxy.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "Solved CaptchaFox token"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "cfx1.2.ABCdEFGhIJKlMNoPQrSTUvWxYz012..."
          },
          "listPrice": {
            "creditsPerSolve": 15,
            "usdPer1000": 1.5
          }
        }
      },
      "FuncaptchaInvisibleSolveRequest": {
        "type": "object",
        "title": "FunCaptcha Invisible",
        "description": "Solve invisible Arkose Labs FunCaptcha and replay the session token.",
        "required": [
          "kind",
          "url",
          "siteKey"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "funcaptcha_invis",
              "funcaptcha_invis_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "siteKey": {
            "type": "string",
            "description": "Site key of the challenge."
          },
          "funcaptchaBlob": {
            "type": "string",
            "description": "Arkose `data[blob]` enforcement blob, if the site uses one"
          },
          "funcaptchaSurl": {
            "type": "string",
            "description": "Arkose service URL for private deployments. Omit for `client-api.arkoselabs.com`"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "funcaptcha-invisible",
          "name": "FunCaptcha Invisible",
          "vendor": "Arkose Labs",
          "category": "captcha",
          "result": "token",
          "gets": "FunCaptcha-Token session token",
          "kinds": [
            "funcaptcha_invis",
            "funcaptcha_invis_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/funcaptcha-invisible",
          "title": "FunCaptcha Invisible API Reference",
          "description": "Solve invisible Arkose Labs FunCaptcha and replay the session token.",
          "overview": [
            "Returns the `FunCaptcha-Token` session value. If the site sends a `data[blob]`, pass it as `funcaptchaBlob`; the token is invalid without it.",
            "Use `funcaptchaSurl` for sites on a private Arkose service URL."
          ],
          "usingResult": [
            "Send the token as the `FunCaptcha-Token` header or form field of the protected call. Arkose checks it against the public key and blob it was issued for.",
            "The token is single-use and bound to the solving session's fingerprint and egress — replay it promptly, once, using the returned userAgent, from the same proxy.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "Arkose session token: the `FunCaptcha-Token` value"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "8542e3a1|r=ap-southeast-1|mt=..."
          },
          "listPrice": {
            "creditsPerSolve": 15,
            "usdPer1000": 1.5
          }
        }
      },
      "CloudflareWafSolveRequest": {
        "type": "object",
        "title": "Cloudflare WAF",
        "description": "Pass Cloudflare WAF managed challenges and replay the `cf_clearance` cookie.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "cf_waf",
              "cf_waf_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "challengeHtml": {
            "type": "string",
            "description": "Captured challenge page HTML. Omit to use the challenge served for your target URL"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "cloudflare-waf",
          "name": "Cloudflare WAF",
          "vendor": "Cloudflare",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "cf_clearance cookie",
          "kinds": [
            "cf_waf",
            "cf_waf_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/cloudflare-waf",
          "title": "Cloudflare WAF API Reference",
          "description": "Pass Cloudflare WAF managed challenges and replay the `cf_clearance` cookie.",
          "overview": [
            "Passes the Cloudflare managed challenge and returns the `cf_clearance` cookie together with the full Cookie header of the solve.",
            "By default the challenge served for your target URL is used. If your integration captured the challenge page HTML, pass it in `challengeHtml`."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests to the protected origin, with the returned userAgent as your User-Agent header. The clearance is bound to both the user agent and the egress IP of the solving session.",
            "Prefer the full cookieHeader value over rebuilding a cookie jar from parts — the zone typically pairs cf_clearance with a __cf_bm sibling the edge expects to travel with it.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The cf_clearance clearance cookie value minted by passing the managed challenge"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "v1e3b1f2e8e1a897de2ea1fa5db0d2fd8-1735689600-1.2.1...",
            "cookies": {
              "cf_clearance": "v1e3b1f2...",
              "__cf_bm": "a1b2c3d4e5..."
            },
            "cookieHeader": "cf_clearance=v1e3b1f2...; __cf_bm=a1b2c3d4e5..."
          },
          "warning": "The clearance is bound to the user agent and IP. If you replay from a different IP, use a `_proxy` kind with a sticky proxy.",
          "listPrice": {
            "creditsPerSolve": 15,
            "usdPer1000": 1.5
          }
        }
      },
      "DatadomeSolveRequest": {
        "type": "object",
        "title": "DataDome",
        "description": "Solve DataDome challenges and replay the `datadome` cookie.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "datadome",
              "datadome_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "challengeHtml": {
            "type": "string",
            "description": "Captured page HTML for the invisible-tags flow. Omit to use the live slider on `url`"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "datadome",
          "name": "DataDome",
          "vendor": "DataDome",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "datadome cookie",
          "kinds": [
            "datadome",
            "datadome_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/datadome",
          "title": "DataDome API Reference",
          "description": "Solve DataDome challenges and replay the `datadome` cookie.",
          "overview": [
            "Returns the `datadome` cookie value, `cookieHeader`, and `userAgent` for requests to the protected site.",
            "By default the solve targets your URL directly. If your flow uses the invisible-tags variant, pass `challengeHtml` with the captured protected-page HTML."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests to the protected origin (or token as the bare datadome cookie value), with the returned userAgent as your User-Agent header. The cookie is bound to the solving session, so keep the replay on the same egress IP.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The trusted datadome cookie value minted by passing the challenge"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "a1b2c3d4e5f6g7h8i9j0~0~...,",
            "cookies": {
              "datadome": "a1b2c3d4e5f6g7h8i9j0~0~...,"
            },
            "cookieHeader": "datadome=a1b2c3d4e5f6g7h8i9j0~0~...,"
          },
          "warning": "The cookie is bound to the session and IP. If your requests won’t come from the solve’s IP, use a `_proxy` kind with a sticky proxy.",
          "listPrice": {
            "creditsPerSolve": 20,
            "usdPer1000": 2.0
          }
        }
      },
      "DatadomeInterstitialSolveRequest": {
        "type": "object",
        "title": "DataDome Interstitial",
        "description": "Pass DataDome’s interstitial device check and replay the trusted `datadome` cookie.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "datadome_interstitial",
              "datadome_interstitial_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "initCookies": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Cookies your flow already holds for the protected origin, e.g. { \"datadome\": \"...\" }. Optional."
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "datadome-interstitial",
          "name": "DataDome Interstitial",
          "vendor": "DataDome",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "datadome cookie",
          "kinds": [
            "datadome_interstitial",
            "datadome_interstitial_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/datadome-interstitial",
          "title": "DataDome Interstitial API Reference",
          "description": "Pass DataDome’s interstitial device check and replay the trusted `datadome` cookie.",
          "overview": [
            "Handles the full-page interstitial device check (the 403 challenge page) and returns the trusted `datadome` cookie.",
            "Pass `initCookies` if your flow already holds a `datadome` cookie from the tags step. Omit it to start fresh."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests to the protected origin, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The trusted datadome cookie value minted by riding out the interstitial"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "b2c3d4e5f6g7h8i9j0k1~0~...,",
            "cookies": {
              "datadome": "b2c3d4e5f6g7h8i9j0k1~0~...,"
            },
            "cookieHeader": "datadome=b2c3d4e5f6g7h8i9j0k1~0~...,"
          },
          "listPrice": {
            "creditsPerSolve": 20,
            "usdPer1000": 2.0
          }
        }
      },
      "PerimeterxSolveRequest": {
        "type": "object",
        "title": "PerimeterX",
        "description": "Solve PerimeterX (HUMAN) block pages and replay the `_px` cookies.",
        "required": [
          "kind",
          "url",
          "challengeHtml"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "perimeterx",
              "perimeterx_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "challengeHtml": {
            "type": "string",
            "description": "Captured block-page HTML that loads the PX sensor (`init.js`)"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "perimeterx",
          "name": "PerimeterX",
          "vendor": "PerimeterX",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "_px* clearance cookie",
          "kinds": [
            "perimeterx",
            "perimeterx_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/perimeterx",
          "title": "PerimeterX API Reference",
          "description": "Solve PerimeterX (HUMAN) block pages and replay the `_px` cookies.",
          "overview": [
            "Send the captured block-page HTML (the page that loads the PX sensor, `init.js`). Returns the `_px` cookie family."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests to the protected origin, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The _px3 clearance cookie value minted by solving the challenge"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8...",
            "cookies": {
              "_px3": "d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8...",
              "_pxhd": "pxhd-sibling..."
            },
            "cookieHeader": "_px3=d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8...; _pxhd=pxhd-sibling..."
          },
          "listPrice": {
            "creditsPerSolve": 20,
            "usdPer1000": 2.0
          }
        }
      },
      "PerimeterxHoldSolveRequest": {
        "type": "object",
        "title": "PerimeterX Hold",
        "description": "Solve PerimeterX press-and-hold blocks and replay the trusted `_px` cookies.",
        "required": [
          "kind",
          "url",
          "blockData"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "perimeterx_hold",
              "perimeterx_hold_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "blockData": {
            "type": "string",
            "description": "Block payload you received: XHR JSON body or block-page HTML"
          },
          "initCookies": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Cookies you already hold for the site, e.g. `{ \"_px\": \"...\" }`. Used as the starting cookie jar"
          },
          "verifyUrl": {
            "type": "string",
            "description": "URL to validate the new cookies against. Defaults to the block payload’s origin"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "perimeterx-hold",
          "name": "PerimeterX Hold",
          "vendor": "PerimeterX",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "_px3 and _pxhd cookies",
          "kinds": [
            "perimeterx_hold",
            "perimeterx_hold_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/perimeterx-hold",
          "title": "PerimeterX Hold API Reference",
          "description": "Solve PerimeterX press-and-hold blocks and replay the trusted `_px` cookies.",
          "overview": [
            "Send the block payload you received: the XHR JSON block body or the full block-page HTML."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests to the protected origin, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The trusted _px3 clearance cookie value minted by passing press-and-hold"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9...",
            "cookies": {
              "_px3": "e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9...",
              "_pxhd": "pxhd-sibling..."
            },
            "cookieHeader": "_px3=e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9...; _pxhd=pxhd-sibling..."
          },
          "listPrice": {
            "creditsPerSolve": 30,
            "usdPer1000": 3.0
          }
        }
      },
      "PerimeterxInvisibleSolveRequest": {
        "type": "object",
        "title": "PerimeterX Invisible",
        "description": "Solve PerimeterX invisible sensors and replay the `_px` cookies.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "perimeterx_invisible",
              "perimeterx_invisible_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "jsUrl": {
            "type": "string",
            "description": "Sensor script URL, e.g. `https://client.perimeterx.net/<APPID>/main.min.js`. Found on the page if omitted"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "perimeterx-invisible",
          "name": "PerimeterX Invisible",
          "vendor": "PerimeterX",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "Returned _px cookie family (such as _px3 or _px2); additional cookies vary by target",
          "kinds": [
            "perimeterx_invisible",
            "perimeterx_invisible_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/perimeterx-invisible",
          "title": "PerimeterX Invisible API Reference",
          "description": "Solve PerimeterX invisible sensors and replay the `_px` cookies.",
          "overview": [
            "Works from the target URL; no captured HTML needed. Returns the cookies PerimeterX sets."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests to the protected origin, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The primary returned PerimeterX cookie value; the name may be `_px3`, `_px2`, or `_px`"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0",
            "cookies": {
              "_px3": "f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0",
              "_pxhd": "pxhd-sibling..."
            },
            "cookieHeader": "_px3=f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0; _pxhd=pxhd-sibling..."
          },
          "listPrice": {
            "creditsPerSolve": 20,
            "usdPer1000": 2.0
          }
        }
      },
      "AkamaiAbckSolveRequest": {
        "type": "object",
        "title": "Akamai (_abck)",
        "description": "Get a valid Akamai Bot Manager `_abck` session and replay it.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "akamai_abck",
              "akamai_abck_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "protectedUrl": {
            "type": "string",
            "description": "Endpoint you will replay the session against. Defaults to `url`. Advisory — the solver does not validate against it before return"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "akamai-abck",
          "name": "Akamai (_abck)",
          "vendor": "Akamai",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "_abck session cookies",
          "kinds": [
            "akamai_abck",
            "akamai_abck_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/akamai-abck",
          "title": "Akamai _abck API Reference",
          "description": "Get a valid Akamai Bot Manager `_abck` session and replay it.",
          "overview": [
            "The Akamai _abck product mints a valid sensor session against the target page: the solver runs Akamai's bot manager sensor until the _abck cookie rotates to a valid state, then returns it.",
            "`protectedUrl` names the endpoint your integration will replay against — advisory metadata, not a pre-return validation. The clearance evidence is the in-flow sensor rotation itself; your first replay is the live check.",
            "API-tier enforcement can exceed the cookie family: some storefront APIs answer 403 Access Denied with a cookie that clears the site itself. Treat the first protected-API replay as the live check for your exact endpoint."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The minted _abck cookie value — the family also carries bm_sz/ak_bmsc/bm_sv siblings"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "8AAB1B2C3D4E5F6G7H8I9J0K1L2M3N4O~...",
            "cookies": {
              "_abck": "8AAB1B2C3D4E5F6G7H8I9J0K1L2M3N4O~...",
              "bm_sz": "bm-sz-sibling..."
            },
            "cookieHeader": "_abck=8AAB1B2C3D4E5F6G7H8I9J0K1L2M3N4O~...; bm_sz=bm-sz-sibling..."
          },
          "warning": "`_abck` sessions are bound to the IP. Replay from the solve’s IP, or use a `_proxy` kind with a sticky proxy.",
          "listPrice": {
            "creditsPerSolve": 25,
            "usdPer1000": 2.5
          }
        }
      },
      "AkamaiSbsdSolveRequest": {
        "type": "object",
        "title": "Akamai (sbsd/bm_sc)",
        "description": "Get Akamai `sbsd` / `bm_sc` cookies and replay them.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "akamai_sbsd",
              "akamai_sbsd_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "protectedUrl": {
            "type": "string",
            "description": "Endpoint you will replay the session against. Defaults to url. Load-bearing on cpr-challenge deployments: the solver fires it from the page after the mint and returns the post-challenge refreshed family. On endpoints that never challenge, the minted family returns unchanged"
          },
          "funnelUrls": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Login-flow URLs to visit, in order, after the `_abck` rotation. Omit for per-site defaults"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "akamai-sbsd",
          "name": "Akamai (sbsd/bm_sc)",
          "vendor": "Akamai",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "sbsd and bm_sc cookies",
          "kinds": [
            "akamai_sbsd",
            "akamai_sbsd_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/akamai-sbsd",
          "title": "Akamai sbsd/bm_sc API Reference",
          "description": "Get Akamai `sbsd` / `bm_sc` cookies and replay them.",
          "overview": [
            "Returns the Akamai `sbsd` and `bm_sc` cookies. Flow URLs have per-site defaults; override them with the request fields below only if your site differs.",
            "Some Akamai gateways answer the protected API with a cpr_chlge sensor challenge that the cookie family alone does not satisfy - the edge wants a sensor POST built from the challenge's t token. Pass protectedUrl to handle those deployments: the solver fires that endpoint from the page after the mint, Akamai's in-page sensor answers any 429 cpr_chlge challenge it draws, and the refreshed family is what returns. Endpoints that never challenge complete with the minted family as before."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The minted sbsd cookie value — the sbsd/bm_sc family's load-bearing member"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "1A2B3C4D5E6F7G8H9I0J~0~...,",
            "cookies": {
              "sbsd": "1A2B3C4D5E6F7G8H9I0J~0~...,",
              "bm_sc": "bm-sc-sibling..."
            },
            "cookieHeader": "sbsd=1A2B3C4D5E6F7G8H9I0J~0~...,; bm_sc=bm-sc-sibling..."
          },
          "listPrice": {
            "creditsPerSolve": 25,
            "usdPer1000": 2.5
          }
        }
      },
      "AkamaiSecCptSolveRequest": {
        "type": "object",
        "title": "Akamai (sec_cpt)",
        "description": "Solve Akamai `sec_cpt` proof-of-work challenges and replay the cookies.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "akamai_sec_cpt",
              "akamai_sec_cpt_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "triggerUrl": {
            "type": "string",
            "description": "API URL whose 428 response triggers the challenge. Has per-site defaults"
          },
          "triggerBodyJson": {
            "type": "string",
            "description": "Raw JSON body for the trigger request — paired with triggerUrl"
          },
          "protectedUrl": {
            "type": "string",
            "description": "Endpoint you will replay the session against. Defaults to `url`. Advisory — the solver does not validate against it before return"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "akamai-sec-cpt",
          "name": "Akamai (sec_cpt)",
          "vendor": "Akamai",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "sec_cpt cookies",
          "kinds": [
            "akamai_sec_cpt",
            "akamai_sec_cpt_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/akamai-sec-cpt",
          "title": "Akamai sec_cpt API Reference",
          "description": "Solve Akamai `sec_cpt` proof-of-work challenges and replay the cookies.",
          "overview": [
            "The Akamai sec_cpt product solves the 428 sec-cp-challenge proof-of-work in a real browser: the solver triggers the challenge from the page context, works the proof, and returns the solved sec_cpt cookie plus any Akamai session siblings.",
            "The trigger URL defaults per site; pass triggerUrl with an optional JSON body when your deployment's challenge fires on a specific API call. protectedUrl names the endpoint you will replay against (advisory — not a pre-return validation)."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The solved sec_cpt cookie value"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "2B3C4D5E6F7G8H9I0J1K~0~...,",
            "cookies": {
              "sec_cpt": "2B3C4D5E6F7G8H9I0J1K~0~...,",
              "bm_sz": "bm-sz-sibling..."
            },
            "cookieHeader": "sec_cpt=2B3C4D5E6F7G8H9I0J1K~0~...,; bm_sz=bm-sz-sibling..."
          },
          "listPrice": {
            "creditsPerSolve": 25,
            "usdPer1000": 2.5
          }
        }
      },
      "KasadaSolveRequest": {
        "type": "object",
        "title": "Kasada",
        "description": "Get Kasada `x-kpsdk` headers for one protected request.",
        "required": [
          "kind",
          "url",
          "protectedUrl"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "kasada",
              "kasada_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "protectedUrl": {
            "type": "string",
            "description": "Endpoint the headers are for. Replay them on a request to exactly this URL"
          },
          "jsDomain": {
            "type": "string",
            "description": "Host serving the sensor (`p.js`) when it isn’t on the target’s domain. Omit for standard sites"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "kasada",
          "name": "Kasada",
          "vendor": "Kasada",
          "category": "anti-bot",
          "result": "headers",
          "gets": "x-kpsdk-* headers",
          "kinds": [
            "kasada",
            "kasada_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/kasada",
          "title": "Kasada API Reference",
          "description": "Get Kasada `x-kpsdk` headers for one protected request.",
          "overview": [
            "The Kasada product runs the KPSDK sensor (p.js) live until its proof-of-work clears, then fires a request against your protected endpoint from the browser and captures the decorated header set off the wire — the x-kpsdk family plus the cookie header carrying the KP_UID session cookies.",
            "Headers are session- and IP-bound and rotate per request: one solve produces one replayable header set for exactly the endpoint you pass in protectedUrl.",
            "ips.js-only deployments never attach x-kpsdk headers to requests — the edge validates the KP_UID session cookies instead. The sensor type is detected from the page automatically and those sites get the cookie-bearing cleared request; pass the challenge document URL (/fp) as url."
          ],
          "usingResult": [
            "Send one outbound request to exactly protectedUrl with every returned header set verbatim — including the cookie header — and the returned userAgent as your User-Agent header.",
            "The header set is single-use, session-bound, and IP-bound: mint a fresh solve for every protected request, and keep the replay on the solving session's egress IP.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "headers",
              "type": "object",
              "description": "Headers to replay as-is: `x-kpsdk-ct` / `-h` / `-v` plus the `cookie` header with `KP_UID` cookies"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "",
            "headers": {
              "x-kpsdk-ct": "kpsdk:ct:1:...",
              "x-kpsdk-h": "kpsdk:h:1:...",
              "x-kpsdk-v": "1.4.0",
              "cookie": "KP_UIDz=unknown; KP_UIDz_s=unknown"
            }
          },
          "listPrice": {
            "creditsPerSolve": 50,
            "usdPer1000": 5.0
          }
        }
      },
      "KasadaCdSolveRequest": {
        "type": "object",
        "title": "Kasada (cd)",
        "description": "Get Kasada headers with `x-kpsdk-cd` for one protected request.",
        "required": [
          "kind",
          "url",
          "protectedUrl"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "kasada_cd",
              "kasada_cd_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "protectedUrl": {
            "type": "string",
            "description": "Endpoint the headers are for. Replay them on a request to exactly this URL"
          },
          "jsDomain": {
            "type": "string",
            "description": "Host serving the sensor (`p.js`) when it isn’t on the target’s domain. Omit for standard sites"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "kasada-cd",
          "name": "Kasada (cd)",
          "vendor": "Kasada",
          "category": "anti-bot",
          "result": "headers",
          "gets": "x-kpsdk-cd headers",
          "kinds": [
            "kasada_cd",
            "kasada_cd_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/kasada-cd",
          "title": "Kasada cd API Reference",
          "description": "Get Kasada headers with `x-kpsdk-cd` for one protected request.",
          "overview": [
            "For sites that require `x-kpsdk-cd`. Loads the target page live, sends a request to `protectedUrl`, and captures the headers the sensor adds, including `x-kpsdk-cd`.",
            "ips.js-only deployments never attach x-kpsdk headers to requests — the edge validates the KP_UID session cookies instead. The sensor type is detected from the page automatically and those sites get the cookie-bearing cleared request; pass the challenge document URL (/fp) as url."
          ],
          "usingResult": [
            "Send one outbound request to exactly protectedUrl with every returned header set verbatim — including the cookie header — and the returned userAgent as your User-Agent header.",
            "The header set is single-use, session-bound, and IP-bound: mint a fresh solve for every protected request, and keep the replay on the solving session's egress IP.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "headers",
              "type": "object",
              "description": "Headers to replay as-is: `x-kpsdk-cd`, the rest of the `x-kpsdk` family, and the `cookie` header with `KP_UID` cookies"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "",
            "headers": {
              "x-kpsdk-cd": "kpsdk:cd:1:...",
              "x-kpsdk-ct": "kpsdk:ct:1:...",
              "x-kpsdk-v": "1.4.0",
              "cookie": "KP_UIDz=unknown; KP_UIDz_s=unknown"
            }
          },
          "listPrice": {
            "creditsPerSolve": 50,
            "usdPer1000": 5.0
          }
        }
      },
      "KasadaTlPayloadSolveRequest": {
        "type": "object",
        "title": "Kasada (tl payload)",
        "description": "Capture a live Kasada `/tl` telemetry request and replay it.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "kasada_tl_payload",
              "kasada_tl_payload_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "jsDomain": {
            "type": "string",
            "description": "Host serving the sensor (`p.js`) when it isn’t on the target’s domain. Omit for standard sites"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "kasada-tl-payload",
          "name": "Kasada (tl payload)",
          "vendor": "Kasada",
          "category": "anti-bot",
          "result": "headers",
          "gets": "A replayable /tl request",
          "kinds": [
            "kasada_tl_payload",
            "kasada_tl_payload_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/kasada-tl-payload",
          "title": "Kasada tl Payload API Reference",
          "description": "Capture a live Kasada `/tl` telemetry request and replay it.",
          "overview": [
            "Captures the sensor’s own `POST /tl` request from a live session (never synthesized). The /tl body is single-use at Kasada’s edge, so the sensor’s post is answered locally and never delivered — the returned body is fresh, and your replay is its first live posting. Returns the raw body, the request headers, and the exact URL."
          ],
          "usingResult": [
            "POST the decoded body to exactly the returned url with the returned headers verbatim, from the same egress IP as the capture.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "body",
              "type": "string",
              "description": "Base64-encoded raw body of the `POST /tl` request — captured before delivery, so it has never been posted"
            },
            {
              "name": "url",
              "type": "string",
              "description": "Exact URL of the `POST /tl` request. Replay to this URL"
            },
            {
              "name": "headers",
              "type": "object",
              "description": "Request headers, including the `cookie` header with `KP_UID` cookies"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "",
            "body": "aGVsbG8gd29ybGQ=",
            "url": "https://your-domain.example/tl",
            "headers": {
              "content-type": "application/json",
              "x-kpsdk-ct": "kpsdk:ct:1:...",
              "cookie": "KP_UIDz=unknown"
            }
          },
          "listPrice": {
            "creditsPerSolve": 50,
            "usdPer1000": 5.0
          }
        }
      },
      "TmptSolveRequest": {
        "type": "object",
        "title": "Ticketmaster TMPT",
        "description": "Get a cleared Ticketmaster `tmpt` session and replay it.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "tmpt",
              "tmpt_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "tmpt",
          "name": "Ticketmaster TMPT",
          "vendor": "Ticketmaster",
          "category": "risk",
          "result": "cookie",
          "gets": "tmpt session token",
          "kinds": [
            "tmpt",
            "tmpt_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/tmpt",
          "title": "Ticketmaster TMPT API Reference",
          "description": "Get a cleared Ticketmaster `tmpt` session and replay it.",
          "overview": [
            "Clears the Kasada check Ticketmaster pages run and returns the `tmpt` token issued once it passes. Event, member, artist, regional, and etickets pages all work; any page that runs the check can be `url`."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on Ticketmaster requests, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The tmpt cleared-session token the edge mints once the Kasada verdict passes"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "Tm9WbWdPb3N0VGVzdFRva2Vu...",
            "cookies": {
              "tmpt": "Tm9WbWdPb3N0VGVzdFRva2Vu...",
              "KP_UIDz": "unknown"
            },
            "cookieHeader": "tmpt=Tm9WbWdPb3N0VGVzdFRva2Vu...; KP_UIDz=unknown"
          },
          "listPrice": {
            "creditsPerSolve": 25,
            "usdPer1000": 2.5
          }
        }
      },
      "ImpervaSolveRequest": {
        "type": "object",
        "title": "Imperva",
        "description": "Run Imperva Advanced Bot Protection and replay the clearance cookies.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "imperva",
              "imperva_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "jsUrl": {
            "type": "string",
            "description": "Sensor script URL, if it can’t be found on the page"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "imperva",
          "name": "Imperva",
          "vendor": "Imperva",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "Clearance cookies (reese84 plus session cookies)",
          "kinds": [
            "imperva",
            "imperva_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/imperva",
          "title": "Imperva Bot Protection API Reference",
          "description": "Run Imperva Advanced Bot Protection and replay the clearance cookies.",
          "overview": [
            "Returns the Imperva Advanced Bot Protection clearance cookie family: the `reese84` cookie plus the session cookies that go with it."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests to the protected origin, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The clearance cookie value minted by the sensor run — the reese84 sensor cookie"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "3C4D5E6F7G8H9I0J1K2L~0~...,",
            "cookies": {
              "reese84": "3C4D5E6F7G8H9I0J1K2L~0~...,",
              "incap_ses_1849_949787": "session..."
            },
            "cookieHeader": "reese84=3C4D5E6F7G8H9I0J1K2L~0~...,; incap_ses_1849_949787=session..."
          },
          "listPrice": {
            "creditsPerSolve": 20,
            "usdPer1000": 2.0
          }
        }
      },
      "IncapsulaUtmvcSolveRequest": {
        "type": "object",
        "title": "Incapsula (_utmvc)",
        "description": "Get the Incapsula `_utmvc` cookie and replay it.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "incapsula_utmvc",
              "incapsula_utmvc_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "incapsula-utmvc",
          "name": "Incapsula (_utmvc)",
          "vendor": "Imperva",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "_utmvc cookies",
          "kinds": [
            "incapsula_utmvc",
            "incapsula_utmvc_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/incapsula-utmvc",
          "title": "Incapsula _utmvc API Reference",
          "description": "Get the Incapsula `_utmvc` cookie and replay it.",
          "overview": [
            "Returns the `_utmvc` cookie for the target page."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests to the protected origin, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The minted _utmvc cookie value — the family also carries incap_ses/visid_incap siblings"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "4D5E6F7G8H9I0J1K2L3M~0~...,",
            "cookies": {
              "_utmvc": "4D5E6F7G8H9I0J1K2L3M~0~...,",
              "incap_ses_1849_949787": "session..."
            },
            "cookieHeader": "_utmvc=4D5E6F7G8H9I0J1K2L3M~0~...,; incap_ses_1849_949787=session..."
          },
          "listPrice": {
            "creditsPerSolve": 15,
            "usdPer1000": 1.5
          }
        }
      },
      "Reese84SolveRequest": {
        "type": "object",
        "title": "Incapsula (reese84)",
        "description": "Get the Incapsula `reese84` cookie and replay it.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "reese84",
              "reese84_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "jsUrl": {
            "type": "string",
            "description": "Sensor script URL. Found on the page if omitted"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "reese84",
          "name": "Incapsula (reese84)",
          "vendor": "Imperva",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "reese84 cookie",
          "kinds": [
            "reese84",
            "reese84_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/reese84",
          "title": "Incapsula reese84 API Reference",
          "description": "Get the Incapsula `reese84` cookie and replay it.",
          "overview": [
            "Returns the `reese84` cookie for the protected page. The sensor script is located automatically; pass `jsUrl` only when it cannot be found."
          ],
          "usingResult": [
            "Send it as the `reese84` cookie on requests to the protected site, with the returned `userAgent` and from the same IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The minted reese84 cookie value"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "5E6F7G8H9I0J1K2L3M4N5O~0~...,",
            "cookies": {
              "reese84": "5E6F7G8H9I0J1K2L3M4N5O~0~...,"
            },
            "cookieHeader": "reese84=5E6F7G8H9I0J1K2L3M4N5O~0~...,"
          },
          "listPrice": {
            "creditsPerSolve": 15,
            "usdPer1000": 1.5
          }
        }
      },
      "AwsWafSolveRequest": {
        "type": "object",
        "title": "AWS WAF",
        "description": "Solve AWS WAF invisible challenges and replay the `aws-waf-token` cookie.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "aws_waf",
              "aws_waf_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "jsUrl": {
            "type": "string",
            "description": "Challenge script URL (`*.token.awswaf.com`, `*.edge.sdk.awswaf.com`, or a first-party `/__challenge_*` path). Found on the page if omitted"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "aws-waf",
          "name": "AWS WAF",
          "vendor": "AWS",
          "category": "anti-bot",
          "result": "token",
          "gets": "aws-waf-token cookie",
          "kinds": [
            "aws_waf",
            "aws_waf_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/aws-waf",
          "title": "AWS WAF API Reference",
          "description": "Solve AWS WAF invisible challenges and replay the `aws-waf-token` cookie.",
          "overview": [
            "Passes the AWS WAF invisible challenge and returns the `aws-waf-token`, together with the user agent of the solve.",
            "The challenge script is located automatically from the page. Pass `jsUrl` only for deployments whose page never references it, such as geo-blocked shells or API-only integrations."
          ],
          "usingResult": [
            "Send it as the `aws-waf-token` cookie with the returned `userAgent` and from the same IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "`aws-waf-token` value. Send it as a cookie"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "a1B2c3D4e5F6g7H8i9J0-K1L2M3..."
          },
          "warning": "Send the token as the `aws-waf-token` cookie, not an `x-aws-waf-token` header. Real browsers never send that header. Tokens are reusable for a few minutes, then the edge re-challenges (202/405) — solve again when that happens.",
          "listPrice": {
            "creditsPerSolve": 20,
            "usdPer1000": 2.0
          }
        }
      },
      "ShapeSolveRequest": {
        "type": "object",
        "title": "Shape",
        "description": "Get Shape Security headers for one protected request.",
        "required": [
          "kind",
          "url",
          "challengeHtml",
          "protectedUrl"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "shape",
              "shape_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "challengeHtml": {
            "type": "string",
            "description": "Captured HTML of the page that loads Shape’s sensor"
          },
          "protectedUrl": {
            "type": "string",
            "description": "Endpoint the headers are for. Replay them on a request to exactly this URL"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "shape",
          "name": "Shape",
          "vendor": "Shape",
          "category": "anti-bot",
          "result": "headers",
          "gets": "Shape request headers",
          "kinds": [
            "shape",
            "shape_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/shape",
          "title": "Shape API Reference",
          "description": "Get Shape Security headers for one protected request.",
          "overview": [
            "The Shape product replays the page that loads Shape's sensor (ssx.mod.js or an inline equivalent), lets the sensor arm, then fires a request against your protected endpoint from the browser and harvests the Shape headers off the wire.",
            "Shape headers are URL-bound — they encode the request URL into their telemetry — so one solve produces one replayable header set for exactly the endpoint you pass in protectedUrl. Mint a fresh header set per protected endpoint.",
            "A few gateways reject synthetic captures at the app layer; the solver detects those protected URLs and drives the site's real sign-in UI to mint the set instead."
          ],
          "usingResult": [
            "Send one outbound request to exactly protectedUrl with every returned header set verbatim, and the returned userAgent as your User-Agent header.",
            "Replay the set from the same egress IP as the solve, with the returned userAgent as your User-Agent header — the headers are bound to the solving browser's identity.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "headers",
              "type": "object",
              "description": "Shape headers to replay as-is: the `x-<customer-id>-a` / `a0` / `b` / `c` / `d` / `f` / `z` family plus extras like `x-application-mouse-tool-key`"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "",
            "headers": {
              "x-6a7b8c-a": "0:0:0:0:1:2:3:...",
              "x-6a7b8c-b": "1:1:1:...",
              "x-6a7b8c-f": "abc123..."
            }
          },
          "listPrice": {
            "creditsPerSolve": 50,
            "usdPer1000": 5.0
          }
        }
      },
      "CastleSolveRequest": {
        "type": "object",
        "title": "Castle",
        "description": "Get one-time Castle request tokens for protected calls.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "castle",
              "castle_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "castlePk": {
            "type": "string",
            "description": "Castle publishable key (`pk_...`). Read from the page if omitted"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "castle",
          "name": "Castle",
          "vendor": "Castle",
          "category": "risk",
          "result": "token",
          "gets": "One-time X-Castle-Request-Token",
          "kinds": [
            "castle",
            "castle_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/castle",
          "title": "Castle API Reference",
          "description": "Get one-time Castle request tokens for protected calls.",
          "overview": [
            "Returns the token the Castle SDK generates: the `X-Castle-Request-Token` header value for login, register, or transaction calls.",
            "The publishable key is read from the page. Pass `castlePk` only if it isn’t in the page (bundled or loaded later)."
          ],
          "usingResult": [
            "Send the token as the `X-Castle-Request-Token` header of the protected call. It expires in about two minutes, so use it right away.",
            "The token embeds the solving session's fingerprint — replay it from the same egress IP as the solve, with the returned userAgent as your User-Agent header.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "One-time `X-Castle-Request-Token` value"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "eyJhbGciOiJIUzI1NiJ9.eyJzaWQiOiI..."
          },
          "warning": "Tokens are single-use and expire quickly. Don’t cache or batch them; solve once per protected call.",
          "listPrice": {
            "creditsPerSolve": 20,
            "usdPer1000": 2.0
          }
        }
      },
      "ForterSolveRequest": {
        "type": "object",
        "title": "Forter",
        "description": "Get Forter tokens and replay them on the site’s next request.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "forter",
              "forter_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "forterSiteId": {
            "type": "string",
            "description": "Forter site ID. Found on the page if omitted"
          },
          "jsUrl": {
            "type": "string",
            "description": "Forter script URL. Found on the page if omitted"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "forter",
          "name": "Forter",
          "vendor": "Forter",
          "category": "risk",
          "result": "token",
          "gets": "Forter token for the next request",
          "kinds": [
            "forter",
            "forter_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/forter",
          "title": "Forter API Reference",
          "description": "Get Forter tokens and replay them on the site’s next request.",
          "overview": [
            "The Forter product runs the site's Forter loader live and returns the token the protected flow expects on its next request.",
            "The site id and JS bundle are discovered from the page; forterSiteId and jsUrl are optional annotations for deployments where they are known and not statically discoverable.",
            "CDN-alias deployments whose loader host never appears on the page do not boot without jsUrl - pass it for that class of site."
          ],
          "usingResult": [
            "Send the token where the site expects it, with the returned `userAgent` and from the same IP as the solve. Tokens are short-lived, so use them right away.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "Forter token for the site’s next request"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "6F7G8H9I0J1K2L3M4N5O6P7Q8..."
          },
          "listPrice": {
            "creditsPerSolve": 20,
            "usdPer1000": 2.0
          }
        }
      },
      "RiskifiedSolveRequest": {
        "type": "object",
        "title": "Riskified",
        "description": "Collect Riskified beacon cookies and replay them.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "riskified",
              "riskified_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "riskified",
          "name": "Riskified",
          "vendor": "Riskified",
          "category": "risk",
          "result": "cookie",
          "gets": "Riskified cookies",
          "kinds": [
            "riskified",
            "riskified_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/riskified",
          "title": "Riskified API Reference",
          "description": "Collect Riskified beacon cookies and replay them.",
          "overview": [
            "Returns the Riskified cookies (`rCookie`, `rskxRunCookie`, `lastRskxRun`; names vary by merchant)."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests to the merchant origin, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "Empty — Riskified's merchant-specific family has no single load-bearing cookie; replay cookies/cookieHeader instead"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "",
            "cookies": {
              "rCookie": "7G8H9I0J1K2L3M4N5O6P7Q8R9",
              "rskxRunCookie": "rskx-run..."
            },
            "cookieHeader": "rCookie=7G8H9I0J1K2L3M4N5O6P7Q8R9; rskxRunCookie=rskx-run..."
          },
          "listPrice": {
            "creditsPerSolve": 20,
            "usdPer1000": 2.0
          }
        }
      },
      "ThreatmetrixSolveRequest": {
        "type": "object",
        "title": "ThreatMetrix",
        "description": "Bind a ThreatMetrix device profile to your session ID.",
        "required": [
          "kind",
          "url",
          "threatMetrixOrgId",
          "threatMetrixSessionId"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "threatmetrix",
              "threatmetrix_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "threatMetrixOrgId": {
            "type": "string",
            "description": "Your ThreatMetrix org ID: the account the profile binds to"
          },
          "threatMetrixSessionId": {
            "type": "string",
            "description": "Session ID to bind the profile to. Send the same ID with the protected call"
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "threatmetrix",
          "name": "ThreatMetrix",
          "vendor": "ThreatMetrix",
          "category": "risk",
          "result": "token",
          "gets": "Your session ID, bound to a profile",
          "kinds": [
            "threatmetrix",
            "threatmetrix_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/threatmetrix",
          "title": "ThreatMetrix API Reference",
          "description": "Bind a ThreatMetrix device profile to your session ID.",
          "overview": [
            "Runs ThreatMetrix device profiling and binds the profile to the session ID you supply. No domain input is needed.",
            "There’s no token to replay: after the solve, send the same session ID with your protected call."
          ],
          "usingResult": [
            "Send the same session ID with the protected login or payment call. ThreatMetrix scores it against the profile bound during the solve.",
            "The profile is bound to the solving browser's fingerprint and egress IP — send the protected call from the same egress. Profiles accumulate trust server-side; a session id solved seconds ago starts with minimal history.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "Your session ID, echoed once the profile is bound"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "YOUR_TRANSACTION_SESSION_ID"
          },
          "listPrice": {
            "creditsPerSolve": 15,
            "usdPer1000": 1.5
          }
        }
      },
      "VercelChallengeSolveRequest": {
        "type": "object",
        "title": "Vercel Challenge",
        "description": "Pass Vercel’s attack challenge and replay the clearance cookies.",
        "required": [
          "kind",
          "url"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "vercel_challenge",
              "vercel_challenge_proxy"
            ],
            "description": "Solve kind. `*_proxy` kinds solve through your own `proxy`; the others use Captcha.fun's own IPs."
          },
          "url": {
            "type": "string",
            "description": "Page URL where the challenge appears."
          },
          "proxy": {
            "type": "string",
            "description": "For `_proxy` kinds only: your proxy as `host:port` or `host:port:username:password`. Ignored by non-proxy kinds. If a `_proxy` kind is sent with no proxy, Captcha.fun's own IPs are used."
          },
          "platform": {
            "type": "string",
            "enum": [
              "windows",
              "mac"
            ],
            "default": "windows",
            "description": "Requested platform label: `windows` (default) or `mac`."
          }
        },
        "x-captchafun": {
          "slug": "vercel-challenge",
          "name": "Vercel Challenge",
          "vendor": "Vercel",
          "category": "anti-bot",
          "result": "cookie",
          "gets": "Clearance cookies",
          "kinds": [
            "vercel_challenge",
            "vercel_challenge_proxy"
          ],
          "docsUrl": "https://www.captcha.fun/docs/api/vercel-challenge",
          "title": "Vercel Challenge API Reference",
          "description": "Pass Vercel’s attack challenge and replay the clearance cookies.",
          "overview": [
            "Passes Vercel's attack-challenge-mode page and returns the clearance cookie."
          ],
          "usingResult": [
            "Replay cookieHeader as the Cookie header on outbound requests to the protected deployment, with the returned userAgent as your User-Agent header, from the same egress IP as the solve.",
            "Keep your other request headers close to a real browser's — the clearance binds to the solving session's header/TLS fingerprint, not just the user agent and IP.",
            "When using a successful result, preserve the returned `userAgent` as `User-Agent` and `secUa` as `Sec-CH-UA`."
          ],
          "responseFields": [
            {
              "name": "token",
              "type": "string",
              "description": "The _vcrcs clearance cookie value minted by passing the attack-mode checkpoint"
            },
            {
              "name": "cookies",
              "type": "object",
              "description": "The defense cookie family, cookie name to value"
            },
            {
              "name": "cookieHeader",
              "type": "string",
              "description": "The solving session's full Cookie header value, verbatim — replay it with the returned userAgent from the same egress IP"
            }
          ],
          "exampleResponse": {
            "status": "SUCCESS",
            "success": true,
            "userAgent": "RETURNED_USER_AGENT",
            "secUa": "RETURNED_SEC_CH_UA",
            "token": "8H9I0J1K2L3M4N5O6P7Q8R9S0...",
            "cookies": {
              "_vcrcs": "8H9I0J1K2L3M4N5O6P7Q8R9S0..."
            },
            "cookieHeader": "_vcrcs=8H9I0J1K2L3M4N5O6P7Q8R9S0..."
          },
          "listPrice": {
            "creditsPerSolve": 15,
            "usdPer1000": 1.5
          }
        }
      },
      "SolveRequest": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/RecaptchaV3SolveRequest"
          },
          {
            "$ref": "#/components/schemas/RecaptchaV2SolveRequest"
          },
          {
            "$ref": "#/components/schemas/TurnstileSolveRequest"
          },
          {
            "$ref": "#/components/schemas/HcaptchaSolveRequest"
          },
          {
            "$ref": "#/components/schemas/HcaptchaInvisibleSolveRequest"
          },
          {
            "$ref": "#/components/schemas/GeetestSolveRequest"
          },
          {
            "$ref": "#/components/schemas/FriendlyCaptchaSolveRequest"
          },
          {
            "$ref": "#/components/schemas/CaptchafoxSolveRequest"
          },
          {
            "$ref": "#/components/schemas/FuncaptchaInvisibleSolveRequest"
          },
          {
            "$ref": "#/components/schemas/CloudflareWafSolveRequest"
          },
          {
            "$ref": "#/components/schemas/DatadomeSolveRequest"
          },
          {
            "$ref": "#/components/schemas/DatadomeInterstitialSolveRequest"
          },
          {
            "$ref": "#/components/schemas/PerimeterxSolveRequest"
          },
          {
            "$ref": "#/components/schemas/PerimeterxHoldSolveRequest"
          },
          {
            "$ref": "#/components/schemas/PerimeterxInvisibleSolveRequest"
          },
          {
            "$ref": "#/components/schemas/AkamaiAbckSolveRequest"
          },
          {
            "$ref": "#/components/schemas/AkamaiSbsdSolveRequest"
          },
          {
            "$ref": "#/components/schemas/AkamaiSecCptSolveRequest"
          },
          {
            "$ref": "#/components/schemas/KasadaSolveRequest"
          },
          {
            "$ref": "#/components/schemas/KasadaCdSolveRequest"
          },
          {
            "$ref": "#/components/schemas/KasadaTlPayloadSolveRequest"
          },
          {
            "$ref": "#/components/schemas/TmptSolveRequest"
          },
          {
            "$ref": "#/components/schemas/ImpervaSolveRequest"
          },
          {
            "$ref": "#/components/schemas/IncapsulaUtmvcSolveRequest"
          },
          {
            "$ref": "#/components/schemas/Reese84SolveRequest"
          },
          {
            "$ref": "#/components/schemas/AwsWafSolveRequest"
          },
          {
            "$ref": "#/components/schemas/ShapeSolveRequest"
          },
          {
            "$ref": "#/components/schemas/CastleSolveRequest"
          },
          {
            "$ref": "#/components/schemas/ForterSolveRequest"
          },
          {
            "$ref": "#/components/schemas/RiskifiedSolveRequest"
          },
          {
            "$ref": "#/components/schemas/ThreatmetrixSolveRequest"
          },
          {
            "$ref": "#/components/schemas/VercelChallengeSolveRequest"
          }
        ],
        "discriminator": {
          "propertyName": "kind",
          "mapping": {
            "recap_v3": "#/components/schemas/RecaptchaV3SolveRequest",
            "recap_v3_enterprise": "#/components/schemas/RecaptchaV3SolveRequest",
            "recap_v3_proxy": "#/components/schemas/RecaptchaV3SolveRequest",
            "recap_v3_enterprise_proxy": "#/components/schemas/RecaptchaV3SolveRequest",
            "recap_v2": "#/components/schemas/RecaptchaV2SolveRequest",
            "recap_v2_proxy": "#/components/schemas/RecaptchaV2SolveRequest",
            "recap_v2_invis": "#/components/schemas/RecaptchaV2SolveRequest",
            "recap_v2_invis_proxy": "#/components/schemas/RecaptchaV2SolveRequest",
            "recap_v2_enterprise": "#/components/schemas/RecaptchaV2SolveRequest",
            "recap_v2_enterprise_proxy": "#/components/schemas/RecaptchaV2SolveRequest",
            "turnstile": "#/components/schemas/TurnstileSolveRequest",
            "turnstile_proxy": "#/components/schemas/TurnstileSolveRequest",
            "hcaptcha": "#/components/schemas/HcaptchaSolveRequest",
            "hcaptcha_proxy": "#/components/schemas/HcaptchaSolveRequest",
            "hcaptcha_invis": "#/components/schemas/HcaptchaInvisibleSolveRequest",
            "hcaptcha_invis_proxy": "#/components/schemas/HcaptchaInvisibleSolveRequest",
            "geetest": "#/components/schemas/GeetestSolveRequest",
            "geetest_proxy": "#/components/schemas/GeetestSolveRequest",
            "friendly_captcha": "#/components/schemas/FriendlyCaptchaSolveRequest",
            "friendly_captcha_proxy": "#/components/schemas/FriendlyCaptchaSolveRequest",
            "captchafox": "#/components/schemas/CaptchafoxSolveRequest",
            "captchafox_proxy": "#/components/schemas/CaptchafoxSolveRequest",
            "funcaptcha_invis": "#/components/schemas/FuncaptchaInvisibleSolveRequest",
            "funcaptcha_invis_proxy": "#/components/schemas/FuncaptchaInvisibleSolveRequest",
            "cf_waf": "#/components/schemas/CloudflareWafSolveRequest",
            "cf_waf_proxy": "#/components/schemas/CloudflareWafSolveRequest",
            "datadome": "#/components/schemas/DatadomeSolveRequest",
            "datadome_proxy": "#/components/schemas/DatadomeSolveRequest",
            "datadome_interstitial": "#/components/schemas/DatadomeInterstitialSolveRequest",
            "datadome_interstitial_proxy": "#/components/schemas/DatadomeInterstitialSolveRequest",
            "perimeterx": "#/components/schemas/PerimeterxSolveRequest",
            "perimeterx_proxy": "#/components/schemas/PerimeterxSolveRequest",
            "perimeterx_hold": "#/components/schemas/PerimeterxHoldSolveRequest",
            "perimeterx_hold_proxy": "#/components/schemas/PerimeterxHoldSolveRequest",
            "perimeterx_invisible": "#/components/schemas/PerimeterxInvisibleSolveRequest",
            "perimeterx_invisible_proxy": "#/components/schemas/PerimeterxInvisibleSolveRequest",
            "akamai_abck": "#/components/schemas/AkamaiAbckSolveRequest",
            "akamai_abck_proxy": "#/components/schemas/AkamaiAbckSolveRequest",
            "akamai_sbsd": "#/components/schemas/AkamaiSbsdSolveRequest",
            "akamai_sbsd_proxy": "#/components/schemas/AkamaiSbsdSolveRequest",
            "akamai_sec_cpt": "#/components/schemas/AkamaiSecCptSolveRequest",
            "akamai_sec_cpt_proxy": "#/components/schemas/AkamaiSecCptSolveRequest",
            "kasada": "#/components/schemas/KasadaSolveRequest",
            "kasada_proxy": "#/components/schemas/KasadaSolveRequest",
            "kasada_cd": "#/components/schemas/KasadaCdSolveRequest",
            "kasada_cd_proxy": "#/components/schemas/KasadaCdSolveRequest",
            "kasada_tl_payload": "#/components/schemas/KasadaTlPayloadSolveRequest",
            "kasada_tl_payload_proxy": "#/components/schemas/KasadaTlPayloadSolveRequest",
            "tmpt": "#/components/schemas/TmptSolveRequest",
            "tmpt_proxy": "#/components/schemas/TmptSolveRequest",
            "imperva": "#/components/schemas/ImpervaSolveRequest",
            "imperva_proxy": "#/components/schemas/ImpervaSolveRequest",
            "incapsula_utmvc": "#/components/schemas/IncapsulaUtmvcSolveRequest",
            "incapsula_utmvc_proxy": "#/components/schemas/IncapsulaUtmvcSolveRequest",
            "reese84": "#/components/schemas/Reese84SolveRequest",
            "reese84_proxy": "#/components/schemas/Reese84SolveRequest",
            "aws_waf": "#/components/schemas/AwsWafSolveRequest",
            "aws_waf_proxy": "#/components/schemas/AwsWafSolveRequest",
            "shape": "#/components/schemas/ShapeSolveRequest",
            "shape_proxy": "#/components/schemas/ShapeSolveRequest",
            "castle": "#/components/schemas/CastleSolveRequest",
            "castle_proxy": "#/components/schemas/CastleSolveRequest",
            "forter": "#/components/schemas/ForterSolveRequest",
            "forter_proxy": "#/components/schemas/ForterSolveRequest",
            "riskified": "#/components/schemas/RiskifiedSolveRequest",
            "riskified_proxy": "#/components/schemas/RiskifiedSolveRequest",
            "threatmetrix": "#/components/schemas/ThreatmetrixSolveRequest",
            "threatmetrix_proxy": "#/components/schemas/ThreatmetrixSolveRequest",
            "vercel_challenge": "#/components/schemas/VercelChallengeSolveRequest",
            "vercel_challenge_proxy": "#/components/schemas/VercelChallengeSolveRequest"
          }
        },
        "description": "Request body for POST /v1/request. The `kind` value selects the product and its fields."
      },
      "SolveCreated": {
        "type": "object",
        "required": [
          "id",
          "message"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Solve id. Pass it to GET /v2/response/{id} (or /v1/response/{id})."
          },
          "message": {
            "type": "string",
            "example": "Started Solving"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "required": [
          "message"
        ],
        "properties": {
          "message": {
            "type": "string",
            "description": "Human-readable error."
          }
        },
        "example": {
          "message": "invalid kind"
        }
      },
      "GeeTestResult": {
        "type": "object",
        "description": "GeeTest only. v4 returns lot_number/captcha_output/pass_token/gen_time; v3 returns geetest_challenge/geetest_validate/geetest_seccode.",
        "properties": {
          "lot_number": {
            "type": "string"
          },
          "captcha_output": {
            "type": "string"
          },
          "pass_token": {
            "type": "string"
          },
          "gen_time": {
            "type": "string"
          },
          "geetest_challenge": {
            "type": "string"
          },
          "geetest_validate": {
            "type": "string"
          },
          "geetest_seccode": {
            "type": "string"
          }
        }
      },
      "SolveResult": {
        "type": "object",
        "required": [
          "status",
          "success"
        ],
        "description": "Result of a solve. Which fields are populated depends on the product's result family: token, cookie, or headers.",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "PENDING",
              "SUCCESS",
              "FAILURE"
            ],
            "description": "`PENDING` while solving, then `SUCCESS` or `FAILURE`. Reporting a rejected result does not change the status returned by result reads."
          },
          "success": {
            "type": "boolean",
            "description": "Whether the solve succeeded."
          },
          "userAgent": {
            "type": "string",
            "description": "Value to send as `User-Agent` when using the result. Preserve it exactly."
          },
          "secUa": {
            "type": "string",
            "description": "Value to send as `Sec-CH-UA` when using the result."
          },
          "token": {
            "type": "string",
            "description": "Primary deliverable: a captcha token, or the load-bearing cookie's bare value for cookie-family products. Empty for header-family and GeeTest results."
          },
          "cookies": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Cookie-family products: the defense cookie family, name to value."
          },
          "cookieHeader": {
            "type": "string",
            "description": "Cookie-family products: full Cookie header value to replay verbatim with the returned `userAgent`."
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Header-family products (shape, kasada, kasada_cd, kasada_tl_payload): headers to replay verbatim."
          },
          "body": {
            "type": "string",
            "description": "kasada_tl_payload only: base64-encoded body of the captured `POST /tl` request."
          },
          "url": {
            "type": "string",
            "description": "kasada_tl_payload only: exact URL of the captured `POST /tl` request."
          },
          "geetest": {
            "$ref": "#/components/schemas/GeeTestResult"
          },
          "message": {
            "type": "string",
            "description": "Failure reason. Omitted on success."
          }
        }
      },
      "SolveResultV2": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SolveResult"
          },
          {
            "type": "object",
            "required": [
              "ready"
            ],
            "properties": {
              "ready": {
                "type": "boolean",
                "description": "`true` when the solve is finished (success or failure)."
              }
            }
          }
        ]
      },
      "ReportResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "example": "Reported Successfully"
          }
        }
      },
      "StatsResponse": {
        "type": "object",
        "properties": {
          "credits": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Remaining credits on the account."
          },
          "success": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Number of successful solves."
          },
          "failures": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Number of failed solves."
          }
        },
        "example": {
          "credits": 100000,
          "success": 10000,
          "failures": 20
        }
      },
      "Product": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Product slug; equals the base `kind` (without `_proxy`)."
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "defaultCreditCost": {
            "type": "integer",
            "format": "uint64",
            "description": "Default credits charged per successful solve. Credits per solve ÷ 10 = USD per 1,000 solves (10 credits = $1.00 per 1,000)."
          }
        }
      },
      "ProductsResponse": {
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Product"
            }
          }
        }
      }
    }
  }
}
