Overview of subscription options

Updated

We 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.

flowchart LR c{Is unsubscribed true?} c-....->|yes|f[Person is only eligible for
in-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.

In the middle of the page is the question, 'Do you want to unsubscribe from our messages? You'll stop receiving messages from us.' Underneath that is the Unsubscribe button.
In the middle of the page is the question, 'Do you want to unsubscribe from our messages? You'll stop receiving messages from us.' Underneath that is the Unsubscribe button.

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.

The landing page for the subscription center in Fly. The title is Subscription Center. The tab Subscriptions is selected. There is a table with a title Topics and three subscription center topics. The table shows as Live. Underneath the Topics table is Global unsubscribe which also reads Live because customers can still unsubscribe from all messaging from the subscription center.
The landing page for the subscription center in Fly. The title is Subscription Center. The tab Subscriptions is selected. There is a table with a title Topics and three subscription center topics. The table shows as Live. Underneath the Topics table is Global unsubscribe which also reads Live because customers can still unsubscribe from all messaging from the subscription center.

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:

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

Channel preferences control whether a person receives messages on a channel type as a whole. For example, setting 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.

TopicChannelResult
SubscribedSubscribedMessage sends ✅
SubscribedUnsubscribedMessage blocked ❌
UnsubscribedSubscribedMessage blocked ❌
UnsubscribedUnsubscribedMessage 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:

ChannelSubscription behavior
Email, SMS, push, WhatsAppRespects global unsubscribe, topic preferences, and channel preferences
In-appIgnores global unsubscribe and topic preferences by default; respects channel preferences if you configure in_app as a channel
SlackIgnores global unsubscribe and topic preferences; respects channel preferences if you configure slack as a channel
WebhooksBypasses all subscription checks

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-tag.png
    unsubscribe-tag.png
  • {% unsubscribe_url %} generates an unsubscribe link but lets you customize the text your audience sees.
    • To hyperlink within the code and rich text editors, place {% unsubscribe_url %} in the href attribute of an anchor <a> tag in the HTML:
      Untracked unsubscribe link in the Rich Text editor
      Untracked unsubscribe link in the Rich Text editor
    • When using the drag and drop editor, place {% unsubscribe_url %} in the settings for the link you create:
      Untracked unsubscribe link in the Drag and Drop editor
      Untracked unsubscribe link in the Drag and Drop editor

{% 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.
    unsubscribe-preferences-tag.png
    unsubscribe-preferences-tag.png

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.

unsubscribe-attribute-true.png
unsubscribe-attribute-true.png

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.

A profile for a person named Glinda Witch is shown. On the Overview tab, the table in the top left reads Subscription Preferences. The top row shows that Glinda is subscribed to one topic called Feedback, and the row beneath shows that she is unsubscribed from two topics called News and programs and Offers.
A profile for a person named Glinda Witch is shown. On the Overview tab, the table in the top left reads Subscription Preferences. The top row shows that Glinda is subscribed to one topic called Feedback, and the row beneath shows that she is unsubscribed from two topics called News and programs and Offers.

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
      }
   }
}
profile-subscription-topic-change.png
profile-subscription-topic-change.png

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.

Copied to clipboard!
  Contents