Several Cloudflare Turnstile widgets on one page
This page carries two Cloudflare Turnstile widgets, each in its own form: a newsletter form with the action demo_newsletter and a contact form with the action demo_contact. Each form gets its own token, and each token is checked on its own.
The widgets
LiveThis widget's settings
0x4AAAAAAFMVDQUY9ZAPO0ni- Mode
- managed
- Appearance
- always
- Size
- normal
- Rendering
- implicit
- Action
- demo_newsletter, demo_contact
- Task
- TurnstileTaskProxyless
The verdict
The token goes to this site's API, which asks Cloudflare's siteverify with the widget's secret key. The reply is shown as it came.
No token checked yet
Solve the widget and press Verify, or paste a token a task returned for this page.
- success
- not checked yet
- hostname
- not checked yet
- challenge_ts
- not checked yet
- action
- not checked yet
- cdata
- not checked yet
- error-codes
- not checked yet
- Widget
- not checked yet
- Round trip
- not checked yet
What the error codes mean
The token you checked
Solve this page with the API
The complete createTask request for this page, then getTaskResult every 2 seconds until it is ready, then the result used as the page uses it. Set ZEROCAPTCHA_KEY to your API key.
- type
- TurnstileTaskProxyless, or TurnstileTask with your proxy
- websiteURL
- https://zerocaptcha.io/captcha-test/cloudflare-turnstile-multiple-widgets
- websiteKey
- 0x4AAAAAAFMVDQUY9ZAPO0ni
- metadata.action
- demo_newsletter
- metadata.cdata
- This widget sets none
- proxy
- Only with TurnstileTask: http://user:pass@host:port
- callbackUrl
- Optional: called with the result when the task ends
- Idempotency-Key
- A header: sent again within 24 hours, it returns the first task
A task is charged at the listed price when it succeeds; a failed one costs nothing. The same task over REST, POST /v1/tasks, is inSolving Cloudflare Turnstile.
What this widget is
A page may render as many widgets as it has forms. Each gets its own widget ID and its own hidden cf-turnstile-response field inside its form, and each token is valid only for the form, and the action, it was solved for.
Widgets on one page often share a sitekey, as these do, and differ by action. A task needs the action of the form you will submit.
Bring a token from elsewhere: the Cloudflare Turnstile token checker.
How to use the result
The task's result is a token: the same value a browser puts in the form's hidden cf-turnstile-response field. Send it where the page's own form sends it, in the same field. On this page that is the check at the top, beside the widget, which asks Cloudflare's siteverify about it with this widget's secret and shows the verdict; a task's token goes in its token box.
A token passes siteverify once, within 300 seconds of the solve. Use it straight away, and solve again for the next submission rather than reusing one.
Solve once per form you submit, with that form's action, and put each token in its own form's field.
How to recognise it on a real site
More than one cf-turnstile element, or several turnstile.render() calls. Match the widget to the form by position, and by its data-action.
The page loads https://challenges.cloudflare.com/turnstile/v0/api.js, the only script Cloudflare supports: it must not be copied, proxied or cached.
The widget itself is an iframe from challenges.cloudflare.com, under /cdn-cgi/challenge-platform/. Its requests go to Cloudflare, never to the site.
Inside a form, the widget adds a hidden input named cf-turnstile-response and puts the token there. The site's server checks it with POST https://challenges.cloudflare.com/turnstile/v0/siteverify.
No cookie is set on the site's own domain: the widget's state lives in Cloudflare's iframe.
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<div class="cf-turnstile" data-sitekey="0x4AAAAAAFMVDQUY9ZAPO0ni" data-action="demo_newsletter"></div>
<div class="cf-turnstile" data-sitekey="0x4AAAAAAFMVDQUY9ZAPO0ni" data-action="demo_contact"></div>
<!-- once solved: <input type="hidden" name="cf-turnstile-response" value="…"> -->Several widgets questions
Which ZeroCaptcha task solves the Cloudflare Turnstile widgets on a page with several?
TurnstileTaskProxyless, or TurnstileTask to solve through your own proxy, with the page's URL and its sitekey, plus action and cdata when the widget sets them. The same task solves every Cloudflare Turnstile widget, whatever its mode or appearance.
Can one token serve two widgets?
No. A token passes siteverify once, and the site may check its action. Solve once for each form, with that form's action.