Cloudflare Turnstile error codes
Turnstile reports failures as numeric client-side codes and as string error codes from siteverify. This is what each one means and what to change.
Turnstile error 300030Error 300030 means a Turnstile widget mounted and then stopped responding. The real causes, the codes it gets confused with, and the fixes.Turnstile timeout-or-duplicate errorsiteverify returns timeout-or-duplicate when a Turnstile token is verified twice or is older than 300 seconds. The causes, and how to fix each one.Turnstile callback not firingWhy the Turnstile success callback never runs: implicit rendering, callbacks not on window, hidden containers and SPA remounts.Cloudflare Turnstile error 600010Turnstile error 600010 is a generic challenge failure in the 600* family. What Cloudflare documents, the reproduced causes, and how to fix it.cf-turnstile-response invalidWhy cf-turnstile-response arrives empty or gets rejected by siteverify, what each error code means, and the exact request shape to send.Turnstile stuck on "Verifying you are human"Why Turnstile hangs on "Verifying you are human": how to read the error code, plus fixes for CSP, clock skew, blocked domains and headless CI.
How Turnstile reports errors
Turnstile surfaces problems in two different places, and knowing which one you are looking at narrows the cause immediately.
Numeric codes in the browser come from the widget itself — rendering, configuration and network problems. They reach you through the error-callback and the browser console.
String codes such as timeout-or-duplicate come from siteverify, the server-side validation endpoint. Those are about the token you submitted, not about the widget.
Related
Automating a gate you own or are authorised to test?
// SolveGate clears Cloudflare Turnstile and WAF challenges through one REST call · first 1,000 solves free