TurnstileTokenProxyLess
Solve a standalone Cloudflare Turnstile widget and get a token to submit with your form. No proxy required.
Turnstile is the widget you see sitting in a form, usually as a checkbox or a quiet "Verifying…" box. This task solves that widget and returns a token you post with the form.
Use this variant when the widget is embedded in a normal page you can already load. Nothing is blocking you; you just cannot submit the form without a token.
This is the variant to reach for by default. Turnstile does not check the solver's IP, so sending a proxy makes the solve slower and adds a second thing that can fail without making it any more likely to succeed. Only move to TurnstileToken if the receiving site turns out to tie the token to your address.
Which Cloudflare task do I need?
The Cloudflare tasks look similar and are not interchangeable. Pick by what you are actually looking at:
| What you see | Task |
|---|---|
| A widget in a form on a page that loads normally | TurnstileTokenProxyLess (this one) |
| The same, but the site rejects tokens solved from another IP | TurnstileToken |
| "Just a moment…" instead of the page | CloudflareChallengeCookie |
The page loads fine but sets cf_clearance silently in the background | CloudflareJsdCookie |
| A queue page saying you are in line | CloudflareWaitingRoom |
Finding the site key
Open devtools and look at the widget's container:
<div class="cf-turnstile" data-sitekey="0x4AAAAAAADnPIDROrmt1Wwj"></div>data-sitekey is your websiteKey. Site keys always begin with 0x. The test keys Cloudflare publishes (1x00000000000000000000AA and friends) always pass, so they are useful for wiring up an integration but prove nothing about a real site.
If the page has no cf-turnstile element, it renders explicitly instead and the key is in the script:
turnstile.render('#container', { sitekey: '0x4AAAAAAADnPIDROrmt1Wwj' });pageAction and data
Both are optional here, and only apply if the widget declares them:
<div
class="cf-turnstile"
data-sitekey="0x4AAAAAAADnPIDROrmt1Wwj"
data-action="login"
data-cdata="7fab0000b0e0ff00"
></div>data-action is pageAction, data-cdata is data. Send them exactly as written when present. A verifier that checks the action rejects a token solved for a different one, so guessing is worse than omitting.
pageData does not apply to a standalone widget. It only exists on full challenge pages.
Using the token
The token goes into the form field Turnstile created, and is submitted with the rest of the form:
<input name="cf-turnstile-response" value="0.abcdefg…" />Some pages define a callback in turnstile.render instead and never create the field, in which case the token is whatever that callback expects.
Tokens are single-use and short-lived
A Turnstile token is valid for about five minutes and can be redeemed once. Solve it as part of the request you are about to make, not in advance and not into a pool.
When to switch to the proxy variant
Only when tokens solved here come back valid and the site rejects them, while the same flow works by hand from
the browser you would be proxying through. That means it is pairing the token with the address redeeming it. Switch
to TurnstileToken and send the proxy you will submit the form through. A solve that
fails outright is not this, and a proxy will not fix it.
Supported Providers
| Provider | Price per 1,000 | Routing |
|---|---|---|
| $1.20 | ||
| $1.45 | ||
| $2.00 | ||
| $1.30 | ||
| $0.60 | ||
| $0.80 | ||
| $1.00 | ||
| $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: |
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: |
{ "clientKey": "your-api-key-from-dashboard", "task": { "type": "TurnstileTokenProxyLess", "websiteURL": "https://2captcha.com/demo/cloudflare-turnstile", "websiteKey": "1x00000000000000000000AA" }}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). |