Skip to content
Start here

Update a Turnstile Widget

client.Turnstile.Widgets.Update(ctx, sitekey, params) (*Widget, error)
PUT/accounts/{account_id}/challenges/widgets/{sitekey}

Update the configuration of a widget.

Security
API Token

The preferred authorization scheme for interacting with the Cloudflare API. Create a token.

Example:Authorization: Bearer Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY
API Email + API Key

The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.

Example:X-Auth-Email: user@example.com

The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.

Example:X-Auth-Key: 144c9defac04969c7bfad8efaa8ea194
Accepted Permissions (at least one required)
Turnstile Sites WriteAccount Settings Write
ParametersExpand Collapse
sitekey string

Widget item identifier tag.

maxLength32
params WidgetUpdateParams
AccountID param.Field[string]

Path param: Identifier

maxLength32
Domains param.Field[[]WidgetDomain]

Body param

maxLength10
Mode param.Field[WidgetUpdateParamsMode]

Body param: Widget Mode

const WidgetUpdateParamsModeNonInteractive WidgetUpdateParamsMode = "non-interactive"
const WidgetUpdateParamsModeInvisible WidgetUpdateParamsMode = "invisible"
const WidgetUpdateParamsModeManaged WidgetUpdateParamsMode = "managed"
Name param.Field[string]

Body param: 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.

maxLength254
minLength1
BotFightMode param.Field[bool]optional

Body param: If bot_fight_mode is set to true, Cloudflare issues computationally expensive challenges in response to malicious bots (ENT only).

ClearanceLevel param.Field[WidgetUpdateParamsClearanceLevel]optional

Body param: If Turnstile is embedded on a Cloudflare site and the widget should grant challenge clearance, this setting can determine the clearance level to be set

const WidgetUpdateParamsClearanceLevelNoClearance WidgetUpdateParamsClearanceLevel = "no_clearance"
const WidgetUpdateParamsClearanceLevelJschallenge WidgetUpdateParamsClearanceLevel = "jschallenge"
const WidgetUpdateParamsClearanceLevelManaged WidgetUpdateParamsClearanceLevel = "managed"
const WidgetUpdateParamsClearanceLevelInteractive WidgetUpdateParamsClearanceLevel = "interactive"
EphemeralID param.Field[bool]optional

Body param: Return the Ephemeral ID in /siteverify (ENT only).

Offlabel param.Field[bool]optional

Body param: Do not show any Cloudflare branding on the widget (ENT only).

Region param.Field[WidgetUpdateParamsRegion]optional

Body param: Region where this widget can be used. This cannot be changed after creation.

const WidgetUpdateParamsRegionWorld WidgetUpdateParamsRegion = "world"
const WidgetUpdateParamsRegionChina WidgetUpdateParamsRegion = "china"
ReturnsExpand Collapse
type Widget struct{…}

A Turnstile widget's detailed configuration

BotFightMode bool

If bot_fight_mode is set to true, Cloudflare issues computationally expensive challenges in response to malicious bots (ENT only).

ClearanceLevel WidgetClearanceLevel

If Turnstile is embedded on a Cloudflare site and the widget should grant challenge clearance, this setting can determine the clearance level to be set

One of the following:
const WidgetClearanceLevelNoClearance WidgetClearanceLevel = "no_clearance"
const WidgetClearanceLevelJschallenge WidgetClearanceLevel = "jschallenge"
const WidgetClearanceLevelManaged WidgetClearanceLevel = "managed"
const WidgetClearanceLevelInteractive WidgetClearanceLevel = "interactive"
CreatedOn Time

When the widget was created.

formatdate-time
Domains []WidgetDomain
maxLength10
EphemeralID bool

Return the Ephemeral ID in /siteverify (ENT only).

Mode WidgetMode

Widget Mode

One of the following:
const WidgetModeNonInteractive WidgetMode = "non-interactive"
const WidgetModeInvisible WidgetMode = "invisible"
const WidgetModeManaged WidgetMode = "managed"
ModifiedOn Time

When the widget was modified.

formatdate-time
Name string

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.

maxLength254
minLength1
Offlabel bool

Do not show any Cloudflare branding on the widget (ENT only).

Region WidgetRegion

Region where this widget can be used. This cannot be changed after creation.

One of the following:
const WidgetRegionWorld WidgetRegion = "world"
const WidgetRegionChina WidgetRegion = "china"
Secret string

Secret key for this widget.

Sitekey string

Widget item identifier tag.

maxLength32

Update a Turnstile Widget

package main

import (
  "context"
  "fmt"

  "github.com/cloudflare/cloudflare-go"
  "github.com/cloudflare/cloudflare-go/option"
  "github.com/cloudflare/cloudflare-go/turnstile"
)

func main() {
  client := cloudflare.NewClient(
    option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"),
  )
  widget, err := client.Turnstile.Widgets.Update(
    context.TODO(),
    "0x4AAF00AAAABn0R22HWm-YUc",
    turnstile.WidgetUpdateParams{
      AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"),
      Domains: cloudflare.F([]turnstile.WidgetDomainParam{"203.0.113.1", "cloudflare.com", "blog.example.com"}),
      Mode: cloudflare.F(turnstile.WidgetUpdateParamsModeInvisible),
      Name: cloudflare.F("blog.cloudflare.com login form"),
    },
  )
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", widget.EphemeralID)
}
{
  "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"
  }
}
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"
  }
}