12 KiB
Turnstile Error Codes Reference
Complete error code reference with troubleshooting
Official Docs: https://developers.cloudflare.com/turnstile/troubleshooting/client-side-errors/error-codes/
Error Code Families
Error codes use the format XXXYYY where:
XXX= Error family (indicates general category)YYY= Specific error (internal use, often marked***in docs)
Note: When *** appears, the last 3 digits can be ignored.
100*** - Initialization Problems
Error: Problem initializing Turnstile before challenge could start
Retry: No
Cause: Usually caused by:
- Old instance of solved challenge still present
- Page state corruption
- Cache issues
Solution:
- Reload the page
- Clear browser cache
- Reset Turnstile widget programmatically
- On continuous failures → likely automated device
102***, 103***, 104***, 106*** - Invalid Parameters
Error: Visitor sent invalid parameter as part of challenge
Retry: Yes
Cause:
- Malformed request data
- Corrupted challenge parameters
- Browser/extension interference
Solution:
- Retry the challenge automatically
- On continuous failures → likely bot
- Implement
error-callbackwith retry logic - Verify visitor authenticity by other means
105*** - API Compatibility
Error: Turnstile invoked in deprecated or invalid way
Retry: No
Cause:
- Using outdated API methods
- Invalid widget configuration
- Script version mismatch
Solution:
- Check official Turnstile documentation
- Refresh page to get latest script version
- Review widget initialization code
- Ensure
api.jsloads from Cloudflare CDN
110100, 110110 - Invalid Sitekey
Error: Turnstile invoked with invalid or inactive sitekey
Retry: No
Cause:
- Sitekey doesn't exist
- Sitekey was deleted
- Typo in sitekey
- Using wrong sitekey for environment
Solution:
- Verify sitekey in Cloudflare Dashboard
- Check sitekey is still active
- Ensure no typos in configuration
- Use correct sitekey for environment (dev/prod)
Example:
// ❌ Wrong
const SITE_KEY = '1x00000000000000000000AA' // Test key in production
// ✅ Correct
const SITE_KEY = process.env.TURNSTILE_SITE_KEY
110200 - Unknown Domain
Error: Domain not allowed for this widget
Retry: No
Cause:
- Current hostname not in widget's allowed domains list
- Using production widget on localhost
- Subdomain not added to allowlist
Solution:
- Add domain to allowed list in Cloudflare Dashboard
- For localhost: add
localhostor use test sitekey1x00000000000000000000AA - Check subdomain matches exactly (www.example.com ≠ example.com)
Example Allowed Domains:
example.com
www.example.com
localhost # For development
127.0.0.1 # For development
110420 - Invalid Action
Error: Unsupported or incorrectly formatted action submitted
Retry: No
Cause:
- Action contains invalid characters
- Action exceeds 32 character limit
- Non-alphanumeric characters (except
-and_)
Solution:
- Use only
a-z,A-Z,0-9,-,_ - Keep action ≤ 32 characters
- Example valid actions:
login,signup,contact-form
Reference: https://developers.cloudflare.com/turnstile/get-started/client-side-rendering/#configurations
110430 - Invalid cData
Error: Custom data (cData) format invalid
Retry: No
Cause:
- cData contains invalid characters
- cData exceeds 255 character limit
Solution:
- Keep cData ≤ 255 characters
- Use JSON.stringify() for objects
- Validate data before passing to Turnstile
Example:
// ❌ Wrong - too long
const cdata = JSON.stringify({ /* 300+ chars */ })
// ✅ Correct
const cdata = JSON.stringify({ userId: '123', sessionId: 'abc' })
110500 - Unsupported Browser
Error: Visitor using unsupported browser
Retry: No
Cause:
- Internet Explorer (not supported)
- Very outdated browser version
- Browser without required APIs
Solution:
- Encourage visitor to upgrade browser
- Provide alternative verification method
- Display browser upgrade message
Supported Browsers: https://developers.cloudflare.com/cloudflare-challenges/reference/supported-browsers/
110510 - Inconsistent User-Agent
Error: Visitor provided inconsistent user-agent during challenge
Retry: No
Cause:
- Browser extensions spoofing user-agent
- Privacy tools modifying headers
- Browser settings
Solution:
- Ask visitor to disable user-agent spoofing extensions
- Disable privacy tools temporarily
- Try different browser
11060* - Challenge Timed Out
Error: Visitor took too long to solve challenge
Retry: Yes
Cause:
- Slow network connection
- System clock set incorrectly
- Visitor distracted/inactive
Solution:
- Retry the challenge
- Check system clock is correct
- Improve network connection
11062* - Interactive Challenge Timeout
Error: Visitor didn't interact with checkbox (visible mode only)
Retry: Yes
Cause:
- Challenge became outdated while waiting for interaction
- User abandoned form
- Long delays between rendering and submission
Solution:
- Reset widget programmatically
- Re-initialize widget
- Prompt user to interact
Example:
{
'timeout-callback': () => {
turnstile.reset(widgetId)
alert('Please complete the verification')
}
}
120*** - Internal Cloudflare Errors
Error: Internal debugging errors (Cloudflare employees only)
Retry: N/A
Solution: Only encountered by Cloudflare Support during debugging.
200010 - Invalid Caching
Error: Some portion of Turnstile was accidentally cached
Retry: No
Cause:
- Browser cached Turnstile resources incorrectly
- CDN/proxy caching
api.jsscript
Solution:
- Clear browser cache
- Hard refresh (Ctrl+Shift+R or Cmd+Shift+R)
- Ensure
api.jsis not proxied or cached
CRITICAL: Never proxy or cache https://challenges.cloudflare.com/turnstile/v0/api.js
200100 - Time Problem
Error: Visitor's system clock is incorrect
Retry: No
Cause:
- System time is wrong
- Timezone misconfigured
- Date/time not synchronized
Solution:
- Set system clock to correct time
- Enable automatic time synchronization
- Check timezone settings
200500 - Loading Error
Error: iframe under challenges.cloudflare.com could not be loaded
Retry: No
Cause:
- Content Security Policy (CSP) blocking iframe
- Browser security settings blocking 3rd-party iframes
- Network firewall blocking challenges.cloudflare.com
Solution:
- Add CSP directives:
<meta http-equiv="Content-Security-Policy" content=" script-src 'self' https://challenges.cloudflare.com; frame-src 'self' https://challenges.cloudflare.com; connect-src 'self' https://challenges.cloudflare.com; "> - Reduce browser security preferences
- Check firewall/network settings
Most Common Cause: CSP blocking. See check-csp.sh script.
300*** - Generic Client Execution Error
Error: Unspecified error occurred while visitor solved challenge
Retry: Yes
Cause:
- Browser extension interference
- JavaScript errors on page
- Memory issues
- Network interruption
Solution:
- Retry automatically
- On continuous failures → potentially automated visitor
- Disable browser extensions
- Try incognito/private mode
Known Issue (2025): Safari 18 + macOS 15 with "Hide IP" enabled causes Error 300010.
Safari Fix: Settings → Privacy → Hide IP address → Off
Source: https://community.cloudflare.com/t/turnstile-is-frequently-generating-300x-errors/700903
300030 - Widget Crash
Error: Widget crashed for legitimate users
Retry: Yes
Cause: Unknown - Cloudflare-side issue (2025)
Solution:
- Implement robust error handling
- Retry with exponential backoff
- Provide fallback verification method
Example:
let retryCount = 0
const maxRetries = 3
turnstile.render('#container', {
sitekey: SITE_KEY,
'error-callback': (error) => {
if (error.includes('300030') && retryCount < maxRetries) {
retryCount++
setTimeout(() => {
turnstile.reset(widgetId)
}, 2000 * retryCount) // Exponential backoff
} else {
showFallbackVerification()
}
}
})
Source: https://community.cloudflare.com/t/turnstile-is-frequently-generating-300x-errors/700903
400020 - Invalid Sitekey (Server)
Error: Sitekey is invalid or does not exist
Retry: No
Cause: Same as 110100/110110 but caught server-side
Solution: Verify sitekey exists and is active
400030 - Invalid Size
Error: Provided size option is not valid
Retry: No
Cause: Using invalid size parameter
Valid Options: normal, compact, flexible
Solution:
// ❌ Wrong
{ size: 'large' }
// ✅ Correct
{ size: 'compact' }
400040 - Invalid Theme
Error: Provided theme is not valid
Retry: No
Cause: Using invalid theme parameter
Valid Options: light, dark, auto
Solution:
// ❌ Wrong
{ theme: 'custom' }
// ✅ Correct
{ theme: 'dark' }
401 - Unauthorized (Expected)
Error: 401 error in browser console during challenge
Retry: N/A
Cause: Turnstile requesting Private Access Token (not supported by all devices/browsers)
Solution: Ignore this error - it's expected behavior
Note: If widget is successfully resolving and generating tokens, no action required.
Source: https://developers.cloudflare.com/turnstile/troubleshooting/client-side-errors/error-codes/
600*** - Challenge Execution Failure
Error: Visitor failed to solve Turnstile challenge
Retry: Yes
Cause:
- Suspected bot behavior
- Challenge signals indicate automation
- Failing test sitekey (intentional)
Solution:
- Retry automatically
- On continuous failures → likely bot
- Verify visitor by other means
- Consider alternative verification
Testing: Test sitekey 2x00000000000000000000AB always fails with this error.
600010 - Configuration Error
Error: Widget configuration error
Retry: Depends
Cause:
- Missing hostname in allowlist (most common)
- Hostname was deleted from configuration
- Widget misconfigured
Solution:
- Check Cloudflare Dashboard → Turnstile → Widget Settings
- Verify hostname in allowed domains
- Re-add hostname if missing
Known Issue: Hostnames sometimes disappear from dashboard configuration
Source: https://community.cloudflare.com/t/repeated-cloudflare-turnstile-error-600010/644578
Browser-Specific Issues
Brave Browser - Confetti Animation Failure (2025)
Error: Verification fails during success animation
Cause: Brave shields block animation scripts
Solution: Handle success callback before animation completes
Source: https://github.com/brave/brave-browser/issues/45608
Troubleshooting Checklist
When encountering errors:
-
Check Error Code Family
- 100*: Initialization → Reload page
- 110*: Configuration → Check sitekey, domain allowlist
- 200*: Client issues → Check cache, CSP, system clock
- 300*: Execution → Retry, check browser compatibility
- 400*: Invalid input → Fix configuration
- 600*: Challenge failure → Check for bot-like behavior
-
Common Fixes
- Clear browser cache
- Disable browser extensions
- Try incognito/private mode
- Check CSP headers
- Verify system clock
- Use test sitekey for development
-
Network/Firewall
- Ensure
challenges.cloudflare.comis accessible - Check for VPN/proxy interference
- Verify no firewall blocking
- Ensure
-
Code Review
- Server-side validation implemented?
- Token expiration handled?
- Error callbacks configured?
- Using latest
api.jsfrom CDN?
Last Updated: 2025-10-22 Most Common Errors: 110200 (domain), 200500 (CSP), 300030 (crash), 600010 (config)