The Subscription Center
A subscription center helps you differentiate between the different types of messages you send, and lets your audience decide what kinds of campaigns and messages they want to receive.
How it works
You’ll set up the topicsA category of message, set within your workspace’s subscription center, that people can subscribe to or unsubscribe from. Topics let your audience determine the kinds of messages they want to get from you. that your audience can subscribe to (or unsubscribe from) in your workspace settings. When you setup a campaign, broadcast, etc, you’ll decide which message topic your campaign sends.
People with the appropriate topic preferences will receive messages from the campaign; people who have opted out of the topic (or have not opted into the topic) can still move through the campaign, but they won’t receive messages.
When people receive a message, they can use the unsubscribe link to unsubscribe from an individual topic. Or, they can open a page where they can set preferences for multiple topics or unsubscribe globally.
campaign trigger]-->b{is unsubscribe true?} b-->|no|d{is the person
subscribed to the topic?} d-->|yes|e[person receives
messages from campaign] b-.->|yes|f[person does not
receive messages] d-.->|no|h[person does not
receive messages]
Topics are either opt-in or opt-out
By default, people must opt-out of topics they don’t want to subscribe to. You can set up topics that either require people to opt-in or opt-out.
- Opt-in: people must explicitly opt-in before they’ll receive messages
- Opt-out: people receive messages by default and must opt-out if they don’t want messages
When you create a topic, you can change the People are subscribed by default setting, determining whether people are opted in or out of a topic by default. If you disable this setting, people must subscribe to a topic before they’ll receive messages belonging to that topic.
People will receive messages until they opt out | People won't receive messages until they opt in |
---|---|
![]() ![]() | ![]() ![]() |
Globally unsubscribing vs unsubscribing from topics
A person can either unsubscribe from all messages or unsubscribe from individual topics.
When someone clicks the Unsubscribe link in messages, they’ll see a screen where they can click Unsubscribe again, or go to their subscription preferences. If they click the unsubscribe button on this page, they’ll only be unsubscribed from the topic associated with that message.
When a person goes to the subscription center, they can change their subscription preferences or click Unsubscribe. In the subscription center, the Unsubscribe button is global, and removes the person from all topics.
unsubscribe or not?"} b-.->|person clicks
unsubscribe|c[person is
unsubscribed from topic] b-->|person goes to
subscription center|d{What preferences
do they change?} d-.->|person clicks
Save Preferences|f[person's subscription
preferences are updated] d-.->|person clicks
Unsubscribe|g[Person is globally
unsubscribed from all messages]
If you set a person’s unsubscribed
attribute to true
, which might happen outside the subscription center, that person won’t receive messages (unless you use the Send to all subscribed and unsubscribed setting). But, if you change that attribute back to false
, we’ll preserve that person’s preferences, so they pick up where they left off.
The subscription preferences URL
You can expose the subscription preferences page, without requiring your customers to click Unsubscribe, by adding {% manage_subscription_preferences_url %}
somewhere in your message. You might do this when you announce a change to preferences, for instance.
What people see when they click Unsubscribe
After you enable subscription center topics, the unsubscribe links in your emails will send people to a page where they can unsubscribe from the topic the message belongs to. From there, they can go to the subscription preferences page and subscribe to, or unsubscribe from, any topic.
You can preview the subscription preferences page in Settings > Workspace Settings > Subscription Center by clicking Preview.
When people click unsubscribe, they can unsubscribe from the topic: | When people click "here" to manage preferences, they can check/uncheck their preferences: |
---|---|
![]() ![]() | ![]() ![]() |
Set up your subscription center
To take advantage of the subscription center, you must determine the topic or Audience for running campaigns and broadcasts; you can’t enable topics until you’ve applied the Audience setting to active workflows.
Before you enable topics:
- Customize your subscription center language.
- Add topics.
- Change the header text and description as you see fit.
- Add branding to your subscription preferences page
- Apply topics to your campaigns and broadcasts.
Map out your topics before you start
You need to apply topics to campaigns and broadcasts before you can enable the subscription center. It may help to map out and/or tag campaigns and broadcasts before you create topics to help you get a handle on the topics you want to create and the things they apply to.
- Translate your topics and other custom copy to fit your audiences’ needs.
- (Optional) Backfill your audience’s subscription preferences using the
cio_subscription_preferences
attribute. - Enable subscription center topics.


