API
Use the Cloudflare API for programmatic widget management and automation.
Before you begin, you must have:
- A Cloudflare API token with 
Account:Turnstile:Editpermissions - An account ID found in your Cloudflare dashboard
 
Required API token permissions
 
At least one of the following token permissions 
is required:
Turnstile Sites WriteAccount Settings Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/challenges/widgets" \  --request POST \  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \  --json '{    "domains": [        "example.com"    ],    "mode": "managed",    "name": "My Example Turnstile Widget"  }'Required API token permissions
 
At least one of the following token permissions 
is required:
Turnstile Sites WriteTurnstile Sites ReadAccount Settings WriteAccount Settings Read
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/challenges/widgets" \  --request GET \  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"Required API token permissions
 
At least one of the following token permissions 
is required:
Turnstile Sites WriteTurnstile Sites ReadAccount Settings WriteAccount Settings Read
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/challenges/widgets/$SITEKEY" \  --request GET \  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"Required API token permissions
 
At least one of the following token permissions 
is required:
Turnstile Sites WriteAccount Settings Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/challenges/widgets/$SITEKEY" \  --request PUT \  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \  --json '{    "domains": [        "203.0.113.1",        "cloudflare.com",        "blog.example.com"    ],    "mode": "invisible",    "name": "blog.cloudflare.com login form",    "clearance_level": "interactive"  }'Required API token permissions
 
At least one of the following token permissions 
is required:
Turnstile Sites WriteAccount Settings Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/challenges/widgets/$SITEKEY/rotate_secret" \  --request POST \  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \  --json '{    "invalidate_immediately": false  }'Required API token permissions
 
At least one of the following token permissions 
is required:
Turnstile Sites WriteAccount Settings Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/challenges/widgets/$SITEKEY" \  --request DELETE \  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"Was this helpful?
- Resources
 - API
 - New to Cloudflare?
 - Directory
 - Sponsorships
 - Open Source
 
- Support
 - Help Center
 - System Status
 - Compliance
 - GDPR
 
- Company
 - cloudflare.com
 - Our team
 - Careers
 
- © 2025 Cloudflare, Inc.
 - Privacy Policy
 - Terms of Use
 - Report Security Issues
 - Trademark