TurnstileToken
Solve a Cloudflare Turnstile widget through your own proxy. Only needed when the site itself ties the token to your address.
The same widget as TurnstileTokenProxyLess, solved through a proxy you supply.
Use the proxyless variant unless you have a reason not to
Turnstile does not check the solver's IP, so a proxy buys you nothing on an ordinary widget. It makes the solve
slower and less stable, since it now depends on your proxy being healthy as well as on the widget.
TurnstileTokenProxyLess is the default worth starting from.
When this is actually the right task
Turnstile itself is indifferent to where the solve came from. What is not indifferent is the site receiving the token: some verify server-side that the address redeeming a token is the one that earned it, usually by pairing the token with a session or a clearance cookie.
So the symptom that justifies this task is specific. The solve succeeds, you get a token, and the site rejects it, while the same flow works by hand from the browser you are proxying through. If the solve itself fails instead, the proxy is not the problem, and the cause is normally the site key, the action, or a challenge page being mistaken for a standalone widget.
Send the same proxy you will submit the form through. Using one exit for the solve and another for the request puts you back where you started, so this task is only worth its cost when both halves match.
Rotating proxies defeat the purpose
Use a static or sticky exit. A rotating endpoint can hand the solve one address and your submission another, which is indistinguishable from a stolen token.
Parameters
websiteURL, websiteKey, pageAction and data behave exactly as in TurnstileTokenProxyLess, including where to find each one on the page.
userAgent is worth sending here, because it is part of the same coherence check as the exit address. Send the agent your own client will use.
If a challenge page is what you are facing
A widget on a page you can load is Turnstile. A full-page "Just a moment…" interstitial is a different mechanism,
even though a Turnstile widget is rendered inside it. That is
CloudflareChallengeCookie.
Supported Providers
| Provider | Price per 1,000 | Routing |
|---|---|---|
| $1.45 | ||
| $2.00 | ||
| $1.30 | ||
| $1.00 | ||
| $0.80 | ||
| $0.80 | ||
| $0.10 | ||
| $0.10 |
Request Schema
| Field | Type | Required | Description |
|---|---|---|---|
clientKey* | string | Yes | Your API key. Create one in the AnySolver dashboard. Example: |
task* | object | Yes | The task body. Required fields depend on the task type. See Tasks for per-task schemas. View task properties |
settings | object | No | Per-request settings for routing, auto retry, auto fallback, and proxy behavior. See Routing Strategies. View settings reference |
Task Object Properties
The task field accepts an object with the following properties:
| Field | Type | Required | Description |
|---|---|---|---|
type* | Yes | ||
websiteURL* | URL | Yes | Full URL of the page where the CAPTCHA is displayed. Example: |
websiteKey* | string | Yes | The site key found in the CAPTCHA HTML element on the target page. Example: |
proxy* | string | object | Yes | |
pageAction | string | No | Action value passed to turnstile.render() or defined in the widget attributes, such as managed or login. This is especially important on Cloudflare challenge pages. Example: |
data | string | No | Custom data value from the widget configuration, also exposed as cData in Cloudflare challenge flows. Copy it exactly from turnstile.render() or the data-cdata attribute. Example: |
pageData | string | No | Challenge page payload passed as chlPageData in Cloudflare-managed challenge flows. It is usually required only when solving the full Cloudflare challenge page variant. Example: |
userAgent | string | No | Browser User-Agent string. Must match the browser used on the target page. Not all providers properly support this parameter. Verify the compatibility with the provider you are using. Example: |
Optional fields are not guaranteed across providers
Response Schema
| Field | Type | Required | Description |
|---|---|---|---|
status* | Yes | Task status: "processing", "ready", or "failed". Example: | |
errorId* | Yes | 0 = success, 1 = external error, 2 = internal error. Example: | |
taskId | string | No | Unique identifier returned when the task was created. Example: |
errorCode | No | Machine-readable error code. Example: | |
errorDescription | string | No | Human-readable error message with resolution hints. Example: |
cost | number | No | Actual cost charged for this task in USD. Example: |
taskType | No | The type of CAPTCHA task to solve. Example: | |
provider | No | Provider that handled this task. While processing, the provider currently solving it. Example: | |
solution | object | No |
Solution Object Properties
The solution field contains an object with the following properties:
| Field | Type | Required | Description |
|---|---|---|---|
token* | string | Yes | The solved CAPTCHA token to submit with your form. Example: |
raw* | Record<string, unknown> | Yes | Raw provider response data for advanced use cases. |
userAgent | string | No | User-Agent string used during solving (if applicable). |