---
title: Update the AI Security for Apps custom topics of a zone.
---

[Skip to content](#%5Ftop) 

[API Reference](https://developers.cloudflare.com/api/go)

[AI Security](https://developers.cloudflare.com/api/go/resources/ai%5Fsecurity)

[Custom Topics](https://developers.cloudflare.com/api/go/resources/ai%5Fsecurity/subresources/custom%5Ftopics)

Copy Markdown

Open in **Claude**

Open in **ChatGPT**

Open in **Cursor**

---

**Copy Markdown**

**View as Markdown**

# Update the AI Security for Apps custom topics of a zone.

client.AISecurity.CustomTopics.Update(ctx, params) (\*[CustomTopicUpdateResponse](https://developers.cloudflare.com/api/go/resources/ai%5Fsecurity#%28resource%29%20ai%5Fsecurity.custom%5Ftopics%20%3E%20%28model%29%20CustomTopicUpdateResponse%20%3E%20%28schema%29), error)

PUT/zones/{zone\_id}/ai-security/custom-topics

Update the custom topic list of the zone, overwriting it entirely with the topics in the request, so include every topic you want to keep. Changes can take up to a minute to propagate.

Each entry has a `label`, used to reference the topic in rule expressions and analytics, and a `topic`description, which the classifier scores prompts against while AI Security for Apps is enabled. The following rules apply:

* A zone can hold at most 20 topics.
* `label` must be 2–20 characters, using only lowercase letters (a–z), digits (0–9), and hyphens.
* `topic` must be 2–50 printable ASCII characters.
* Labels must be unique within the zone, and so must topic descriptions.

##### Security

API Token

The preferred authorization scheme for interacting with the Cloudflare API. [Create a token](https://developers.cloudflare.com/fundamentals/api/get-started/create-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`

##### ParametersExpand Collapse 

params CustomTopicUpdateParams

ZoneID param.Field\[string\]

Path param: Defines the zone.

maxLength32

Topics param.Field\[\[\]CustomTopicUpdateParamsTopic\]Optional

Body param: Custom topic categories for AI Security for Apps content detection.

Label string

Unique label identifier. Must contain only lowercase letters (a–z), digits (0–9), and hyphens.

maxLength20

minLength2

Topic string

Description of the topic category. Must contain only printable ASCII characters.

maxLength50

minLength2

##### ReturnsExpand Collapse 

type CustomTopicUpdateResponse struct{…}

Topics \[\]CustomTopicUpdateResponseTopicOptional

Custom topic categories for AI Security for Apps content detection.

Label string

Unique label identifier. Must contain only lowercase letters (a–z), digits (0–9), and hyphens.

maxLength20

minLength2

Topic string

Description of the topic category. Must contain only printable ASCII characters.

maxLength50

minLength2

### Update the AI Security for Apps custom topics of a zone.

Go

HTTPHTTP

TypeScriptTypeScript

PythonPython

GoGo

TerraformTerraform

```
package main

import (
  "context"
  "fmt"

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

func main() {
  client := cloudflare.NewClient(
    option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"),
  )
  customTopic, err := client.AISecurity.CustomTopics.Update(context.TODO(), ai_security.CustomTopicUpdateParams{
    ZoneID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"),
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", customTopic.Topics)
}

```

200 example

```
{
  "errors": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "messages": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "result": {
    "topics": [
      {
        "label": "credit-cards",
        "topic": "credit card numbers"
      }
    ]
  },
  "success": true
}
```

##### Returns Examples

200 example

```
{
  "errors": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "messages": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "result": {
    "topics": [
      {
        "label": "credit-cards",
        "topic": "credit card numbers"
      }
    ]
  },
  "success": true
}
```