A topic is a kind of marketing a contact can choose, such as product updates, and a topic choice is their choice for it on every channel or one. Topic choice works on top of consent, not instead of it: a send on a topic needs consent on the channel and the topic reaching the contact. An opt_out topic reaches everyone with consent who has not left it; an opt_in topic only those who joined. A contact's topic choices: GET /v1/contacts/{id}/topics.
Endpoints
| Endpoint | Request |
|---|---|
| List topics | GET /v1/topics |
| Create a topic | POST /v1/topics |
| Retrieve a topic | GET /v1/topics/{id} |
| Update a topic | PATCH /v1/topics/{id} |
| Delete a topic | DELETE /v1/topics/{id} |
The Topic object
{
"id": "0192f3b0-6a1b-7c2d-8e3f-4a5b6c7d8e9f",
"name": "Weekly offers",
"description": "Discounts and bundles, once a week",
"mode": "opt_out",
"createdAt": "2026-09-01T10:00:00.000Z",
"updatedAt": "2026-09-01T10:00:00.000Z",
"counts": {
"in": 11842,
"left": 316
}
}idstringrequireduuid
namestringrequireddescriptionstring | nullrequiredmodestringrequiredopt_outreaches everyone who has not left;opt_inonly those who joined.one of
opt_out,opt_increatedAtstringrequireddate-time
updatedAtstringrequireddate-time
countsobjectrequiredCounted now, as the topic rule without
channelreads it; a contact's channel choice can still differ on that channel.2 child attributes
inintegerrequiredContacts the topic reaches topic-wide: for
opt_outeveryone who has not left, foropt_inthose who joined.min 0
leftintegerrequiredContacts who left the topic.
min 0