Skip to main content
The hosted preference center is a Courier-hosted page where your users manage their notification preferences. You set it up and brand it in the Preferences Editor, then link to it from your notifications. There’s no frontend to build, and the page is responsive, so it works in any browser on desktop or mobile. On the page, users opt in or out of the subscription topics you configure, choose delivery channels where you enable it, and unsubscribe in one click.
A Courier-hosted preference page with subscription topics and toggles
For a native experience inside your own web or mobile app instead of a hosted page, embed the preference components. See Embedding preferences.

Configure and Brand It

Everything on the page comes from the Preferences Editor: the subscription topics and sections users see, and the brand it uses for its logo, colors, and typography. Update the brand and the page follows. Your changes stay in a draft until you publish. Use Preview Page in the editor to open the page in draft mode, then Publish. See previewing and publishing for the full flow. Add a link to the preference center in your notifications with the preferences variable. Courier renders it as a secure, per-user link, so include to.user_id in your send request and each recipient gets their own. Place it inside a notification’s content for contextual access, or once in your brand footer so it appears on every message. Write the variable in the format for your editing context:
  • Content blocks (Text, Markdown, Quote, List): {{$.urls.preferences}}
  • Handlebars (Template blocks, email templates, brand templates): {{var "urls.preferences"}}
  • Elemental JSON (action buttons, links): {$.urls.preferences}
Using the wrong format for the context stops the URL from rendering. Preview emails show placeholder URLs, since they aren’t sent to real users. See Inserting variables for the full reference. The unsubscribe variable gives users a one-click opt-out from the subscription topic tied to that notification, removing them from all of the topic’s templates and delivery channels. Write it the same way as the preferences link:
  • Content blocks (Text, Markdown, Quote, List): {{$.urls.unsubscribe}}
  • Handlebars (Template blocks, email templates, brand templates): {{var "urls.unsubscribe"}}
  • Elemental JSON (action buttons, links): {$.urls.unsubscribe}
The unsubscribe URL resolves to an empty string if the template has no subscription topic assigned, so assign a topic first. For templates on a Required topic, the page still renders but the opt-out has no effect, so leave unsubscribe links off those templates.
Clicking it takes the user to a hosted confirmation page that shows their updated status.

Channel selection

If you enable channel selection on a topic in the Preferences Editor, users can pick which channels (email, SMS, push, and more) they want for it. Their choices appear in the custom_routing array from the User Preferences API:
Template send conditions don’t override a user’s custom_routing. To drop a channel when required data is missing, use variable guardrails.

FAQ

No. You configure and brand the page in the Preferences Editor and link to it from your notifications. To render preferences inside your own app instead, use embedded preferences.
The page uses your default brand. Edit the brand’s logo, colors, and typography, and the preference center updates to match.
Yes, if you enable channel selection on a topic in the Preferences Editor. Each user’s choices are saved to the topic’s custom_routing.
Courier generates a secure, per-user URL from the urls.preferences variable at send time. You never construct it yourself; just include to.user_id in the send so it resolves to the right recipient.