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 Write
- Account 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 Write
- Turnstile Sites Read
- Account Settings Write
- Account 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 Write
- Turnstile Sites Read
- Account Settings Write
- Account 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 Write
- Account 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 Write
- Account 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 Write
- Account 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