Create a Turnstile Widget
Lists challenge widgets.
Security
API Token
The preferred authorization scheme for interacting with the Cloudflare API. Create a token.
API Email + API Key
The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.
The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.
Accepted Permissions (at least one required)
Parameters
Human readable widget name. Not unique. Cloudflare suggests that you set this to a meaningful string to make it easier to identify your widget, and where it is used.
Filter widgets by field using case-insensitive substring matching.
Format: field:value
Supported fields:
name- Filter by widget name (e.g.,filter=name:login-form)sitekey- Filter by sitekey (e.g.,filter=sitekey:0x4AAA)
Returns 400 Bad Request if the field is unsupported or format is invalid. An empty filter value returns all results.
If bot_fight_mode is set to true, Cloudflare issues computationally
expensive challenges in response to malicious bots (ENT only).
Create a Turnstile Widget
import os
from cloudflare import Cloudflare
client = Cloudflare(
api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted
)
widget = client.turnstile.widgets.create(
account_id="023e105f4ecef8ad9ca31a8372d0c353",
domains=["203.0.113.1", "cloudflare.com", "blog.example.com"],
mode="invisible",
name="blog.cloudflare.com login form",
)
print(widget.ephemeral_id){
"errors": [
{
"code": 1000,
"message": "message",
"documentation_url": "documentation_url",
"source": {
"pointer": "pointer"
}
}
],
"messages": [
{
"code": 1000,
"message": "message",
"documentation_url": "documentation_url",
"source": {
"pointer": "pointer"
}
}
],
"success": true,
"result": {
"bot_fight_mode": false,
"clearance_level": "interactive",
"created_on": "2014-01-01T05:20:00.123123Z",
"domains": [
"203.0.113.1",
"cloudflare.com",
"blog.example.com"
],
"ephemeral_id": false,
"mode": "invisible",
"modified_on": "2014-01-01T05:20:00.123123Z",
"name": "blog.cloudflare.com login form",
"offlabel": false,
"region": "world",
"secret": "0x4AAF00AAAABn0R22HWm098HVBjhdsYUc",
"sitekey": "0x4AAF00AAAABn0R22HWm-YUc"
},
"result_info": {
"count": 1,
"page": 1,
"per_page": 20,
"total_count": 2000
}
}Returns Examples
{
"errors": [
{
"code": 1000,
"message": "message",
"documentation_url": "documentation_url",
"source": {
"pointer": "pointer"
}
}
],
"messages": [
{
"code": 1000,
"message": "message",
"documentation_url": "documentation_url",
"source": {
"pointer": "pointer"
}
}
],
"success": true,
"result": {
"bot_fight_mode": false,
"clearance_level": "interactive",
"created_on": "2014-01-01T05:20:00.123123Z",
"domains": [
"203.0.113.1",
"cloudflare.com",
"blog.example.com"
],
"ephemeral_id": false,
"mode": "invisible",
"modified_on": "2014-01-01T05:20:00.123123Z",
"name": "blog.cloudflare.com login form",
"offlabel": false,
"region": "world",
"secret": "0x4AAF00AAAABn0R22HWm098HVBjhdsYUc",
"sitekey": "0x4AAF00AAAABn0R22HWm-YUc"
},
"result_info": {
"count": 1,
"page": 1,
"per_page": 20,
"total_count": 2000
}
}