Update a topic

PATCH
/v1/topics/{id}

Changes the fields given; the key can't change.

Authorization

bearerAuth
headerAuthorizationBearer <token>

A secret API key from the dashboard: coss_live_… for production environments, coss_test_… for sandbox environments.

Path Parameters

id*string

The topic's id.

Header Parameters

Coss-Version?"2026-10-10"

The API version (a date) to use for this request. Defaults to your organization's version, pinned to the latest one when it first used the API and upgraded from the dashboard. The SDK always sends the version it was built for.

Value in"2026-10-10"

Request Body

application/json
  1. body
name?string
Length1 <= length <= 200
description?|
Lengthlength <= 500
default_subscription?string

opt_in: every subscribed contact gets the topic's emails unless they opt out. opt_out: only contacts who opted in do.

Value in"opt_in""opt_out"
visibility?string

private topics never show in the preference center (default public).

Value in"public""private"
position?integer

Order in the preference center (ascending).

Range0 <= value <= 1000

Response Body

The topic.

application/json
  1. response
object*"topic"
Value in"topic"
id*string
key*string

The category of the emails about this topic. Can't change.

name*string
description*string|null
default_subscription*string
Value in"opt_in""opt_out"
visibility*string
Value in"public""private"
position*integer
created_at*string
Formatdate-time
updated_at*string
Formatdate-time
import { Coss } from "coss";const coss = new Coss({  apiKey: process.env.COSS_API_KEY,  baseUrl: "https://api.coss.com",});const { data, error } = await coss.email.topics.update("topic_01k7c8m4q2f3e9v6t5r1n0p8yz", {  visibility: "private",});
{  "object": "topic",  "id": "topic_01k7c8m4q2f3e9v6t5r1n0p8yz",  "key": "newsletter",  "name": "Newsletter",  "description": "Monthly product news.",  "default_subscription": "opt_in",  "visibility": "public",  "position": 0,  "created_at": "2026-10-10T12:00:00.000Z",  "updated_at": "2026-10-10T12:00:00.000Z"}