Topics
Granular subscription categories with per-contact opt-in state.
Topics are subscription categories — "Product updates", "Newsletter", "Promotions" — that give recipients finer control than a single global unsubscribe.
Each topic has a default_subscription of opt_in or opt_out, fixed at
creation:
opt_in— every contact is subscribed unless they opt out.opt_out— contacts are only included after they explicitly opt in.
How topics apply
- Broadcasts can target a topic. The fan-out includes only contacts whose effective subscription for that topic is "subscribed" (their explicit choice if they made one, the topic default otherwise), and always excludes globally unsubscribed contacts.
- The hosted unsubscribe page lists the team's public topics, so a
recipient can opt out of one category while staying subscribed to the rest —
or unsubscribe from all marketing email. Transactional sends without a
topic_idare unaffected by either choice. The page speaks fourteen languages, picked from the recipient's browser (Accept-Language), English when none matches; Settings → Unsubscribe page previews each one.
API
POST/GET/DELETE /topics and GET /topics/{id} manage topics; a contact's
choices are written with PATCH /contacts/{id}/topics, passing a bare array of
entries like { "id": "<topic-id>", "subscription": "opt_in" }, and read back
with GET /contacts/{id}/topics, which lists every topic with the contact's
effective subscription and an explicit flag (false when it is the topic's
default). A send with a topic_id whose every to recipient is opted out is
refused with 422 all_recipients_suppressed. See the
API reference.