Add topics and custom headers
When you add a topic, you can determine whether your audience must opt into it or opt out of it. By default, a new topic requires people to opt out; workflows using a new topic with default settings will send messages to everybody (who isn’t globally unsubscribed) until they opt out-of the topic.
After you add at least one topic, you can set your subscription center’s brand color and logo and translate your topics.
- In Customer.io, go Settings > Workspace Settings.
- Go to Subscription Center, and click Edit. If this is your first topic, click Get Started. Then click Add.
- Set a Name and a Description. The name is how you’ll select your topic in the Audience setting. Your audience will see both the Name and Description when they set their subscription preferences.
- Determine whether People are subscribed by default.
- Off: People must opt-into the topic to get messages.
- On: (Default) People will get messages for this topic unless they change their subscription preferences to opt out. Before you use the On setting, make sure that you have your audience’s consent or won’t otherwise violate their message preferences and send them messages that they might consider spam!
- Click Save.
From this page, you can also customize the header and description of your subscription preferences page. You can translate this from the same area you localize topics.
Now you can set your topic in the Audience setting for your campaigns and broadcasts. You can also reference the name of your subscription topic in your emails with liquid. For instance, you could use it to make a footer like, “Not interested in {% subscription_topic_name %}
?” followed by the liquid that renders a link to unsubscribe: {% unsubscribe_url %}
.
Order topics
You can change the order of topics on the subscription preferences page through Workspace Settings > Subscription center > Edit on the Topics table.
Drag and drop each topic in the desired order.

Preview your changes on the right panel. After you save, the topics table and Preview URL will reflect your changes.
The next time your customers open the subscription preferences page, they will see the new order.
Edit a topic
You can update the Name or Description for your topic. This does not affect your Audience settings or people’s subscription preferences. It only affects what people see when they change preferences using the subscription center.
- In Customer.io, go Settings > Workspace Settings.
- Go to Subscription Center, click Edit, and select the topic you want to change.
- Change the Name or Description for your topic.
- When you’re done, click Save.
Delete a topic
You can’t delete a topic that’s in use. You’ll need to change the Audience setting for any running campaigns and broadcasts that use the topic you want to delete before you can delete it. You don’t need to worry about draft or stopped workflows.
- In Customer.io, go to Settings > Workspace Settings.
- Go to Subscription Center and hover over the topic you want to delete. On the right, you’ll see a trash can icon appear. Click this to delete the topic.
Set a topic in a campaign or broadcast
To enable subscription center topics, you must assign an audience to all running campaigns and broadcasts - both API-triggered broadcasts and scheduled newsletters. Set any one of your subscription center topics as the audience. This determines who will receive messages from your campaign or broadcast, not whether they enter into a journey. Only the trigger settings determine whether someone enters a journey; the audience determines who will receive messaging of those that enter a journey.
For example, let’s say you have a segment-triggered campaign. The segment is anyone who has purchased a product in the last 30 days. The audience is set to people subscribed to Product Updates. People who are subscribed to Product Updates will receive messages from the campaign. People who are not subscribed to Product Updates will not receive messages from the campaign, but they will still enter the campaign if they meet the trigger criteria.
You can also override the topic at the message level should the campaign audience settings not fit for all messages.
Campaigns and broadcasts will not take your topic audience into account until you’ve clicked Enable
in your subscription center. After you finish assigning audiences to live campaigns and broadcasts, continue to enable topics.
Set a topic in a campaign
In your campaign’s Settings step, select the topic for your campaign from the Audience dropdown. Only people subscribed to this topic will receive messages from the campaign, unless you override the topic at the message level.


