Prerequisites
- A Courier workspace
Configure the topics
Use the (Platform → Preferences). Topics, sections, and branding are all defined here. Every setting it exposes is in .
The preferences editor: page settings, sections, and topics, with a live preview of the hosted page.
Set page settings
- An optional , for logo and colors.
- The heading and description.
- The channel names users see. Rename them to match your product, for example “In-App” to “Inbox”.
Add sections
Add topics
- On (
OPTED_IN): users receive it unless they opt out. - Off (
OPTED_OUT): users receive nothing until they opt in. - Required (
REQUIRED): users can’t opt out. Use it for critical messages, and leave unsubscribe links off templates mapped to required topics.
Map templates to topics
subscription field to { "topic_id": "<TOPIC_ID>" } through the API.Publish
Hosted page
The hosted preference center needs no frontend. It lists the user’s subscription topics with the heading, description, and optional brand you set in the editor. It works on desktop and mobile. Courier serves it athttps://view.notificationcenter.app/p/<id>. The id encodes the workspace, brand, and user, so each recipient sees their own preferences.

The Courier-hosted preference page a user opens from the preferences link: their subscription topics, grouped into sections and branded.
Link users to the preference center
Link users to their hosted page with thepreferences variable. Courier renders it as a secure, per-user URL. Include to.user_id in your send so each recipient gets their own link. Write the variable in the format for your editing context:
- Content blocks (Text, Markdown, Quote, List):
{{$.urls.preferences}} - Handlebars (Template blocks, email and brand templates):
{{var "urls.preferences"}} - Elemental JSON (action buttons and links):
{$.urls.preferences}
nt_01kx4h2jdafq8bk9aftxak4b40 is a template whose body includes {{$.urls.preferences}}:
unsubscribe variable the same way ({{$.urls.unsubscribe}}, {{var "urls.unsubscribe"}}, or {$.urls.unsubscribe}).
One-click unsubscribe headers
Gmail and Yahoo require bulk senders to support one-click unsubscribe. Turn on Unsubscribe Headers for a topic in the preferences editor, or setinclude_unsubscribe_header on the topic through the API. Courier then adds two headers to that topic’s email:
Embedded component
To keep users inside your product, embed the preference center instead of linking to the hosted page. It reads the same published topics and writes the same preference data, so a change in one place shows up in the other.
The embedded preference center component: subscription topics with per-topic channel choices.
Add a preference center
Customize Preferences
Sync changes to your own system
Courier sends each change a user makes in the preference center to your as apreferences:user:updated event, and records it in the change history. To keep a copy in your CRM or database, see .
Verify
Open the preference center
{{$.urls.preferences}} with to.user_id set), or load your embedded component as a test user.Toggle a topic off and send
UNSUBSCRIBED.Read the change back
status matches what you toggled.