# Custom Topics ## Get AI Security for Apps Custom Topics `client.AISecurity.CustomTopics.Get(ctx, query) (*CustomTopicGetResponse, error)` **get** `/zones/{zone_id}/ai-security/custom-topics` Get the AI Security for Apps custom topic categories for a zone. ### Parameters - `query CustomTopicGetParams` - `ZoneID param.Field[string]` Defines the zone. ### Returns - `type CustomTopicGetResponse struct{…}` - `Topics []CustomTopicGetResponseTopic` 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. - `Topic string` Description of the topic category. Must contain only printable ASCII characters. ### Example ```go 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.Get(context.TODO(), ai_security.CustomTopicGetParams{ ZoneID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", customTopic.Topics) } ``` #### Response ```json { "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 } ``` ## Set AI Security for Apps Custom Topics `client.AISecurity.CustomTopics.Update(ctx, params) (*CustomTopicUpdateResponse, error)` **put** `/zones/{zone_id}/ai-security/custom-topics` Set the AI Security for Apps custom topic categories for a zone. A maximum of 20 custom topics can be configured per zone. Each topic label must be 2–20 characters using only lowercase letters (a–z), digits (0–9), and hyphens. Each topic description must be 2–50 printable ASCII characters. Changes can take up to a minute to propagate to the zone. ### Parameters - `params CustomTopicUpdateParams` - `ZoneID param.Field[string]` Path param: Defines the zone. - `Topics param.Field[[]CustomTopicUpdateParamsTopic]` 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. - `Topic string` Description of the topic category. Must contain only printable ASCII characters. ### Returns - `type CustomTopicUpdateResponse struct{…}` - `Topics []CustomTopicUpdateResponseTopic` 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. - `Topic string` Description of the topic category. Must contain only printable ASCII characters. ### Example ```go 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) } ``` #### Response ```json { "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 } ```