Set a topic in a broadcast
In the broadcast’s Recipients step, determine Who should receive this? Then select the topic for your newsletter or API-triggered broadcast from the Audience dropdown. Only people subscribed to the selected topic will receive your newsletter or messages in your API-triggered broadcast, unless you override the topic at the message level.


Bulk update topics for running campaigns and broadcasts
To expedite enabling your subscription center, you can assign a topic to multiple campaigns, broadcasts, and newsletters at once through Workspace Settings > Subscription center.
On the Topics table, select Review. Under the Pending tab is a list of all campaigns and broadcasts that are running or newsletters that are scheduled to run and need a topic assigned.
- Select the box next to each one you want to update.
- Select which topic you want to assign as the audience from the dropdown.
- Click Apply.
The checked campaigns, broadcasts, or newsletters will move to the Completed column. The All tab shows both Pending and Completed items.
Use the filters at the top to search by name or description, tags, type of campaign or broadcast, and subscription preference.
Override a topic for a message
After creating at least one topic in your workspace’s subscription center, you can assign an audience to your campaigns. You also have the option to override the audience for each email, push notification, or SMS in the campaign.
To override the audience:
- Select the message in your campaign.
- On the left-hand pane, scroll to Override Campaign Settings.
- Select the Subscription Preference dropdown and choose to send based on a different topic preference or global subscription setting. By default, we send messages based on campaign settings.
- Click Save.
Moving forward, Customer.io will draft or send this message based on the message-level override of the subscription preference.
Set subscription preferences per channel
While we don’t have an out-of-the-box solution for setting up multiple channels (email, in-app, push) for each subscription topic, you can accomplish this by creating a subscription topic for each channel alongside overriding topics for an individual message in a workflow.
For instance, if you have a topic “Marketing Updates,” you could split this based on the communication channels you offer:
- Marketing Updates - Push
- Marketing Updates - Email
- Marketing Updates - In-app
At the campaign level, let’s say you target the audience “Marketing Updates - Email.” Within the campaign, you could create three different marketing messages - one push, one email and one in-app - where each message had a different audience that matched the channel the customer had subscribed to. The email would have the audience that matched the campaign settings. For the push notification, you would override the audience by choosing “Marketing Updates - Push” from the dropdown, and so on.
A customer could visit their subscription preferences page at any time to adjust which topics + channels were best for them.
Enable the subscription center
Before you can enable subscription center topics, you must have created at least one topic, and applied topics to the Audience setting for all your active campaigns, scheduled newsletters, and API-triggered broadcasts. You may also want to backfill or migrate existing subscription preferences. When you enable the subscription center, your audience’s Unsubscribe link in your messages also lets people set their topic preferences.
To enable your subscription center:
- Go to Settings > Workspace Settings.
- Click Subscription Center and then click Enable.


Set subscription topic preferences
You can record your customers’ subscription preferences in Customer.io by migrating their existing preferences from another service, sending out a campaign requesting they update their preferences, or tracking their preferences outside of the subscription center.
You have the option to set preferences for some subscription topics, while preserving those set for others, using JSON dot notation.
Backfill or migrate preferences
Before you enable subscription center topics, you might want to set or migrate your audience’s subscription preferences. You’ll almost certainly need to do this if you set your topics up as “opt-in” by default.
You can set your audience’s subscription preferences using the reserved cio_subscription_preferences
attributeA key-value pair that you associate with a person or an object—like a person’s name, the date they were created in your workspace, or a company’s billing date etc. Use attributes to target people and personalize messages.. Each topic in the attribute is numbered, based on the ID that you see in the UI—topic_1
corresponds to ID 1 in the left-column in your Subscription Center setup page. We set subscription preferences by topic ID rather than the topic Name, so that you can change the name of a topic without affecting your audience’s preferences. For each topic, true
means that a person is subscribed to a topic; false
means they’re unsubscribed.
You’ll set this attribute—either through the API, a CSV upload, a Create or Update Person action, or Database sync—to apply preferences to a person.
{
"cio_subscription_preferences": {
"topics": {
"topic_1": true,
"topic_2": false
}
}
}


