Check out the latest features and fixes for the Customer.io platform. This page covers releases beginning in 2021. Go to our blog to see a history of releases before 2021!
Want to see what we're working on? Take a look at our roadmap!
Dismiss in-app messages at the right timeMobile sdk
We’ve added functions to all of our SDKs to manually dismiss in-app messages. This is especially helpful in handling custom actions, so you can dismiss messages after your audience interacts with a custom button or link. You can listen for message interactions and then perform dismissals based on the actions users take in your messages.Go to the docs
Customize the order of subscription center topicsMessaging
You can now change the order of your subscription center topics through Workspace Settings > Subscription center > Edit on the Topics table. This can be useful when you add or remove topics or want to rearrange them to reflect a hierarchy of importance.Go to the docs
Relate objects to people in the UIMessaging Ui improvements
You can now add and delete relationships between objects and people in the UI, which allows you to explore objects without engineering. You can use relationships to segment users and to personalize messages with object data.Go to the docs
Securely verify requests for webhook actionsAPI developers Data integrations
You can now verify webhook requests sent through our Send and receive data actions using a key that is separate from your reporting webhooks. To find the signing key in your workspace, go to Settings > Workspace Settings > API & webhook credentials and select the Webhook Signing Key tab. Users with the Admin, Manager, and Author roles can view this key. You can continue to find the key for your reporting webhooks in Data & Integrations > Integrations > Reporting webhooks.Go to the docs
Multi-language support for the subscription centerMessaging
You can now translate your subscription center topics and headers for your audience. You can add translations for 29 languages and decide when to make them live to your users. Go to Workspace settings > Subscription center > Settings to get started.Go to the docs
SSO with Microsoft Azure Active DirectoryData integrations
We now support single sign-on (SSO) with Azure AD. Go to Account Settings > Security > Enable Single Sign-On (SSO) to get started. You must have the Admin role to configure SSO.Go to the docs
Create multiple object typesData integrations Messaging Ui improvements
Brand your global unsubscribe pageUi improvements
You can now update the branding of your global unsubscribe page! Go to Settings > Workspace Settings > Subscription Center to add a logo and/or update the background color of your Unsubscribe button. If you have not enabled our Subscription Center, your users will see this page after selecting Unsubscribe.Go to the docs
Send transactional push notificationsMessaging
Easily create, personalize, and measure your transactional push notifications with our Transactional Push API. Need to add an image or deep link or send in multiple languages? No problem — make updates to your transactional messages without changing a single line of code.Go to the docs
Protecting your account via 2FAAdmin billing
To protect accounts on our platform, we’ve enabled two-factor authentication (2FA) for all accounts that do not use SSO. If you’ve already enabled 2FA via authenticator app, there will be no change to your sign-in pattern. If you have not enabled 2FA via auth app and do not use SSO, you will now verify your log-in attempt through an email from us here at Customer.io. Just make sure you click the emailed link on the same browser and device on which you attempted to sign-in, and you’ll be good to go!Go to the docs
Add dynamic expiration dates to in-app messagesMessaging
You can now use liquid syntax to set the expiration date for an in-app message. Use event properties, profile attributes, snippets, and more. For example, if you want an in-app message to expire based when an online course is scheduled to start, you can use liquid syntax to set the expiration date to
Customer.io Data Pipelines (CDP) now available in early accessCdp
For the past decade, we’ve helped companies use their data to connect with their customers. We know that data management can be a headache and have long recommended using a customer data platform as standard practice. For years we’ve also been building features to help you manage data, including Reverse ETL, custom objects, and a sync to data warehouses. Today we’re announcing the next step in that work: Customer.io Data Pipelines (CDP). CDP connects your customer data to every product in your tech stack, letting you focus on what matters most: building relationships with your customers.
Allow partial updates to subscription preferencesMessaging
You now have more flexibility when setting preferences for subscription topics. You can update some topic preferences for people, while preserving those set for other topics, using JSON dot notation. This applies to CSV import, our create/update person action, and our Track API.
With this update, you can also import each subscription topic preference as its own attribute via CSV.Go to the docs
Official Flutter SDK releaseMobile sdk
Our Flutter SDK has been in beta for the past couple of months. Now that we’ve smoothed out the rough edges, our 1.0 release is ready for use in your production apps.
Our Flutter SDK supports all the same features as our other SDKs, including in-app messaging, support for images and links (rich push), and the ability to send events from your audience’s devices. As an officially-supported SDK, we’ll continue updating our Flutter library to support both OS updates and new features that we expose in Customer.io.Go to the docs
Send pushes to iOS devices with the default soundMobile sdk
When you use our SDKs, you can now send push notifications to iOS devices that use the default system sound, alerting your audience when they get a new message. This affects all of our SDKs that support iOS, including React Native, Flutter, and our Expo plugin.
This only adds support for the default system sound. Our SDKs do not yet support custom sounds.Go to the docs
AMP for emailAPI developers Messaging Ui improvements
We’ve added support for AMP components to our email code editor! Validate AMP and send test emails from within your workspace.
AMP lets your customers complete surveys, RSVP to events, respond to comments, and more within your emails. Visit Amp.dev to find templates and components for your use case.
Toggle these experimental features on in Account Settings to get started: Advanced Code Editor and AMP for Email.Go to the docs
Import Objects and Relationships in Reverse ETL integrationsData integrations
Now you can sync objects (like companies, accounts, or online classes) and relationships as a part of our Reverse ETL database integrations—MySQL, BigQuery, Snowflake, and so on. Now you can easily add objects and relate them to people on a regular interval based on business logic and data that you store outside of Customer.io.Go to the docs
Official In-App Messaging ReleaseMessaging Mobile sdk
We’ve had our in-app solution in beta for a while now, while we smoothed out some rough edges. Now, it’s ready for everybody.
While in beta, we’ve made some major improvements to our in-app solution:
- We’ve improved our UI, making it a little easier to compose in-app messages
- Lowered response times for in-app messages, ensuring that your audience receives messages when they’re most relevant.
- Removed the need for an
organization_idin integrations, so it’s easier to get started with in-app messages.
In-app settings: moved and improvedUi improvements
We moved in-app message templates and branding settings under the Content menu, so you can get there in fewer clicks. But that’s not all. In this release, we also improved the in-app message editor, so that it’s easier to craft your messages.
In the improved editor, you can:
- See all the settings in a block without having to “reveal” or “hide” things.
- See how your padding and font changes affect your message in real time.
- See a list of available font and color settings with examples.
- Rename blocks and cards in your template so it’s easier to explain what each block or group of blocks does.
Rename your in-app messagesUi improvements
We’ve added the ability to rename messages for their intended purpose as you determine your messaging strategy and find specific uses for different kinds of in-app messages. In the near future, we’ll also add the ability to delete in-app message templates!Go to the docs
Customize your subscription centerUi improvements
Now you can set your primary brand color and add a logo to your subscription center page, so it looks like a part of your brand and website. Branding your subscription center gives people confidence in their preferences, so they know that they’re on a page associated with your brand.Go to the docs
Support for object-based segments in campaignsAutomation
We recently released objects—a feature that lets you set relationships between people and groups like accounts, companies, online courses, and so on. As a part of that release, you could create segments based on relationships between objects and people, but you could only use those segments with newsletters. Now you can use these kinds of segments to trigger campaigns! This makes it easy to onboard new people when they join a company, sign up for a new course, and so on!
We’re committed to supporting one-to-many, and eventually many-to-many, relationships using objects. Stay tuned for updates as we continue working on this new feature!Go to the docs
Message limits with automatic retriesAutomation Messaging
Message limits help you make sure that you don’t over-message and annoy your audience. But, previously, messages that went over the limit—Undeliverable messages—could pile up in your workspace. Now you can set an auto-retry interval for messages that hit the limit, and automatically retry messages up to 24 hours after they hit your message limit. This helps you make sure that time-sensitive messages don’t go undelivered!Go to the docs
Objects: a new way to group people togetherAPI developers Automation Data integrations
We now support objects—non-people data that you can relate to people, like accounts that people belong to, flights they’ve booked, online courses they’ve enrolled in, and so on. This release is only the beginning. Support in this release is limited to a single object type and they’re limited to Newsletters, but we’re actively working on this feature to add support for more objects, campaigns, and object-to-object relationships.
Build a subscription center the easy wayAutomation Messaging
We’ve added a subscription center feature that can help you manage your audience’s subscription preferences without having to manage a complicated set of preferences on your own. This feature makes it easy to set up your subscription topics, apply those topics to campaigns or broadcasts, and let your audience decide what topics they want to subscribe to.
Automatic device cleanupAutomation
People login and out of mobile apps all the time, causing device tokens for mobile push services to change. Rather than letting those tokens stack up in your workspace, we’ve started automatically removing ‘devices’ when they’re no longer able to receive push notifications—beginning January 31, 2023.
This helps you maintain a better understanding of your audience’s devices, so you know which devices are relevant and can get a real device count—without having to clean up old devices yourself.Go to the docs
Send batch requests with our v2 APIAPI developers
With our original Track API, you’re limited to a single request per person, and a host of different endpoints. Today we’re releasing our v2 track API, which lets you send groups of requests for different people, and different kinds of actions, to our
/v2/batch/ endpoint. Now you don’t have to maintain different calls for different actions; you can just modify your payload to fit different request cases and send requests in batches.
New Flutter SDK in AlphaMessaging Mobile sdk
In our quest to support your mobile apps, no matter what platform you build them on, we’ve released an alpha version of our Flutter SDK! While this is an alpha, the SDK contains all of the features of our other SDKs, including support for rich push and in-app messages. The alpha label simply means that we’ve been limited to internal testing, and we need your help to make sure that it performs the way you expect it to.
We’re committed to releasing, maintaining, and supporting Flutter. Try out our new SDK and let us know what you think. Your feedback helps us understand your needs, so that we build our SDK(s) and associated features to fit your needs.Go to the docs
Send in-app messages to mobile or web channels with in-app page rulesMessaging Mobile sdk
We’ve made page rules for in-app messages easier to use! Before this update, you needed to set up a complicated workaround to limit an in-app message to to your website or mobile app. Now, when you select your web, iOS, and/or Android channels, we’ll automatically limit messages to the platforms you select. If you don’t select any platforms, your message will appear on whichever platform the person visits first.Go to the docs
True holdout testsAutomation Messaging
A holdout test is a type of A/B Test that lets test whether a message is useful or not. In a holdout test, some members of your audience receive a message and some don’t—but we still calculate conversions for the message, helping you see whether your message affects your conversion rate.
In the past, we had a complicated recipe to perform holdout tests, but it involved sending real messages to a black hole address, which wasn’t ideal. Now you can set up holdout tests with a simple checkbox!Go to the docs
Send transactional messages by Trigger NameData integrations Messaging
In the past, you needed to hunt down the ID of a transactional message before you could use it and actually send messages to your audience. Now you can set a friendly, case-insensitive Trigger Name, and use it to send messages. The Trigger Name makes it easier to find the message you want to send. It can also make your integration more human-readable if you use triggers that represent the kinds of messages you send—like
password reset or
More predictable database-sync intervalsData integrations
In the past, our database sync integrations ran on an interval plus the time it took to complete an import from your database. So if a minute to sync your database and you set your sync interval to an hour, you effectively had a sync interval of 61 minutes, causing your expected sync interval to drift over time.
Now, we attempt to perform sync operations on your exact interval without regard to the time it takes to complete an import operation; if we’re still importing from your database on a sync interval, we’ll skip it (showing a
skipped status in our UI), and try again at the next interval. This adds predictability to your database sync integrations, so you’ll always know when you can expect to see your data in Customer.io.
Multi-language transactional messagesMessaging
We’ve extended multi-language support to our transactional API, so you can easily send transactional messages to your audience in their preferred languages. When you create a transactional message, you can add languages—versions of your email that are localized for different members of your audience. When you send your message, we’ll match your audience’s language attribute to the languages in your message, and people will receive the localized message that best represents them.Go to the docs
Amplitude and Mixpanel IntegrationsAPI developers Data integrations
Store and reuse images with the Asset LibraryUi improvements
You no longer need to upload the same image multiple times to reuse it across messages, nor do you need to host your own images! With our new Asset Library, you can upload images and reuse them across different messages.Go to the docs
Set wildcards for in-app page rulesMessaging Mobile sdk
When you send an in-app message, you can set a page rule determining the page a person needs to visit to see your message. Now you can use the
* wildcard in page rules, so you can load a message containing a word or under a set path. This makes it easier to control where your in-app messages appear, so your audience receives your message on any relevant screens or pages.
With this feature, you can use a path beginning with a set of characters (
begin*), ending with a set of characters (
*end), or in a path (
Expire in-app messages in hours or minutesAutomation Mobile sdk
In-app messages support an expiry value, so that you only show messages to your audience when they’re relevant. But, in the past, we only allowed you to set expiration values in days. Now you can set messages to expire in hours or minutes, helping you send highly relevant, time-sensitive messages to your audience. It can also make it easier to test your SDK integrations with us!
As a part of this release, we’ve also changed the default expiration period from 365 days to 30 days.Go to the docs
Official React Native SDK releaseAPI developers Mobile sdk
Our first official release of our React Native SDK is now available. With our React Native SDK, you can take advantage of Customer.io in your mobile apps without having to maintain separate native platforms for iOS and Android. Implement our SDK in your React Native app to identify your mobile users, send rich push notifications, and send in-app messages—all without writing your own integration from scratch.Go to the docs
Compare conversion events to your trigger eventsAutomation
When you set up a campaign conversion, you can now compare your conversion event to your trigger event. This is a great way to determine the success of your campaigns based on related events.
For example, imagine that you start a campaign when someone begins an educational course; maybe your event is called
course_started, and it has a
course_id that you use to identify different courses you offer. Your campaign’s goal is to help someone finish the exercise, so you need to look for an event called
course_completed with the same
course_id. That kind of comparison is now possible, and you can use it to your advantage to pinpoint highly-specific conversion criteria!
Export delivery content to your data warehouseAPI developers
We’ve updated our data warehouse integrations to version 4, including a new Delivery Content schema containing message contents—so you can maintain a history of the text and images you sent your audience. When you upgrade to the latest version, you’ll be able to export message contents and confirm the bodies and subjects of messages that were rendered and sent to individual users.
See the Delivery Content schema for information about the new table in v4. Go to the documentation link below for help updating to v4.
Upgrade to v4 to use subjects and outputs
We’ve made some minor changes to subjects and outputs a part of our v4 release. If you’re using a previous schema version, we disabled your subjects and outputs on October 31st, 2022. You need to upgrade to schema version 4, to continue syncing outputs and subjects data.
Copy broadcasts and newsletters across workspacesUi improvements
In the past, if you wanted to reuse a newsletter or broadcast in another workspace, you had to create it from scratch. Now you don’t need to do all that work, you can simply copy your newsletters and broadcasts to other workspaces!Go to the docs
We’ve updated our campaign trigger pageMessaging
When you go to create a campaign, you’ll notice some changes to our campaign Trigger page. We’ve redesigned this step in the campaign setup process to make it easier to understand how each trigger works and when you should use them.Go to the docs
Export duplicates and devices for troubleshooting purposesAdmin billing
Have you ever found people with the same email address or phone number in your workspace, and accidentally sent duplicate notifications? Now you can export a list of people who have the same attribute, making it easy to find and deduplicate people or attributes in your workspace.
This feature also adds the ability to export a list of devices. You might export devices to clean up bounced or suppressed devices.Go to the docs
Send rich push messages without writing custom payloadsMessaging
We’re updating our push editor, so you can send rich push notifications containing images, links, and even custom key-value pairs without writing complicated custom JSON payloads. With this update, push previews also update to include images, helping you visualize your push notifications.
We’re rolling the new rich push editor out to accounts over the next week. Contact email@example.com if you want to start using it today.Go to the docs
Wait until an event matches propertiesAutomation
We recently updated our Wait Until action to support different conditions—including waiting until a person performed an event. Now you can set event properties in wait conditions, helping you wait until a person performs an event matching very specific parameters.
For example, if people enter your campaign when they create an appointment, you might send them a reminder before their appointment. You can use an event parameter-based wait condition to make sure that someone hasn’t cancelled their appointment before you send the reminder!Go to the docs
Use nested attributes with our simplified UIAutomation
In a previous release, we exposed the ability to use JSON dot notation to access nested attributes and event properties in segments, filters, etc. But what if you’re not a developer or familiar with JSON? This update adds some simple options that can help folks traverse nested attributes without needing a deep understanding of JSON and related terms!
React Native SDK in Open BetaMobile sdk
You can now install and use a React Native version of our SDKs—including rich push and in-app features. We’re confident in the core features and we don’t expect to introduce breaking changes before we officially release it. But, we have a bit more work to do, a few questions to answer, and we need your help to make sure that we build the SDK to fit your needs. Start using it today and send us your feedback!Go to the docs
Add people in bulk via the APIAPI developers
This release makes it easier to add people to your workspace without making
identify calls for each individual person. Now you can use our App API’s new
/v1/imports endpoints to import a CSV where each row represents a person, letting you add and update a large number of people with a single operation.
Preview messages in your workflowMessaging Ui improvements
We’ve added a preview function for messages in your campaign and broadcast workflows. You can hover over a message action in your workflow to see a preview, so you can always find the right message without clicking into message after message to find the one you really want.
In-App Messages now in open betaAPI developers Messaging Mobile sdk
Email code editor using ParcelAPI developers Messaging
A few weeks ago, we enabled Parcel’s code editor for email as an experimental feature. It’s been so successful that we’ve enabled it for everybody. When you write emails using the code editor, you can now preview your output, take advantage of focus and inspect modes, test your message for responsiveness, and more!Go to the docs