Overview of subscription options
UpdatedWe provide native unsubscribe functionality for email, SMS, WhatsApp, and push notifications. In this article, you’ll also learn about non-native subscription options for push, SMS, as well as in-app messages.
Native unsubscribe links for emails, SMS, WhatsApp, and push
In Customer.io, you can use our default global unsubscribe functionality or set up a subscription center to manage which messages your customers receive. We recommend you create a subscription center to give your customers the option to receive messages they’re interested in without opting-out of all of your messages.
unsubscribed true?}
c-....->|yes|f[Person is only eligible forin-app or Slack messages] c-->|no|g{Is the subscription
center enabled?} g-->|yes|d{Is the person
subscribed to the topic?} d-->|yes|ch{Is the person
subscribed to
the channel?} ch-->|yes|e[Person receives message
according to preferences] ch-->|no|chblock[Person does not
receive message] d-->|no|chblock g-...->|no|i[Person receives message]
Unsubscribe globally
Out-of-the-box, Customer.io provides global unsubscribe functionality where your customers can subscribe or unsubscribe from email, SMS, WhatsApp, and push notifications. This is great for getting started, but as you grow, you may want to give your customers more control over the messages they receive with subscription preferences.
When someone clicks an unsubscribe link in an email, they’ll see this page and they’ll be unsubscribed from email, SMS, WhatsApp, and push notifications.


Subscription preferences
We recommend you set up a subscription center so your customers can control the messages they receive. The subscription center gives people two dimensions of control: topics and channels. Both work the same way—you set them up in Workspace Settings > Subscription Center, configure each as opt-in or opt-out, and provide a name and description.


Click Preview at the top right of the landing page to see what our subscription center looks like to anyone who receives your messages.
A person can still globally unsubscribe if the subscription center is enabled. They just click Unsubscribe from all or uncheck every preference and click Save.
Read on to learn how to:
- Set up subscription preferences with topics and channels
- Add unsubscribe URLs to your messages
- Track subscription preferences
- Brand your unsubscribe page
Topics
Topics control what kind of content people receive—for example, “Product Updates” or “Marketing Offers.” Unsubscribing from a topic means your customers no longer receive emails, push, or SMS for that topic.
Channels
Channels control how people receive messages—for example, email, SMS, push, or WhatsApp. Channel preferences let people opt in or out of specific messaging channels, independent of their topic subscriptions. For example, a person might want to receive your “Product Updates” topic by email but not SMS.
You must explicitly add each channel you want people to manage—enabling a messaging channel in your workspace doesn’t automatically add it to the subscription center.
Channel preferences apply per channel type, not per sender
email to false stops all email—you can’t set preferences for individual email addresses or phone numbers. If you need per-sender control, you might align your sender addresses with topics and use topics to control preferences instead.How topics and channels work together
Topics and channels are independent layers of subscription control, but they combine as an AND—a person must be subscribed to both the topic and the channel to receive a message. If either one is opted out, the message is blocked.
For example, say a person is subscribed to your “Product Updates” topic but has opted out of the push channel. If you send a push notification for Product Updates, that person won’t receive it—even though they’re subscribed to the topic. They’d still get Product Updates by email or SMS, assuming those channels are subscribed.
| Topic | Channel | Result |
|---|---|---|
| Subscribed | Subscribed | Message sends ✅ |
| Subscribed | Unsubscribed | Message blocked ❌ |
| Unsubscribed | Subscribed | Message blocked ❌ |
| Unsubscribed | Unsubscribed | Message blocked ❌ |
There’s no per-topic-per-channel preference—topics and channels are independent. A person can subscribe to all topics but opt out of push, or subscribe to push but opt out of a specific topic.
The flowchart at the top of this page shows this logic visually.
Different messaging channels handle subscription checks differently:
| Channel | Subscription behavior |
|---|---|
| Email, SMS, push, WhatsApp | Respects global unsubscribe, topic preferences, and channel preferences |
| In-app | Ignores global unsubscribe and topic preferences by default; respects channel preferences if you configure in_app as a channel |
| Slack | Ignores global unsubscribe and topic preferences; respects channel preferences if you configure slack as a channel |
| Webhooks | Bypasses all subscription checks |
Unsubscribe links
You can use the following liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person’s first name, you might use the variable {{customer.first_name}}. to generate links that unsubscribe people from email, SMS, and push:
{% unsubscribe %}{% unsubscribe_url %}{% manage_subscription_preferences_url %}
{% unsubscribe %} and {% unsubscribe_url %} both work if you’re using our global unsubscribe functionality or subscription topics:
{% unsubscribe %}generates “Unsubscribe” which a person can click to unsubscribe from your messages. If you’re using the subscription center, people can unsubscribe from the specific topic in your message or manage other topics. If not, this page lets your audience unsubscribe from all messages.

{% unsubscribe_url %}generates an unsubscribe link but lets you customize the text your audience sees.
{% manage_subscription_preferences_url %} only works if your subscription center is enabled:
{% manage_subscription_preferences_url %}generates a link to the subscription preferences page. This is where a person can manage their subscription preferences for all topics and channels. With our standard links - the two tags above - we would first prompt a person to unsubscribe from the topic of the message; this link allows your recipients to go straight to the subscription preferences page. You might do this when you announce a change to preferences, for instance.

Subscription attributes
Our unsubscribed attribute tracks a person’s global subscription status when the subscription center is enabled and disabled. We also track topic and channel preferences through profile attributes.
unsubscribed
We track global subscription statuses through a profile attribute named unsubscribed. It’s a field that takes boolean values - true or false. Setting this field to true means the person is unsubscribed from email, SMS, and push. Setting this field to false means the person is subscribed to them.


A person can globally unsubscribe when the subscription center is enabled or disabled. If the subscription center is enabled, a person must go to the subscription preferences page and click Unsubscribe from all or they must uncheck all of their preferences and click Save. If the subscription center is disabled, a person clicks Unsubscribe.
Go to Set unsubscribed attributes to learn more.
Topic and channel preferences
We track subscription preferences in their own table within the Overview tab of a person’s profile.


Behind the scenes, both topic and channel preferences exist within a JSON object called cio_subscription_preferences. Topics are identified by numeric ID (so renaming a topic doesn’t affect preferences) and channels use the channel type name.
{
"cio_subscription_preferences": {
"topics": {
"topic_1": true,
"topic_2": false
},
"channels": {
"email": true,
"sms": true,
"push": false
}
}
}


Both topics and channels use the same opt-in/opt-out pattern. If a topic or channel is configured as opt-in, people must explicitly subscribe before receiving messages. If it’s configured as opt-out, people are subscribed by default.
Go to Manage subscription preferences to learn more about setting these attributes.
Channel preferences don’t replace topics—they add a second layer of control. If you only use topics today, everything continues to work the same until you configure channel preferences.