Check your payload
Applying subscription preferences incorrectly prevents us from observing your audience’s preferences, and can result in extra, misapplied attributes that clutter your workspace.
Create a campaign to record preferences
After your subscription center topics are enabled, you can send a campaignA series of actions that you perform for each person who matches criteria. Campaigns typically send people a series of messages, but you can also use campaigns to send webhooks, update attributes, etc. to customers to show them they now have the option to subscribe to topics. You can prompt them to manage their preferences in the message.
Set preferences outside of the subscription center
You can send subscription preferences to your workspace based on actions your customers take outside of Customer.io’s messaging. For instance, you may want to track and send preferences upon account sign-up. This ensures your marketing platform is up-to-date with your other systems of record.
Find subscription preferences
After you enable topics, you’ll find people’s subscription preferences when you select them on the People page. You can view and edit subscription preferences from the Overview tab of a person’s profile.


Track changes to preferences
On the Attributes tab, as well as your workspace’s Activity Log, you can track when someone changed a subscription preference with the reserved attribute cio_subscription_preferences
(more on that below).


A change is logged when:
- your customer updates a subscription preference from the subscription preferences page.
- you/an admin manually change a subscription preference from the Journeys UI.
- a campaign with an Update or Create Person workflow action updates a subscription preference.
- you update a person’s subscription preferences via CSV, Track API, web SDK, or a reverse ETL sync.
Subscription preferences in the API
When you look up a person using our API, or export a person, we include a person’s subscription preferences and their computed subscription preferences.
The cio_subscription_preferences
attribute contains preferences that a person set through the subscription center—or attributes you otherwise applied to a person. However, a person might not have set preferences, or you may have changed topics since the last time a person set their preferences.
For these cases, we also include a _cio_subscription_preferences_computed
attribute containing all of a person’s subscription preferences, including defaults for topics a person hasn’t set preferences for yet. For example, if you have an opt-in topic that a person hasn’t set a preference for, that topic would show false
—even though a person doesn’t have that attribute on their profile.
This is an example of what we show when you look up a person’s attributes.
Use reporting webhooks to track preference changes
If you capture your audience’s attributes in an external CRM or another system, you can use reporting webhooks to get real-time events when people change their subscription preferences.
{
"customer": {
"id": "1",
"attributes": {
"_last_emailed": "1528932553",
"created_at": "1489014595",
"email": "test@example.com",
"id": "1",
"cio_id": "03000001",
"cio_subscription_preferences": "{\"topics\":{\"topic_7\":false,\"topic_8\":false}}",
"_cio_subscription_preferences_computed": "{\"topics\":{\"topic_6\":false,\"topic_7\":false,\"topic_8\":false}}"
},
"timestamps": {
"cio_id": 1489014595,
"_last_emailed": 1528932553,
"created_at": 1489014595,
"email": 1508932553,
"id": 1489014595,
"_cio_subscription_preferences_computed": 0,
"cio_subscription_preferences": 1673987303
},
"unsubscribed": false,
}
}
Filter by subscription preferences
On the People page, you can filter by subscription preferences.
To target the desired people, use the same conditions you would set for data-driven segments.
Metrics for subscription preferences
You can track unsubscribes from topics across campaigns and broadcasts within the Journeys UI or through reporting webhooks. Unsubscribed from topics counts each subscription topic that a user unsubscribed from through a delivered message. As such, you may see a percentage above 100; say you have 4 subscription topics and 5 messages are delivered to five users. Two users unsubscribe from 3 topics each (6 total). We would divide this by the number of delivered messages (5) to get 1.2 or 120% unsubscribed from topics. You can read more about how our subscription center works in Customer.io.
For campaigns and API-triggered broadcasts, you can find data in the Metrics tab under Performance & Delivery Metrics and Message Metrics. Check Unsubscribed from topics in the right hand column of Performance & Delivery Metrics to update the chart. Scroll down to Message Metrics to find the unsubscribed rate per message. Select on the right and check the box for Unsubscribed from topics.
For newsletters, go to the Overview tab. You’ll find Unsubscribed from topics at the top of the table.
You can also go to the Analysis Dashboard to view unsubscribed rates across any campaign, newsletter, and API-triggered broadcast. Check which type of workflows you want to compare at the top. Then select the table icon to add Unsubscribed from topics as a column.
Tracking topic subscriptions over time
You can track the evolution of the volume of subscribed or unsubscribed profiles for a subscription topic by creating data-driven segmentsA group of people who match a series of conditions. People enter and exit the segment automatically when they match or stop matching conditions..
Subscription preferences attribute
Keep in mind that users do not have a subscription preference attribute until their status has been explicitly set, which means it is no longer the default status you set in your subscription center. As such, we’ll have to target attributes based on whether they exist as well as when they equal certain, boolean values.
When creating a data-driven segment, a subscription topic will only show in the dropdown of attributes AFTER at least one person’s preference has been explicitly set for the topic. At this point, the topic will also show as an attribute in the data index.
For this recipe, let’s say a workspace has 2 topics: an opt-out topic and an opt-in topic. Remember that opt-out means people are subscribed by default (they must opt-out to stop receiving messages) and opt-in means people are unsubscribed by default (they must opt-in to receive messaging).
Tracking people that are subscribed to a topic
To track the evolution of subscribers to the 2 topics above, create 2 data-driven segments:
Opt-out topic
For an opt-out topic, people are subscribed if they have not unsubscribed from it, that is, their subscription comes from the default status of the topic (so the attribute doesn’t exist) or if they have explicitly subscribed to the topic (so the attribute exists and equals true).
To track all people who are subscribed to an opt-out topic, set this condition:
Attribute
cio_subscription_preferences.topics.topic_<id>
is NOT equal toFALSE


where topic<id>
corresponds to the topic ID you can find in your workspace’s subscription center or fetch through the App API.
Opt-in topic
For an opt-in topic, people are subscribed only if they have explicitly subscribed to it (so the attribute exists and equals true).
To track all people who are subscribed to an opt-in topic, set this condition:
Attribute
cio_subscription_preferences.topics.topic_<id>
is equal toTRUE
where topic<id>
corresponds to the topic ID you can find in your workspace’s subscription center or fetch through the App API.
Tracking people that are unsubscribed from a topic
To track the evolution of unsubscribed users to the 2 topics above, create 2 data-driven segments:
Opt-out topic
For an opt-out topic, people are unsubscribed only if they have explicitly unsubscribed (so the attribute exists and equals false).
To track all people who are unsubscribed to an opt-out topic, set this condition:
Attribute
cio_subscription_preferences.topics.topic_<id>
is equal toFALSE
where topic<id>
corresponds to the topic ID you can find in your workspace’s subscription center or fetch through the App API.
Opt-in topic
For an opt-in topic, people are unsubscribed by default (so the attribute doesn’t exist) or if they have explicitly unsubscribed from the topic (so the attribute exists and equals false).
To track all people who are unsubscribed to an opt-in topic, set this condition:
Attribute
cio_subscription_preferences.topics.topic_<id>
is NOT equal toTRUE
where topic<id>
corresponds to the topic ID you can find in your workspace’s subscription center or fetch through the App API.
Data-out integrations
You can use our reporting webhooks to send information on whether a person is subscribed or unsubscribed from messaging and whether the status of any of their subscription preferences has changed.


In order to send the specific values of people’s preferences, check “Include body content and headers in all Sent events” to the right of the event checklist.
Subscription preferences aren’t part of our data warehouse and other data-out integrations today. If you need to capture subscription preferences in another integration, let us know!