<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Customer.io Docs</title><link>https://docs.customer.io/</link><description>Recent content on Customer.io Docs</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><atom:link href="https://docs.customer.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Integration Directory</title><link>https://docs.customer.io/integrations/directory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/directory/</guid><description>content</description></item><item><title>Message Channels</title><link>https://docs.customer.io/journeys/message-channels/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/message-channels/</guid><description>&amp;nbsp;This section is about messages
If you want to know about campaigns, broadcasts, or transactional messages—the mechanisms in Customer.io that actually trigger workflows and messages—you should go here. Channel Campaigns API-Triggered Broadcasts Newsletters Transactional Email Push In-app Inbox messages SMS WhatsApp Slack Webhooks Email Our most common and customizable platform. We support several email service providers (ESP), or you can use your own, custom SMTP server. You can send email through any workflow or trigger type in Customer.</description></item><item><title>Objects: how they work</title><link>https://docs.customer.io/journeys/objects-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/objects-start/</guid><description>This page covers object types and objects. Object types are the kinds of non-people things that you want to track in Customer.io—like companies, online classes, accounts, etc. An object is an individual thing—a single company, online class, or account—that you want to relate to one or more people.
&amp;nbsp;Check out our plans and how we bill to learn more about object pricing.
How it works Objects let you group and relate data to people in your workspace, like accounts that people belong to, flights they&amp;rsquo;ve booked, or online courses they&amp;rsquo;ve enrolled in.</description></item><item><title>Overview of subscription options</title><link>https://docs.customer.io/journeys/subscriptions-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/subscriptions-overview/</guid><description>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&amp;rsquo;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</description></item><item><title>Overview: Objects vs Collections</title><link>https://docs.customer.io/journeys/getting-started-objects-collections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/getting-started-objects-collections/</guid><description>How it works Customer.io revolves around people. You identify people, set their attributes, and send events representing the things that they do on your websites or in your apps. But you might want to maintain some data independently of people and associate this data with people later. Maybe you manage multiple accounts, and people can belong to one or more accounts; or people in your environment can enroll in educational courses; or you might manage recreational sports leagues that people can join.</description></item><item><title>Personalize messages with liquid</title><link>https://docs.customer.io/journeys/using-liquid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/using-liquid/</guid><description>&amp;nbsp;New to liquid? Check out our tutorial for marketers!
Our tutorial can help you understand the fundamentals of message personalization and how to use your data to send engaging messages that increase conversion rates. When you&amp;rsquo;re ready, you can find examples of liquid for a variety of use cases in Liquid recipes.
How it works Liquid lets you use variables and other logical statements in messages to personalize content. These can be customer attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc.</description></item><item><title>Quick start guide</title><link>https://docs.customer.io/integrations/getting-started/quick-start-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/getting-started/quick-start-guide/</guid><description>1. Set up your JavaScript integration Our JavaScript client feeds data from your website into Customer.io. You&amp;rsquo;ll add *data inAn integration that feeds data into Customer.io. integrations for every system or touchpoint you want to collect data from.
Go to Data &amp;amp; Integrations &amp;gt; Integrations and click Add Integration. Select our JavaScript integration. Enter a Name for the integration and click Submit. You should give your integration a name that helps you and your teammates understand the resource you&amp;rsquo;re capturing data from—like &amp;ldquo;company website&amp;rdquo; or &amp;ldquo;community forums.</description></item><item><title>Understand components</title><link>https://docs.customer.io/journeys/components-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/components-overview/</guid><description>In Design Studio, you can use our out-of-the-box Standard Components and create your own Custom Components.
Standard components Standard components are pre-built blocks that help you build beautiful, engaging messages as quickly as possible. They are the backbone of Design Studio messages — headings, paragraphs, buttons, sections, and more. You&amp;rsquo;ll see a list of available standard components in the insert menu of the visual editor. Once you&amp;rsquo;ve dragged a component onto the canvas, you can style it by adjusting the component&amp;rsquo;s properties.</description></item><item><title>Understand syntax</title><link>https://docs.customer.io/journeys/custom-comp-syntax/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/custom-comp-syntax/</guid><description>&amp;nbsp;Use our Design Studio GPT to create a custom component!
Learn how to best utilize our GPT to create code for reusable, custom content. Required top-level syntax You must include both &amp;lt;script&amp;gt; and &amp;lt;template&amp;gt; tags in your custom component file.
The &amp;lt;script&amp;gt; tag handles logic, properties, and configuration for the component. In the &amp;lt;script&amp;gt; tag, you can:
Write JavaScript logic to help render your &amp;lt;template&amp;gt; HTML. It supports the full JavaScript run-time.</description></item><item><title>Welcome to Design Studio!</title><link>https://docs.customer.io/journeys/design-studio-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/design-studio-overview/</guid><description>In Design Studio, you can:
Build emails with our visual, block-based editor. You can also modify the HTML/CSS as you see fit by switching to the code editor! Build emails using reusable blocks. We offer out-of-the-box blocks called standard componentsA pre-built block that helps you build beautiful, engaging messages as quickly as possible in Design Studio.. You can also create your own reusable blocks called custom componentsA custom block of code with content and properties you can reuse across messages made in Design Studio.</description></item><item><title>Workflow builder</title><link>https://docs.customer.io/journeys/workflow-builder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/workflow-builder/</guid><description>Campaign settings: edit the name, goal, exit conditions, and message settings. Build menu: drag and drop message and action blocks onto the canvas to create your workflow. Canvas: drag blocks here to add them to your workflow. The canvas flows top to bottom. Builder features: open/close the build menu, zoom in or out, add a sticky note for your teammates, export an image of your workflow, or review keyboard shortcuts.</description></item><item><title>3.x -> 4.0.0</title><link>https://docs.customer.io/integrations/sdk/flutter/whats-new/4.0.0-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/whats-new/4.0.0-upgrade/</guid><description>What changed? Version 4.0.0 of the Flutter SDK adds Swift Package Manager (SPM) support as an alternative iOS dependency manager. SPM is Apple&amp;rsquo;s built-in package manager with native Xcode integration, so you don&amp;rsquo;t need to manage a separate Podfile for Customer.io dependencies. When SPM is enabled, the SDK is automatically resolved - no manual Xcode package setup needed for the main app.
CocoaPods continues to work. If you want to stay on CocoaPods, you don&amp;rsquo;t need to change anything.</description></item><item><title>6.x -> 6.4.0</title><link>https://docs.customer.io/integrations/sdk/react-native/whats-new/6.4.0-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/whats-new/6.4.0-upgrade/</guid><description>What changed? Version 6.4.0 adds support for App Groups, which improves the reliability of push delivery metric tracking on iOS. This update is additive—your existing integration continues to work without changes. However, to take advantage of App Groups, you&amp;rsquo;ll need to update your Xcode project configuration and regenerate provisioning profiles if you use manual signing.
Why App Groups? When you send a push notification, the SDK tracks delivery metrics in your Notification Service Extension (NSE).</description></item><item><title>Add components to your message</title><link>https://docs.customer.io/journeys/insert-components/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/insert-components/</guid><description>Insert components You can add standard or custom components to your message by dragging them onto the canvas from the visual editor&amp;rsquo;s Insert menu. Standard Components appear at the top of the menu. Collapse the folder and you&amp;rsquo;ll see Custom Components immediately below. If you haven&amp;rsquo;t created custom components, you&amp;rsquo;ll only have the option to drag in standard components.
Click and hold any component then drag and drop it onto the center canvas.</description></item><item><title>Edit triggers, filters, or frequencies</title><link>https://docs.customer.io/journeys/campaign-changes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/campaign-changes/</guid><description>Both trigger and filter conditions must be met for people to start moving through your campaign&amp;rsquo;s workflow.
Some campaigns types — event, form, important date, legacy segment, and attribute or segment — have a frequency setting which controls how many times the same person can enter a campaign. By default, it&amp;rsquo;s once.
&amp;nbsp;If you edit a trigger or filter and expect people to re-enter a campaign, make sure you check your frequency setting.</description></item><item><title>Keyboard shortcuts</title><link>https://docs.customer.io/journeys/keyboard-shortcuts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/keyboard-shortcuts/</guid><description>There are a number of keyboard shortcuts you can use to access Design Studio functionality. You can see a full list of shortcuts at any time by clicking the Shortcuts button in the bottom right corner of the code editor. Any shortcut that uses CMD on Mac will use CTRL on Windows (and vice versa).
General Name Shortcut Toggle Preferences CMD/CTRL , Toggle Sidebar CMD/CTRL SHIFT B Editors Editor management Name Shortcut Close current editor OPTION W Formatting Name Shortcut Wrap Bold CMD/CTRL B Wrap Italics CMD/CTRL I Wrap Underline CMD/CTRL U Basic editing Name Shortcut Cut line CMD/CTRL X Copy line CMD/CTRL C Paste line CMD/CTRL V Move line up OPTION ↑ Move line down OPTION ↓ Basic editing - Code editor only Name Shortcut Copy line up SHIFT OPTION ↑ Copy line down SHIFT OPTION ↓ Delete line CMD/CTRL SHIFT K Indent line CMD/CTRL ] Outdent line CMD/CTRL [ Toggle line comment CMD/CTRL / Fold current region CMD/CTRL K CMD/CTRL [ Unfold current region CMD/CTRL K CMD/CTRL ] Preview - Code editor only Name Shortcut Toggle Preview CMD/CTRL SHIFT D Toggle Inspect Element CMD/CTRL SHIFT C Toggle Focus Mode CMD/CTRL SHIFT M Find &amp;amp; replace - Code editor only Name Shortcut Find CMD/CTRL F Replace CMD/CTRL OPTION F Find Next CMD/CTRL G Find Previous CMD/CTRL SHIFT G Select all matches OPTION Enter Multi-cursor &amp;amp; selection - Code editor only Name Shortcut Insert cursor OPTION + Click Insert cursor above CMD/CTRL OPTION ↑ Insert cursor below CMD/CTRL OPTION ↓ Select current line CMD/CTRL L</description></item><item><title>Segment</title><link>https://docs.customer.io/integrations/data-in/connections/cdps/segment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/cdps/segment/</guid><description>&amp;nbsp;Do you have a standard Segment destination?
This page helps you use Customer.io with Segment&amp;rsquo;s &amp;ldquo;destination actions&amp;rdquo; feature. If you&amp;rsquo;re using Segment&amp;rsquo;s classic integration with Customer.io, and you don&amp;rsquo;t want to upgrade, see the Segment Destination (classic) page. Unlike our standard Segment Destination integration, the Destination Actions integration supports anonymous events. Segment&amp;rsquo;s Destination Actions feature lets you filter the events that you send to Customer.io, helping you determine exactly what data you want to send to your destination.</description></item><item><title>3.x -> 3.5.0</title><link>https://docs.customer.io/integrations/sdk/flutter/whats-new/3.5.0-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/whats-new/3.5.0-upgrade/</guid><description>What changed? Version 3.5.0 adds support for App Groups, which improves the reliability of push delivery metric tracking on iOS. This update is additive—your existing integration continues to work without changes. However, to take advantage of App Groups, you&amp;rsquo;ll need to update your Xcode project configuration and regenerate provisioning profiles if you use manual signing.
Why app groups? When you send a push notification, the SDK tracks delivery metrics in your Notification Service Extension (NSE).</description></item><item><title>5.x -> 6.0.0</title><link>https://docs.customer.io/integrations/sdk/react-native/whats-new/6.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/whats-new/6.x-upgrade/</guid><description>What changed? Version 6.0.0 removes support for React Native&amp;rsquo;s legacy architecture. This aligns with React Native&amp;rsquo;s move to exclusively support their new architecture. You must migrate your app to use React Native&amp;rsquo;s new architecture to use this and future versions of the SDK.
Do you need to update to this version? We recommend updating to the latest SDK version. However, if your app uses the old React Native architecture and you&amp;rsquo;re not ready to migrate, you can continue using version 5.</description></item><item><title>Manage your files</title><link>https://docs.customer.io/journeys/file-manager/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/file-manager/</guid><description>Overview To access your dashboard, click Design Studio from the left navigation.
From there, you can:
Switch between your message files and global styles at the top. Create, edit, or delete your emails, templates, and components. Search and filter for existing files. To manage assets, like logos and images, go to Content &amp;gt; Assets. Learn more about managing your assets and what file types and sizes we support. You can also upload and optimize images from a Design Studio email.</description></item><item><title>Objects: video tutorials</title><link>https://docs.customer.io/journeys/objects-video-tutorials/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/objects-video-tutorials/</guid><description>Introduction to objects Overview of objects in your workspace Using objects for SaaS/B2B use cases In this example, our Product Manager Cam shows you how to message admins when a new member joins their accounts. Cam created a campaign that triggers each time a person joins an account (i.e. for each new relationship). The person who joins the account is different from the people who should receive the campaign, which applies to many other use cases, like:</description></item><item><title>Set global styles</title><link>https://docs.customer.io/journeys/set-styles/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/set-styles/</guid><description>You&amp;rsquo;ll add global styles—your colors, fonts, spacing, and radii—then assign them to standard elements—headings, paragraphs, links, and buttons.
This way, your components will default to styles that best support your brand, making it easy to keep your messages consistent no matter the content, or how many people are making edits.
&amp;nbsp;Global styles now apply to in-app messages!
Styles apply differently to in-app messages than they do to emails, so make sure you check out our article on using global styles with in-app messages.</description></item><item><title>Edit goals</title><link>https://docs.customer.io/journeys/goal-changes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/goal-changes/</guid><description>Changing conversion criteria does not change past conversion data If you change conversion criteria, we do not retroactively count conversions. Conversion metrics only include people who convert after you add or change conversion criteria. Updating conversion criteria will not change your conversion metrics for messages that were previously marked as converted.
Change the underlying configuration of a campaign&amp;rsquo;s conversion-criteria segment People currently in your campaign who already matched the new goal conditions will not be retroactively marked as converted.</description></item><item><title>2.x -> 3.0.0</title><link>https://docs.customer.io/integrations/sdk/flutter/whats-new/3.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/whats-new/3.x-upgrade/</guid><description>What changed? Version 3.x introduces a Firebase wrapper that improves compatibility with Firebase Cloud Messaging (FCM).
What needs to change? You need to add the CioFirebaseWrapper import to your Swift files that use CioMessagingPushFCM.
Add the Firebase wrapper import to your AppDelegate.swift file:
import UIKit import Flutter import CioMessagingPushFCM import CioFirebaseWrapper // Add this import for FCM users import FirebaseMessaging import FirebaseCore @main class AppDelegateWithCioIntegration: CioAppDelegateWrapper&amp;lt;AppDelegate&amp;gt; {} Troubleshooting If you see build errors related to Firebase after upgrading:</description></item><item><title>4.x -> 5.0.0</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/5.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/5.x-upgrade/</guid><description>What changed? Version 5.x introduces a Firebase wrapper that improves compatibility with Firebase Cloud Messaging (FCM) and other Firebase services in your app.
Do you need to update to this version? You need to update to this version if you use FCM (Firebase Cloud Messaging) for push notifications
Update process Add the CioFirebaseWrapper import to your Swift files that use CioMessagingPushFCM.
Add the Firebase wrapper import to your AppDelegate.swift file:</description></item><item><title>4.x -> 5.0.0</title><link>https://docs.customer.io/integrations/sdk/react-native/whats-new/5.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/whats-new/5.x-upgrade/</guid><description>What changed? Version 5.x introduces a Firebase wrapper that improves compatibility with Firebase Cloud Messaging (FCM) and other Firebase services in your app.
Do you need to update to this version? You need to update to this version if you use FCM (Firebase Cloud Messaging) for push notifications
Update process Add the CioFirebaseWrapper import to your Swift files that use CioMessagingPushFCM.
Add the Firebase wrapper import to your AppDelegate.swift file:</description></item><item><title>Add conditionals &amp; directives</title><link>https://docs.customer.io/journeys/directives/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/directives/</guid><description>&amp;nbsp;Use our Design Studio GPT to create a custom component!
Learn how to best utilize our GPT to create code for reusable, custom content. Use directives in HTML, standard components, custom component templates and our optional, top-level elements of your email to set attributes dynamically and conditionally add/remove them. Every directive begins with #.
For instance, you can use #if, #else-if, and #else for conditionally displaying these tags:
&amp;lt;script&amp;gt; const useExternal = true; &amp;lt;/script&amp;gt; &amp;lt;link #if=&amp;#34;useExternal&amp;#34; rel=&amp;#34;stylesheet&amp;#34; href=&amp;#34;https://example.</description></item><item><title>Dark mode</title><link>https://docs.customer.io/journeys/dark-mode/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/dark-mode/</guid><description>Why set dark mode styles? Dark mode is increasingly the default setting across devices and email clients. As customer expectations shift toward modern design standards, supporting dark mode helps:
Reduce broken email experiences by providing intentional styling Increase readability with properly contrasted colors designed for dark backgrounds Meet accessibility standards and user preferences Reduce support complaints about poor email rendering in dark mode Where to set dark mode styles You can set default, global dark mode styles in Styles.</description></item><item><title>Get started</title><link>https://docs.customer.io/journeys/code-editor-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/code-editor-overview/</guid><description>This guide gives you a tour of the code editor so you can navigate the workspace, write and structure your message, and use built-in tools to validate and troubleshoot your work.
The code editor has three main areas:
File Manager: navigate between messages, templates, and components Editor: write your HTML, plain text, AMP, and transformer logic Preview: render your message and access developer tools for testing Navigate between your files To the left of the code editor, you&amp;rsquo;ll find the File Manager.</description></item><item><title>Get started</title><link>https://docs.customer.io/journeys/visual-editor-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/visual-editor-overview/</guid><description>Here’s a quick guide to what&amp;rsquo;s available in the visual editor, and how each part helps you build your message. It has four key areas—the Insert menu, Layers menu, Canvas, and Properties menu. Together, they enable you to add and style content without code.
For more on previewing your message for accessibility and responsiveness, check out Preview email in Design Studio.
If you get stuck, reach out to our agent! Click at the top of your workspace to get started.</description></item><item><title>Global unsubscribes</title><link>https://docs.customer.io/journeys/unsubscribes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/unsubscribes/</guid><description>&amp;nbsp;Check out our subscription center!
This article covers global unsubscribes. Visit our subscription center documentation to learn how to give customers more granular control over the messages they receive. Our subscription functionality doesn&amp;rsquo;t apply to in-app messages; rather, you&amp;rsquo;ll want to learn how to target the right people with in-app messages.
Learn more about how people can unsubscribe from SMS, WhatsApp, or push notifications as channels.
How it works In your emails, you need to add liquidA syntax that supports variables, letting you personalize messages for your audience.</description></item><item><title>How segments work</title><link>https://docs.customer.io/journeys/segments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/segments/</guid><description>Overview Here&amp;rsquo;s an overview of segments in Customer.io:
And here&amp;rsquo;s a more interactive look at creating a manual segment and data-driven segment:
Segments are named groups of people who share characteristics or behaviors. A Segment can have many people and a person can belong to many segments.
You can use segments as recipient lists, campaign triggers, filters, conversion criteria and more. Whenever you need to reference a subset of the people in your workspace, you&amp;rsquo;ll use a segment.</description></item><item><title>How to add team members</title><link>https://docs.customer.io/accounts-and-workspaces/intro-account-access/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/intro-account-access/</guid><description>Overview In Account Settings &amp;gt; Team Members, you can add team members to collaborate on campaigns, help with integrations, and more across your workspaces. Customer.io does not charge for team members, so feel free to grant access to anyone that you need! Only Account Admins can add team members. And each account can have up to 300 team members across all workspaces.
For each team member, you&amp;rsquo;ll need to decide the level of access they should have to your account and to each of your workspaces.</description></item><item><title>How to collaborate</title><link>https://docs.customer.io/journeys/collaborate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/collaborate/</guid><description>Overview Design Studio offers you and your teammates many tools for collaborating on your messages—you can share, export, or capture a screenshot of your work, create rounds of feedback, and access version history.
You can also send a test to see how the message looks in your inboxes.
&amp;nbsp;Only one person can edit a Design Studio message at a time.
Design Studio doesn&amp;rsquo;t offer live, cross-team collaboration. If someone else is working on a message when you enter the visual or code editor, you&amp;rsquo;ll be prompted to Take over Editing or View Only.</description></item><item><title>How to create &amp; edit a component</title><link>https://docs.customer.io/journeys/create-custom-component/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/create-custom-component/</guid><description>Overview You can create a custom component to reuse across emails in a few ways:
Create and save a component from the visual editor Prompt our GPT to generate your component Create one from scratch using our templating language Save a component from the visual editor Create and save custom components from the visual editor to reuse in subsequent emails. This way you can create things like headers and footers once, without having to write HTML/CSS!</description></item><item><title>Liquid upgrade</title><link>https://docs.customer.io/journeys/liquid-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/liquid-upgrade/</guid><description>&amp;nbsp;What liquid version are you on?
If your Customer.io account was created on or after Nov 28, 2023, you are using the latest liquid version for all messages. If your Customer.io account was created before Nov 28, 2023, see Changing your liquid version for more info. See below for the differences between the two versions.
How to check your liquid version Within any message editor, hover over the last saved date at the top to see the liquid version you&amp;rsquo;re using.</description></item><item><title>LLM actions: Generate data &amp; decisions with AI</title><link>https://docs.customer.io/journeys/llm-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/llm-actions/</guid><description>&amp;nbsp;Not seeing this AI feature?
Make sure &amp;ldquo;Customer.io AI&amp;rdquo; is enabled in Privacy, Data, &amp;amp; AI settings. Reach out to an Account Admin if you can&amp;rsquo;t edit the toggle. How it works LLM actions let you prompt an AI model as a part of a campaign and store the output as attributes so you can use them later in the campaign. You can personalize messages, enrich data, and create conditions to help you reach the right audience.</description></item><item><title>MJML framework</title><link>https://docs.customer.io/journeys/transformer-mjml/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transformer-mjml/</guid><description>Add MJML to code editor To use MJML in your message:
Go to Transformers &amp;gt; Framework and turn on MJML Or, append your message file with a .mjml extension. If you create a message from scratch ending with .mjml, the editor will auto-populate this template to help you get started:
&amp;lt;mjml lang=&amp;#34;en&amp;#34;&amp;gt; &amp;lt;mj-head&amp;gt; &amp;lt;mj-title&amp;gt;Subject goes here&amp;lt;/mj-title&amp;gt; &amp;lt;mj-preview&amp;gt;Preview text goes here&amp;lt;/mj-preview&amp;gt; &amp;lt;/mj-head&amp;gt; &amp;lt;mj-body&amp;gt; &amp;lt;!-- Content goes here --&amp;gt; &amp;lt;/mj-body&amp;gt; &amp;lt;/mjml&amp;gt; Add HTML to MJML ending tags Ending tags, like &amp;lt;mj-raw&amp;gt;, let you add HTML inside an MJML block.</description></item><item><title>Storing and using JSON</title><link>https://docs.customer.io/journeys/getting-started-with-json/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/getting-started-with-json/</guid><description>How it works JSON stands for JavaScript Object Notation. It&amp;rsquo;s a common format to send and store data over the internet, and the way in which you&amp;rsquo;ll send, store, and reference data in Customer.io! If you&amp;rsquo;re a Customer.io user, you&amp;rsquo;re already using JSON—even if you don&amp;rsquo;t know it! For example, when you send an eventSomething that a person in your workspace did. Events can trigger campaigns, add people to segments, etc, and you can use properties from events to personalize messages.</description></item><item><title>Understand and style standard components</title><link>https://docs.customer.io/journeys/standard-components/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/standard-components/</guid><description>We also offer some standard components behind the scenes to help you structure your email, enhance accessibility, style imported emails, and import Google fonts.
How styling works Standard components pull from your global styles so you can create a consistent brand across your messages, but you can individually overwrite these styles too.
To style a standard component, click the component on the canvas of the visual editor to open the Properties panel.</description></item><item><title>Why aren't people entering my campaign?</title><link>https://docs.customer.io/journeys/troubleshoot-campaign-entrance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/troubleshoot-campaign-entrance/</guid><description>Note that people who are unsubscribed from topics or from all messages can still trigger a campaign; they just won&amp;rsquo;t receive messages from that campaign. See issues with messages for more information.
1. Check if the campaign is live If no one is entering your campaign, check that it&amp;rsquo;s live first. You&amp;rsquo;ll see &amp;ldquo;Running&amp;rdquo; next to the campaign title. If it&amp;rsquo;s still in a &amp;ldquo;Starting&amp;rdquo; state, people may not be able to trigger the campaign yet.</description></item><item><title>Build segments with AI</title><link>https://docs.customer.io/journeys/segment-builder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/segment-builder/</guid><description>How it works Our agent uses publicly available data about your company and data from your workspace to suggest conditions for targeting specific audiences. Provide a brief prompt to generate segments that align with your goals.
You can build a segment from any page using the agent. Click to get started.
We prioritize your data privacy Our AI-powered segment suggestions are based solely on attribute names from your workspace, such as profile and event attributes, but never the values.</description></item><item><title>Data-driven segments</title><link>https://docs.customer.io/journeys/data-driven-segments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/data-driven-segments/</guid><description>Create a data-driven segment This process explains how to create a segment on the Segments page, but can also create a segmentA group of people who match a series of conditions. People enter and exit the segment automatically when they match or stop matching conditions. when you create a campaign (using the They meet conditions option). The same basic steps apply there as well. If you create a new segment when working on a campaign, you may want to check your segment before you start the campaign just to make sure that your conditions match the right people for your campaign.</description></item><item><title>Edit workflows</title><link>https://docs.customer.io/journeys/workflow-changes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/workflow-changes/</guid><description>Change or delete delays Shorten a delay If you shorten a delay, like from 7 days to 5 days, all people waiting in that particular delay are re-evaluated. You will see a processing circle while this is happening.
People who have already waited for more than the new delay (in our case, more than 5 days) will immediately move to the next action. Everyone else continues waiting in the delay for the required period.</description></item><item><title>Account Verification</title><link>https://docs.customer.io/accounts-and-workspaces/account-verification/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/account-verification/</guid><description>The result of this process is that you get great deliverability and peace of mind, while we maintain our standard of high quality and integrity as an email service provider.
&amp;nbsp;Emails send to your test delivery address before you&amp;rsquo;re verified
You can activate a campaign or send a broadcast, but emails will send to your test delivery address, not your audience, before your account is verified. All other message types will send normally.</description></item><item><title>Loop through data</title><link>https://docs.customer.io/journeys/component-loops/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/component-loops/</guid><description>&amp;nbsp;Use our Design Studio GPT to create a custom component!
Learn how to best utilize our GPT to create code for reusable, custom content. Loop through numbers Numerical iteration is 0 indexed - the first number is 0.
&amp;lt;template&amp;gt; &amp;lt;ul&amp;gt; &amp;lt;li #each=&amp;#34;n in 10&amp;#34;&amp;gt;${n}&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;/template&amp;gt; Using this component in an email:
&amp;lt;html&amp;gt; &amp;lt;body&amp;gt; A simple email &amp;lt;my-first-component&amp;gt;&amp;lt;/my-first-component&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; The output source becomes:
&amp;lt;html&amp;gt; &amp;lt;body&amp;gt; A simple email &amp;lt;ul&amp;gt; &amp;lt;li&amp;gt;0&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;1&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;2&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;3&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;4&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;5&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;6&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;7&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;8&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;9&amp;lt;/li&amp;gt; &amp;lt;/ul&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Loop through arrays You can loop through an array to dynamically generate repeated elements—like list items—based on your data.</description></item><item><title>Add a Classic Track API integration</title><link>https://docs.customer.io/integrations/data-in/connections/classic-api/journeys-sources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/classic-api/journeys-sources/</guid><description>&amp;nbsp;Just getting started? Use our newer source integrations instead!
This page is about our Track API and integration sources that rely on the Track API. If you&amp;rsquo;re new to Customer.io, you should integrate with our newer API or native integrations instead. Our newer API and integrations support batching, retry logic, and are where we&amp;rsquo;re focusing our development efforts. To send data from the Journeys Track API, or integrations based on the Track API, to a destination outside of Customer.</description></item><item><title>Anonymous people</title><link>https://docs.customer.io/journeys/anonymous-people/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/anonymous-people/</guid><description>How it works Most of the things you do in Customer.io revolve around people you know: they log into your service, make purchases, sign up for your newsletters, and so on. And, because you know who they are—you have their email addresses, names, and other information—you can send them messages.
But what about people you don&amp;rsquo;t know? Plenty of people visit your website or open your app without logging in or otherwise providing identifying information.</description></item><item><title>Audit logs</title><link>https://docs.customer.io/accounts-and-workspaces/audit-logs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/audit-logs/</guid><description>To track changes to your workspace data, like updates to people or custom objects, go to your Activity Logs.
Overview As an Account Admin, you have access to two audit logs:
Go to Account settings &amp;gt; Audit logs to see Account-level audit logs. These provide security-related information like team member session data, changes in permissions, and deletion of API keys. Go to Workspace settings &amp;gt; Audit logs to see Workspace-level audit logs.</description></item><item><title>Customer.io API</title><link>https://docs.customer.io/integrations/data-in/connections/http-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/http-api/</guid><description>With the Pipelines API (shown in the UI as the Customer.io API source), you can send data from anywhere directly to Customer.io and other downstream integrations without using an SDK. See our API documentation for more information about the Pipelines APIs.
&amp;nbsp;Examples on this page use our US region
If you&amp;rsquo;re in our EU region, you&amp;rsquo;ll use endpoints beginning with https://cdp-eu.customer.io/v1/ instead. Connect a Customer.io Pipelines API source Go to Data &amp;amp; Integrations &amp;gt; Integrations and click Add Integration.</description></item><item><title>Journeys Message Metrics</title><link>https://docs.customer.io/integrations/data-in/connections/cio-journeys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/cio-journeys/</guid><description>How it works Customer.io automatically captures events relating to message activity—the messages you send, whether or not people open them, when people click them, and so on. So when you look at your integrations, you&amp;rsquo;ll see Customer.io (Workspaces) as a data source that you can connect to other services.
Treating incoming metrics as a source lets you send data to destinations that help you aggregate and analyze audience data, so you follow and chart how your audience reacts to different message channels in your marketing stack.</description></item><item><title>Mobile App Sources</title><link>https://docs.customer.io/integrations/data-in/connections/mobile/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/mobile/</guid><description>How mobile SDKs work When you integrate our mobile SDK into your app, you&amp;rsquo;ll gain support for push notifications, in-app messages, and the ability to send your app data to both Customer.io and downstream integrations like your analytics platform.
We currently have SDKs for iOS (Swift), Android, React Native, Expo, and Flutter.
flowchart LR a(Your app)-->|User activity (identify, track, etc)|b((Customer.io)) b-.->d(Your analytics platform) b-.->e(Your CRM) Minimum versions Our SDKs became &amp;ldquo;integration sources&amp;rdquo; in fairly recent releases.</description></item><item><title>Quick Start Guide</title><link>https://docs.customer.io/integrations/sdk/android/quick-start-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/quick-start-guide/</guid><description>&amp;nbsp;Our MCP server can help you get started
Our MCP server includes SDK-installation tools that can help you get integrated quickly with Customer.io and troubleshoot any issues you might have. See Set up an MCP server to get started. Setup Process Overview For native Android apps, our Android SDK sets you up to send push notifications and track user activity. You&amp;rsquo;ll need to add Customer.io SDK to your project, configure it with your API key, and set up push notification handling.</description></item><item><title>Quick Start Guide</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/quick-start-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/quick-start-guide/</guid><description>&amp;nbsp;Our MCP server can help you get started
Our MCP server includes SDK-installation tools that can help you get integrated quickly with Customer.io and troubleshoot any issues you might have. See Set up an MCP server to get started. Setup process overview Flutter lets you build native mobile apps using Dart. Our Flutter SDK helps you integrate Customer.io to identify people, track their activity, and send both push notifications and in-app messages.</description></item><item><title>Quick Start Guide</title><link>https://docs.customer.io/integrations/sdk/flutter/quick-start-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/quick-start-guide/</guid><description>&amp;nbsp;Our MCP server can help you get started
Our MCP server includes SDK-installation tools that can help you get integrated quickly with Customer.io and troubleshoot any issues you might have. See Set up an MCP server to get started. Setup process overview Flutter lets you build native mobile apps using Dart. Our Flutter SDK helps you integrate Customer.io to identify people, track their activity, and send both push notifications and in-app messages.</description></item><item><title>Quick Start Guide</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/quick-start-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/quick-start-guide/</guid><description>&amp;nbsp;Our MCP server can help you get started
Our MCP server includes SDK-installation tools that can help you get integrated quickly with Customer.io and troubleshoot any issues you might have. See Set up an MCP server to get started. Setup process overview Our SDK lets you build native mobile apps for iOS. When you&amp;rsquo;re done, you&amp;rsquo;ll be able to identify people, track their activity, and send both push notifications and in-app messages.</description></item><item><title>Quick Start Guide</title><link>https://docs.customer.io/integrations/sdk/ios/quick-start-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/quick-start-guide/</guid><description>&amp;nbsp;Our MCP server can help you get started
Our MCP server includes SDK-installation tools that can help you get integrated quickly with Customer.io and troubleshoot any issues you might have. See Set up an MCP server to get started. Setup process overview Our SDK lets you build native mobile apps for iOS. When you&amp;rsquo;re done, you&amp;rsquo;ll be able to identify people, track their activity, and send both push notifications and in-app messages.</description></item><item><title>Quick Start Guide</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/quick-start-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/quick-start-guide/</guid><description>&amp;nbsp;Our MCP server can help you get started
Our MCP server includes SDK-installation tools that can help you get integrated quickly with Customer.io and troubleshoot any issues you might have. See Set up an MCP server to get started. Setup process overview React Native lets you build native mobile apps with JavaScript. Our React Native SDK helps you integrate Customer.io to identify people, track their activity, and send both push notifications and in-app messages.</description></item><item><title>Quick Start Guide</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/quick-start-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/quick-start-guide/</guid><description>&amp;nbsp;Our MCP server can help you get started
Our MCP server includes SDK-installation tools that can help you get integrated quickly with Customer.io and troubleshoot any issues you might have. See Set up an MCP server to get started. Setup process overview React Native lets you build native mobile apps with JavaScript. Our React Native SDK helps you integrate Customer.io to identify people, track their activity, and send both push notifications and in-app messages.</description></item><item><title>Quick Start Guide</title><link>https://docs.customer.io/integrations/sdk/react-native/quick-start-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/quick-start-guide/</guid><description>&amp;nbsp;Our MCP server can help you get started
Our MCP server includes SDK-installation tools that can help you get integrated quickly with Customer.io and troubleshoot any issues you might have. See Set up an MCP server to get started. Setup process overview React Native lets you build native mobile apps with JavaScript. Our React Native SDK helps you integrate Customer.io to identify people, track their activity, and send both push notifications and in-app messages.</description></item><item><title>Welcome to Customer.io</title><link>https://docs.customer.io/get-started/welcome/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/get-started/welcome/</guid><description>How Customer.io Works In Customer.io, you&amp;rsquo;ll spend most of your time setting up campaigns to send messages to people. But you&amp;rsquo;ll get the most out of Customer.io when you integrate your data with Customer.io and make us a central part of your martech/messaging stack. By getting your data into Customer.io, enriching it, and sending it out to other places where you activate it, you can focus on your messaging strategy without having to jump from platform to platform.</description></item><item><title>2.x -> 2.2</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/whats-new/2.2-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/whats-new/2.2-upgrade/</guid><description>Key Changes The primary change in version 2.2 is the introduction of the wrapper pattern for handling push notifications on iOS. This change:
Eliminates method swizzling: No more automatic method replacement Simplifies setup: Less boilerplate code required Improves reliability: More predictable behavior See the instructions below to update your Flutter app&amp;rsquo;s iOS configuration.
Upgrading to SDK 2.2 Update your dependencies:
Update your pubspec.yaml file:
dependencies: customer_io: ^2.2.0 Run dependency update:</description></item><item><title>2.x -> 2.2</title><link>https://docs.customer.io/integrations/sdk/flutter/whats-new/2.2-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/whats-new/2.2-upgrade/</guid><description>Key Changes The primary change in version 2.2 is the introduction of the wrapper pattern for handling push notifications on iOS. This change:
Eliminates method swizzling: No more automatic method replacement Simplifies setup: Less boilerplate code required Improves reliability: More predictable behavior See the instructions below to update your Flutter app&amp;rsquo;s iOS configuration.
Upgrading to SDK 2.2 Update your dependencies:
Update your pubspec.yaml file:
dependencies: customer_io: ^2.2.0 Run dependency update:</description></item><item><title>3.x -> 3.13.0</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/whats-new/3.13.0-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/whats-new/3.13.0-upgrade/</guid><description>What changed? The changes are mainly to align our SDK APIs across different platforms. No functional changes to be expected.
Upgrade process Attributes profileAttributes property is deprecated Getter has no replacement, the mobile SDK doesn&amp;rsquo;t expose the user&amp;rsquo;s profile attributes Setter is replaced with setProfileAttributes(attributes: [String: Any]) deviceAttributes property is deprecated Getter has no replacement, the mobile SDK doesn&amp;rsquo;t expose the user&amp;rsquo;s device attributes Setter is replaced with setDeviceAttributes(attributes: [String: Any]) Tracking Identifying a user</description></item><item><title>3.x -> 3.3</title><link>https://docs.customer.io/integrations/sdk/expo/whats-new/3.3-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/whats-new/3.3-upgrade/</guid><description>What changed? Version 3.3 introduces the appGroupId configuration option, which enables App Groups for reliable push delivery metric tracking on iOS.
This update also requires customerio-reactnative version 6.4.0 or later as a peer dependency.
Do you need to update to this version? This update is additive—your existing integration works without changes. We recommend updating if you want to improve the reliability of push delivery metric tracking on iOS.
Update process 1.</description></item><item><title>4.x -> 4.3</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/whats-new/4.3-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/whats-new/4.3-upgrade/</guid><description>Key Changes The primary change in version 4.3 is the introduction of the wrapper pattern for handling push notifications on iOS. This change:
Eliminates method swizzling: No more automatic method replacement Simplifies setup: Less boilerplate code required Improves reliability: More predictable behavior See the instructions below to update your app depending on whether you send push notifications with APN or FCM and whether you use UIKit or SwiftUI.
Update with APN (Apple Push Notification service) UIKit Update your AppDelegate.</description></item><item><title>4.x -> 4.3</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/4.3-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/4.3-upgrade/</guid><description>Key Changes The primary change in version 4.3 is the introduction of the wrapper pattern for handling push notifications on iOS. This change:
Eliminates method swizzling: No more automatic method replacement Simplifies setup: Less boilerplate code required Improves reliability: More predictable behavior See the instructions below to update your app depending on whether you send push notifications with APN or FCM and whether you use UIKit or SwiftUI.
Update with APN (Apple Push Notification service) UIKit Update your AppDelegate.</description></item><item><title>4.x -> 4.3</title><link>https://docs.customer.io/integrations/sdk/react-native/whats-new/4.3-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/whats-new/4.3-upgrade/</guid><description>Key Changes The primary change in version 4.3 is the introduction of the wrapper pattern for handling push notifications on iOS. This change:
Eliminates method swizzling: No more automatic method replacement Simplifies setup: Less boilerplate code required Improves reliability: More predictable behavior See the instructions below to update your app depending on whether you send push notifications with APN or FCM and whether you use UIKit or SwiftUI.
Update with APN (Apple Push Notification service) UIKit Update your AppDelegate.</description></item><item><title>About Reverse ETL</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/about-reverse-etl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/about-reverse-etl/</guid><description>How it works Our data warehouse and database &amp;ldquo;reverse ETL&amp;rdquo; (Extract, Transform, Load) integrations extract data from a data warehouse so you can take advantage of your data in Customer.io and other services downstream. These integrations help you leverage your big data storage in Customer.io. For example, you might write a query representing track events so you can sync records from Snowflake to Mixpanel.
When you set up a reverse ETL integration, you&amp;rsquo;ll set up one or more syncs.</description></item><item><title>About this integration</title><link>https://docs.customer.io/integrations/data-out/connections/salesforce/salesforce-intro/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/salesforce/salesforce-intro/</guid><description>&amp;nbsp;Do you want to capture data from Salesforce?
Check out our Salesforce Source. With the Salesforce data-in and data-out integrations, you can set up a complete, end-to-end integration! Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the About this integration entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.</description></item><item><title>Actable Predictive</title><link>https://docs.customer.io/integrations/data-out/connections/actable-predictive/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/actable-predictive/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Actable Predictive entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Client Id: Your Actable-supplied Client ID.
Client Secret: Your Actable-supplied Client Secret.
Click Enable Destination.
Actions When you&amp;rsquo;re done setting things up, you can go to the Actions tab to see how we map incoming data to your integration.</description></item><item><title>Adobe Target</title><link>https://docs.customer.io/integrations/data-out/connections/adobe-target/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/adobe-target/</guid><description>Getting started: Web integration The Adobe Target &amp;ldquo;Web&amp;rdquo; integration loads Adobe&amp;rsquo;s at.js script alongside our JavaScript client source so that you can upsert user profiles, trigger views, and track events.
Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Adobe Target entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.</description></item><item><title>Algolia Insights</title><link>https://docs.customer.io/integrations/data-out/connections/algolia-insights/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/algolia-insights/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Algolia Insights entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
App Id: Your Algolia Application ID.
Api Key: An API key which has write permissions to the Algolia Insights API</description></item><item><title>Amazon Redshift</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/amazon-redshift/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/amazon-redshift/</guid><description>Best Practices Before you add a Reverse ETL source, you should take some measures to ensure the security of your customers&amp;rsquo; data and limit performance impacts to your database and Customer.io workspace.
Create a new database user/service account. Implement a database user with minimal privileges specifically for Customer.io import/sync operations. This person only requires read permissions with access limited to the tables you want to sync from.
Avoid using your main database instance.</description></item><item><title>Amazon Redshift</title><link>https://docs.customer.io/integrations/data-out/connections/amazon-redshift-data-out/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/amazon-redshift-data-out/</guid><description>&amp;nbsp;We have two integrations!
This integration uses Customer.io as a source, and syncs data from your Customer.io workspace to your data warehouse, including campaign information. Our other integration sends data from multiple sources to your data warehouse. While the other integration captures data from multiple sources, even if those sources don&amp;rsquo;t send data to your workspace, it cannot capture some data from within Customer.io like campaign information. How it works This integration exports individual parquet files for Deliveries, Metrics, Subjects, Outputs, Content, People, and Attributes to your storage bucket.</description></item><item><title>Amazon Redshift (Advanced)</title><link>https://docs.customer.io/integrations/data-out/connections/amazon-redshift/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/amazon-redshift/</guid><description>How it works This integration sends CSV, JSON, or parquet files containing your data to your Amazon Redshift (Advanced) bucket. Then you can ingest the files in your storage bucket to your data warehouse of choice.
We write files for each type of incoming call to your storage bucket every 10 minutes. So you&amp;rsquo;ll have files for identify calls, track calls, and so on. Files are named with an incrementing number, so it&amp;rsquo;s easy to determine the sequence of files, and the order of incoming calls.</description></item><item><title>Amazon S3</title><link>https://docs.customer.io/integrations/data-out/connections/amazon-s3-data-out/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/amazon-s3-data-out/</guid><description>&amp;nbsp;We have two integrations!
This integration uses Customer.io as a source, and syncs data from your Customer.io workspace to your data warehouse, including campaign information. Our other integration sends data from multiple sources to your data warehouse. While the other integration captures data from multiple sources, even if those sources don&amp;rsquo;t send data to your workspace, it cannot capture some data from within Customer.io like campaign information. How it works This integration exports individual parquet files for Deliveries, Metrics, Subjects, Outputs, Content, People, and Attributes to your storage bucket.</description></item><item><title>Amazon S3 (Advanced)</title><link>https://docs.customer.io/integrations/data-out/connections/amazon-simple-storage-service/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/amazon-simple-storage-service/</guid><description>How it works This integration sends CSV, JSON, or parquet files containing your data to your Amazon S3 (Advanced) bucket. Then you can ingest the files in your storage bucket to your data warehouse of choice.
We write files for each type of incoming call to your storage bucket every 10 minutes. So you&amp;rsquo;ll have files for identify calls, track calls, and so on. Files are named with an incrementing number, so it&amp;rsquo;s easy to determine the sequence of files, and the order of incoming calls.</description></item><item><title>Amplitude</title><link>https://docs.customer.io/integrations/data-out/connections/amplitude/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/amplitude/</guid><description>&amp;nbsp;We use Amplitude&amp;rsquo;s v2 API
While we show the schemas that we map data to below, you&amp;rsquo;ll need to check out Amplitude&amp;rsquo;s documentation to learn more about their API. Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Amplitude entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.</description></item><item><title>Amplitude (Message Metrics)</title><link>https://docs.customer.io/integrations/data-out/connections/amplitude-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/amplitude-metrics/</guid><description>How it works This integration sends your audience engagement data—also available as reporting webhooks—to Amplitude, where you can use it alongside your other user and analytics data to gain insight into your audience&amp;rsquo;s behaviors.
Because Amplitude generally expects a unique, immutable user_id in events, we only send events to Amplitude when they represent a person with an id or a the event contains a device_id. We do not send events to Amplitude for people who do not have an id or aren&amp;rsquo;t represented by a device_id.</description></item><item><title>Ask the agent</title><link>https://docs.customer.io/ai/agent/get-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/ai/agent/get-started/</guid><description>Click Agent in the sidebar or click Ask Agent in the bottom right to open a fresh conversation.
You can ask it to do just about anything that you can do in Customer.io. Give it a prompt like:
&amp;ldquo;Create a segment with people that opened an email in the last 90 days.&amp;rdquo; &amp;ldquo;What&amp;rsquo;s the click-to-open rate for my birthday campaign?&amp;rdquo; &amp;ldquo;Of my onboarding and welcome campaigns, which had the lowest deliverability this month?</description></item><item><title>Assign standard roles</title><link>https://docs.customer.io/accounts-and-workspaces/assign-standard-roles/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/assign-standard-roles/</guid><description>Overview You can assign standard roles to team members from Workspace Settings or from Account Settings &amp;gt; Team Members.
A workspace-level role controls the set of permissions a team member has in a single workspace. We offer three standard roles:
Workspace Admin (full access) Author (partial access) Viewer (view-only access) When you assign Author or Viewer roles, you choose whether to limit their access to sensitive data. This helps you keep your account as secure as possible.</description></item><item><title>Attio</title><link>https://docs.customer.io/integrations/data-out/connections/attio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/attio/</guid><description>Our Attio destination creates or updates records for people, users, companies, and workspaces in Attio. This integration helps you keep your Attio workspace up-to-date with the latest information about your customers.
Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Attio entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.</description></item><item><title>Azure blob storage</title><link>https://docs.customer.io/integrations/data-out/connections/ms-azure-data-out/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/ms-azure-data-out/</guid><description>&amp;nbsp;We have two integrations!
This integration uses Customer.io as a source, and syncs data from your Customer.io workspace to your data warehouse, including campaign information. Our other integration sends data from multiple sources to your data warehouse. While the other integration captures data from multiple sources, even if those sources don&amp;rsquo;t send data to your workspace, it cannot capture some data from within Customer.io like campaign information. How it works This integration exports individual parquet files for Deliveries, Metrics, Subjects, Outputs, Content, People, and Attributes to your storage bucket.</description></item><item><title>Bing Ads</title><link>https://docs.customer.io/integrations/data-out/connections/bing-ads/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/bing-ads/</guid><description>Getting started Before you can track conversions or target audiences, you need to create a UET tag in Bing Ads and then add it to the destination settings. Follow the steps within the Bing Ads documentation to create a UET tag.
You’ll only be able to include one Tag ID per source so make sure to associate conversion criteria to the correct Tag ID that is included in your settings.</description></item><item><title>Braze</title><link>https://docs.customer.io/integrations/data-out/connections/braze/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/braze/</guid><description>Web only mode You can set up this integration in &amp;ldquo;web&amp;rdquo; mode. When set up this way, our JavaScript client will load the Braze SDK and send data directly to Braze, bypassing Customer.io entirely.
We don&amp;rsquo;t typically recommend setting things up this way, because:
You won&amp;rsquo;t capture data in Customer.io. As the name suggests, you cannot use this mode with other sources of data (mobile SDKs, server-side libraries, and so on).</description></item><item><title>Braze Cohorts</title><link>https://docs.customer.io/integrations/data-out/connections/braze-cohorts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/braze-cohorts/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Braze Cohorts entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Client Secret: Data Import Key for the client whose cohort this belongs to. Also known as customer key.</description></item><item><title>Campaign concepts &amp; settings</title><link>https://docs.customer.io/journeys/campaigns-in-customerio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/campaigns-in-customerio/</guid><description>If you&amp;rsquo;re new to Customer.io, checkout campaigns, broadcasts, and transactional messages to make sure you&amp;rsquo;re creating the right kind of automation.
How it works A campaign is a workflow to send messages and manipulate data in Customer.io. It consists of four major components:
Trigger: this determines who enters your campaign (trigger and filter conditions) and when (frequency setting). Filters are optional. Goals: the outcome you want your customers to achieve through the campaign.</description></item><item><title>Clevertap</title><link>https://docs.customer.io/integrations/data-out/connections/clevertap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/clevertap/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Clevertap entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Clevertap Account Id: CleverTap Account Id. This can be found under Settings Page.
Clevertap Passcode: CleverTap Passcode. This can be found under Settings Page.</description></item><item><title>Close</title><link>https://docs.customer.io/integrations/data-out/connections/close/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/close/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Close entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Api Key: Your Close API key.
Lead Custom Field Id For Company Id: Enter the ID of a Lead Custom Field that'll be used to store Company ID.</description></item><item><title>CommandBar</title><link>https://docs.customer.io/integrations/data-out/connections/commandbar/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/commandbar/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the CommandBar entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Org Id: The ID of your CommandBar organization.
Deploy: If enabled, CommandBar will be deployed to your site automatically and you can remove the snippet from your source code.</description></item><item><title>Cordial</title><link>https://docs.customer.io/integrations/data-out/connections/cordial/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/cordial/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Cordial entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Api Key: Your Cordial API Key
Endpoint: Cordial API endpoint. Leave default, unless you've been provided with another one.</description></item><item><title>Create a component from scratch</title><link>https://docs.customer.io/journeys/code-custom-component/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/code-custom-component/</guid><description>&amp;nbsp;New to custom components?
If you&amp;rsquo;re new to custom components, check out how to build them using visual blocks or our GPT. This may save you some time! Understand the structure There are two required tags when setting up a component: &amp;lt;script&amp;gt; and &amp;lt;template&amp;gt;. The &amp;lt;script&amp;gt; tag is where you define properties for styles, slots for modifiable content, and other JavaScript logic. The &amp;lt;template&amp;gt; tag is where you create your content and reference variables and slots.</description></item><item><title>Create a stylesheet</title><link>https://docs.customer.io/journeys/component-styling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/component-styling/</guid><description>&amp;nbsp;Use our Design Studio GPT to create a custom component!
Learn how to best utilize our GPT to create code for reusable, custom content. We&amp;rsquo;ve shown you have to define properties with JavaScript in the &amp;lt;script&amp;gt; tag of your custom component, but you may also want to define styles in a stylesheet. In the &amp;lt;style&amp;gt; element, you can define branding, hover styles, responsive styles, dark mode, and more through CSS or by passing in properties defined in the &amp;lt;script&amp;gt; tag.</description></item><item><title>Criteo Audiences</title><link>https://docs.customer.io/integrations/data-out/connections/criteo-audiences/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/criteo-audiences/</guid><description>Getting started Before you can setup your Criteo Audiences destination, you need to create a Criteo API Marketing Solutions app to generate your app credentials. Follow Criteo’s Developer Portal checklist to generate your credentials.
You also need your Criteo Advertiser ID. Talk to your Criteo Account Strategist if you don&amp;rsquo;t know your Advertiser ID.
Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Criteo Audiences entry in the Directory tab.</description></item><item><title>CSS inlining</title><link>https://docs.customer.io/journeys/transformer-css-inlining/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transformer-css-inlining/</guid><description>&amp;nbsp;Only use CSS inlining for emails made with standard HTML
Enabling this transformer on emails with our standard components will not work well and will likely lead to unintended styles.
Click Transformers &amp;gt; CSS Inlining then turn on Inline CSS.
Once enabled, you can customize what styling should be converted or preserved. The state of those toggles will be saved if you deactivate and later reactivate the transformer.
&amp;nbsp;CSS inlining does not convert all styles in Design Studio</description></item><item><title>Customer.io</title><link>https://docs.customer.io/integrations/data-out/connections/customerio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/customerio/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Customer.io entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Site Id: Customer.io site ID. This can be found on your API Credentials page.
Api Key: Customer.io API key.</description></item><item><title>Customer.io APIs</title><link>https://docs.customer.io/integrations/api/customerio-apis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/api/customerio-apis/</guid><description>&amp;nbsp;Use one of our libraries or SDKs!
We have ready-made libraries and SDKs that make it easy to use our APIs and provide other features like in-app messaging, retry logic, and so on. While our APIs can help you get started—and our API documentation includes examples for some of our libraries—you&amp;rsquo;ll almost always do better with a library or SDK. Check out our integration directory for more information. Just getting started?</description></item><item><title>Events</title><link>https://docs.customer.io/journeys/events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/events/</guid><description>How does it work? Where an attributeA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc. Use attributes to target people and personalize messages. represents something you know about a person, an event represents point-in-time data about something a person did. Throughout Customer.io&amp;rsquo;s APIs and SDKs, you&amp;rsquo;ll use the track command to send events.</description></item><item><title>Facebook Conversions API</title><link>https://docs.customer.io/integrations/data-out/connections/facebook-conversions-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/facebook-conversions-api/</guid><description>Getting started To set up the Facebook Conversions API destination, you&amp;rsquo;ll need a Facebook user access token from your business account. See the section below for help creating or getting a token.
Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Facebook Conversions API entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later.</description></item><item><title>Friendbuy</title><link>https://docs.customer.io/integrations/data-out/connections/friendbuy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/friendbuy/</guid><description>There are two versions of this integration You&amp;rsquo;ll see two entries for Friendbuy in our integration catalog, with one labeled Web. We typically recommend that you use the standard integration, the one not labeled &amp;ldquo;Web&amp;rdquo; when possible. The web version of this integration only works with our JavaScript client and does not pass data through Customer.io&amp;rsquo;s servers, which can make it hard to debug your integration, capture a history of events sent to the integration, and so on.</description></item><item><title>FullStory</title><link>https://docs.customer.io/integrations/data-out/connections/fullstory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/fullstory/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the FullStory entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Api Key: FullStory API key Click Enable Destination.
Actions When you&amp;rsquo;re done setting things up, you can go to the Actions tab to see how we map incoming data to your integration.</description></item><item><title>Gainsight PX</title><link>https://docs.customer.io/integrations/data-out/connections/gainsight-px-cloud-action/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/gainsight-px-cloud-action/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Gainsight PX entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Api Key: Gainsight PX API key. You can find this key in the &amp;quot;Administration/Products&amp;quot; screen.
Data Center: The PX data center where your PX subscription is hosted.</description></item><item><title>Get started</title><link>https://docs.customer.io/integrations/data-in/connections/forms/connected-forms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/connected-forms/</guid><description>How it works Our form integrations identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously. the form submitter and assign them attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc.</description></item><item><title>Get started</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/legacy-js/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/legacy-js/getting-started/</guid><description>&amp;nbsp;New here? Try out our newer JavaScript client!
This page is for our JavaScript snippet, which is older and doesn&amp;rsquo;t support some newer features in our JavaScript client library. If you&amp;rsquo;re just getting started with Customer.io, you should use the newer JavaScript client instead! How it works Our web SDK is a JavaScript snippet that helps you identify, send events for, and send in-app messages to people who visit your website(s) or use your web app(s).</description></item><item><title>Get started</title><link>https://docs.customer.io/journeys/in-app-getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/in-app-getting-started/</guid><description>What is an in-app message? An in-app message is a message sent to a user inside your app or on your website. It&amp;rsquo;s distinct from a push notification in that a user must be in your app or on your website to receive it. They can&amp;rsquo;t get your message if they don&amp;rsquo;t open your app or log in to your site.
While we refer to in-app messages as messages, you can make them persistent and use them as banners or other UI elements.</description></item><item><title>Get Started</title><link>https://docs.customer.io/integrations/sdk/android/2.x/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/2.x/getting-started/</guid><description>This page is part of an introductory series to help you get started with the essential features of our SDK. The highlighted step(s) below are covered on this page. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.</description></item><item><title>Get Started</title><link>https://docs.customer.io/integrations/sdk/android/3.x/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/3.x/getting-started/</guid><description>This page is part of an introductory series to help you get started with the essential features of our SDK. The highlighted step(s) below are covered on this page. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.</description></item><item><title>Get Started</title><link>https://docs.customer.io/integrations/sdk/expo/1.x/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/1.x/getting-started/</guid><description>This page is part of an introductory series to help you get started with the essential features of our SDK. The highlighted step(s) below are covered on this page. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "</description></item><item><title>Get Started</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/getting-started/</guid><description>This page is part of an introductory series to help you get started with the essential features of our SDK. The highlighted step(s) below are covered on this page. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "</description></item><item><title>Get Started</title><link>https://docs.customer.io/integrations/sdk/ios/1.x/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/1.x/getting-started/</guid><description>This page is part of an introductory series to help you get started with the essential features of our SDK. The highlighted step(s) below are covered on this page. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.</description></item><item><title>Get Started</title><link>https://docs.customer.io/integrations/sdk/ios/2.x/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/2.x/getting-started/</guid><description>This page is part of an introductory series to help you get started with the essential features of our SDK. The highlighted step(s) below are covered on this page. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.</description></item><item><title>Get Started</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/getting-started/</guid><description>This page is part of an introductory series to help you get started with the essential features of our SDK. The highlighted step(s) below are covered on this page. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "</description></item><item><title>Get Started</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/getting-started/</guid><description>This page is part of an introductory series to help you get started with the essential features of our SDK. The highlighted step(s) below are covered on this page. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "</description></item><item><title>Get Started</title><link>https://docs.customer.io/journeys/line-get-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/line-get-started/</guid><description>Set up LINE Before you connect LINE to Customer.io, you need:
A LINE Official Account with the Messaging API enabled A Messaging API channel in the LINE Developers Console If you haven&amp;rsquo;t done these things yet, follow LINE&amp;rsquo;s getting started guide to create an account and enable their Messaging API.
Get your channel access token To connect LINE to Customer.io, you&amp;rsquo;ll need your LINE API key. This is the channel access token for your Messaging API channel.</description></item><item><title>Get Started</title><link>https://docs.customer.io/journeys/sms-get-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/sms-get-started/</guid><description>How it works While you&amp;rsquo;ll send SMS messages through Customer.io, SMS setup can be a bit complicated. If you send exclusively to people in the US or Canada, you might be able to setup SMS sending—including procuring your sender phone numbers—entirely through Customer.io.
If you send messages to people outside of the US or Canada, you&amp;rsquo;ll need to set up a Twilio account and connect it to Customer.io—which is still very straightforward.</description></item><item><title>Get Started</title><link>https://docs.customer.io/journeys/whatsapp-get-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/whatsapp-get-started/</guid><description>How it works WhatsApp is similar to SMS in that you can send messages to your audience using their phone numbers. But you&amp;rsquo;ll need WhatsApp-approved phone numbers to send messages; these are separate from the phone numbers you use to send SMS messages.
After you&amp;rsquo;ve enabled WhatsApp support, you&amp;rsquo;ll set up templates for your messages. Unlike SMS and other channels, you won&amp;rsquo;t write message content directly in Customer.io; WhatsApp messages are based on templates that you create in WhatsApp (or through Twilio), and then populate in Customer.</description></item><item><title>Getting a phone number</title><link>https://docs.customer.io/journeys/get-a-phone-number/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/get-a-phone-number/</guid><description>Before you can get a phone number and send SMS messages, you&amp;rsquo;ll need to register as a sender, which includes several steps—including making sure that your privacy policy and terms and conditions are updated to reflect your SMS-use case.
We&amp;rsquo;ll help you register as a sender, but it can take 1-2 weeks for carriers to review and approve or deny your request. You need to do the following things before we submit your request to Twilio and respective carriers—so you can register for phone numbers and start sending SMS as quickly as possible.</description></item><item><title>Getting started</title><link>https://docs.customer.io/journeys/inbound-sms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/inbound-sms/</guid><description>How it works SMS messages frequently include keywords that trigger downstream actions—like STOP to opt-out of messages or HELP to understand the things people can do through SMS replies.
Customer.io handles these replies, helping you trigger campaigns and segment your audience based on replies to your messages.
For example, you might ask people to reply to a message with a keyword if they want updates for a particular event or product.</description></item><item><title>Getting Started</title><link>https://docs.customer.io/integrations/data-in/connections/hubspot/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/hubspot/getting-started/</guid><description>How it works This integration sends data from HubSpot to Customer.io on regular intervals called syncs. You&amp;rsquo;ll set up syncs for each kind of data you want to use in Customer.io.
As you set up syncs, you&amp;rsquo;ll map your HubSpot data to Customer.io. These will be the attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc.</description></item><item><title>Getting Started</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/js-source/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/js-source/</guid><description>&amp;nbsp;Are you already integrated with our classic JavaScript snippet?
If you&amp;rsquo;re already integrated with Customer.io, and your calls are prefixed with _cio, you&amp;rsquo;re using our classic JavaScript snippet.
We recommend that you update to the JavaScript client integration described on this page, so that you can take advantage of our latest features. But, if you don&amp;rsquo;t want to update, you&amp;rsquo;ll find documentation for our classic JavaScript snippet here.
How it works Our JavaScript client library helps you send data from your website to Customer.</description></item><item><title>Getting Started</title><link>https://docs.customer.io/integrations/data-in/connections/salesforce/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/salesforce/getting-started/</guid><description>Quick start video Here&amp;rsquo;s a quick overview of the setup process for our incoming Salesforce integration. In this video, we set up Salesforce to send Contacts and Accounts to Customer.io.
Before you begin Before you begin, you should ask yourself how you want to use your Salesforce data. The data that you send to Customer.io—as People, Events, Custom Objects, or Relationships between people and objects—may depend on what you want to do with your data in Customer.</description></item><item><title>Getting Started</title><link>https://docs.customer.io/integrations/data-out/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/getting-started/</guid><description>How it works Data-out integrations let you send data to platforms outside of Customer.io, like analytics platforms, CRMs, support tools, advertising platforms, messaging platforms, and more.
Most of our data-out integrations support all your sources of data. In these cases, data travels into Customer.io and then to your destination. Some data-out integrations, clearly marked with Web in our integration directory, only support data our JavaScript client. In these cases, data travels directly from your website to the destination, bypassing Customer.</description></item><item><title>Getting started: key concepts</title><link>https://docs.customer.io/journeys/transactional-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transactional-api/</guid><description>How it works Transactional messages are messages that your audience implicitly opts into—like purchase receipts, password reset requests, shipping updates, two-factor authentication codes, etc. Your audience expects to receive these messages even if they&amp;rsquo;ve opted out of marketing messages. That makes transactional different from marketing messages, which require explicit opt-in. And this difference isn&amp;rsquo;t just limited to Customer.io; it&amp;rsquo;s governed by laws like the CAN-SPAM Act and GDPR!
When someone does something that requires a transactional message, you&amp;rsquo;ll call our transactional API to send them a message—like when they request a password reset or need a receipt for a purchase.</description></item><item><title>Google Ad Conversions</title><link>https://docs.customer.io/integrations/data-out/connections/google-enhanced-conversions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/google-enhanced-conversions/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Google Ad Conversions entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Customer Id: ID of your Google Ads Account. This should be 10-digits and in XXX-XXX-XXXX format.</description></item><item><title>Google Ads (Gtag)</title><link>https://docs.customer.io/integrations/data-out/connections/google-ads/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/google-ads/</guid><description>&amp;nbsp;Don&amp;rsquo;t use this destination if you use Google Tag Manager
You should only use this destination if your Google Ads account is using Gtag. If you&amp;rsquo;re using Google Tag Manager, don&amp;rsquo;t add the global site tag (gtag.js) in your GTM containers, otherwise you&amp;rsquo;ll end up duplicating Gtag on your site—once through your Customer.io integration and again through Google Tag Manager.
Getting started This destination maps .page() and .track() calls from your website or app to Page Load Conversions and Click Conversions respectively.</description></item><item><title>Google Analytics</title><link>https://docs.customer.io/integrations/data-out/connections/google-analytics-4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/google-analytics-4/</guid><description>Getting started Go to the Data Pipelines tab and click Connections.
Click Add New under Destinations.
Select the Google Analytics destination.
(Optional) Select the sources that you want to connect to this destination. You can always connect sources to your destination later. We&amp;rsquo;ll only show you sources that you can use with your destination.
Configure your destination.
Measurement Id: The Measurement ID associated with a stream. Found in the Google Analytics UI under: Admin &amp;gt; Data Streams &amp;gt; choose your stream &amp;gt; Measurement ID.</description></item><item><title>Google BigQuery</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/google-bigquery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/google-bigquery/</guid><description>Best Practices Before you add a Reverse ETL source, you should take some measures to ensure the security of your customers&amp;rsquo; data and limit performance impacts to your database and Customer.io workspace.
Create a new database user/service account. Implement a database user with minimal privileges specifically for Customer.io import/sync operations. This person only requires read permissions with access limited to the tables you want to sync from.
Avoid using your main database instance.</description></item><item><title>Google BigQuery</title><link>https://docs.customer.io/integrations/data-out/connections/google-bigquery-data-out/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/google-bigquery-data-out/</guid><description>&amp;nbsp;We have two integrations!
This integration uses Customer.io as a source, and syncs data from your Customer.io workspace to your data warehouse, including campaign information. Our other integration sends data from multiple sources to your data warehouse. While the other integration captures data from multiple sources, even if those sources don&amp;rsquo;t send data to your workspace, it cannot capture some data from within Customer.io like campaign information. How it works This integration exports individual parquet files for Deliveries, Metrics, Subjects, Outputs, Content, People, and Attributes to your storage bucket.</description></item><item><title>Google BigQuery (Advanced)</title><link>https://docs.customer.io/integrations/data-out/connections/google-bigquery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/google-bigquery/</guid><description>How it works This integration sends CSV, JSON, or parquet files containing your data to your Google BigQuery (Advanced) bucket. Then you can ingest the files in your storage bucket to your data warehouse of choice.
We write files for each type of incoming call to your storage bucket every 10 minutes. So you&amp;rsquo;ll have files for identify calls, track calls, and so on. Files are named with an incrementing number, so it&amp;rsquo;s easy to determine the sequence of files, and the order of incoming calls.</description></item><item><title>Google Cloud Storage</title><link>https://docs.customer.io/integrations/data-out/connections/gcs-data-out/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/gcs-data-out/</guid><description>&amp;nbsp;We have two integrations!
This integration uses Customer.io as a source, and syncs data from your Customer.io workspace to your data warehouse, including campaign information. Our other integration sends data from multiple sources to your data warehouse. While the other integration captures data from multiple sources, even if those sources don&amp;rsquo;t send data to your workspace, it cannot capture some data from within Customer.io like campaign information. How it works This integration exports individual parquet files for Deliveries, Metrics, Subjects, Outputs, Content, People, and Attributes to your storage bucket.</description></item><item><title>Google Cloud Storage (Advanced)</title><link>https://docs.customer.io/integrations/data-out/connections/google-cloud-storage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/google-cloud-storage/</guid><description>How it works This integration sends CSV, JSON, or parquet files containing your data to your Google Cloud Storage (Advanced) bucket. Then you can ingest the files in your storage bucket to your data warehouse of choice.
We write files for each type of incoming call to your storage bucket every 10 minutes. So you&amp;rsquo;ll have files for identify calls, track calls, and so on. Files are named with an incrementing number, so it&amp;rsquo;s easy to determine the sequence of files, and the order of incoming calls.</description></item><item><title>Google Sheets</title><link>https://docs.customer.io/integrations/data-out/connections/google-sheets-non-etl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/google-sheets-non-etl/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Google Sheets entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Click Enable Destination.
Connect your Google Account to Customer.io Before you can use the Google Sheets destination, you need to grant us access to your sheets.</description></item><item><title>Google Tag Manager (GTM)</title><link>https://docs.customer.io/integrations/data-out/connections/google-tag-manager/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/google-tag-manager/</guid><description>&amp;nbsp;Don&amp;rsquo;t use both the GTAG and GTM destinations
Using both the Google Tag Manager and Google Ads (GTAG) destinations on the same page, with the same pixel ID, will likely result in duplicate events.
Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Google Tag Manager (GTM) entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later.</description></item><item><title>Heap</title><link>https://docs.customer.io/integrations/data-out/connections/heap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/heap/</guid><description>There are two versions of this integration You&amp;rsquo;ll see two entries for Heap in our integration catalog, with one labeled Web. We typically recommend that you use the standard integration, the one not labeled &amp;ldquo;Web&amp;rdquo; when possible. The web version of this integration only works with our JavaScript client and does not pass data through Customer.io&amp;rsquo;s servers, which can make it hard to debug your integration, capture a history of events sent to the integration, and so on.</description></item><item><title>How it works</title><link>https://docs.customer.io/integrations/sdk/android/getting-started/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/getting-started/how-it-works/</guid><description>Our SDKs provide a ready-made integration to identify people who use mobile devices and send them notifications. Before you start using the SDK, you should understand a bit about how the SDK works with Customer.io.
sequenceDiagram participant A as Mobile User participant B as SDK participant C as Customer.io A-->>B: Anonymous User activity B-->>C: &amp;nbsp; A->>B: Logs in (identify method) rect rgb(229, 254, 249) Note over A,C: Now you can Send events and receive messages B-->>C: Person added/updated in CIO C-->>C: Associate anonymous</description></item><item><title>How it works</title><link>https://docs.customer.io/integrations/sdk/expo/getting-started/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/getting-started/how-it-works/</guid><description>Our SDKs provide a ready-made integration to identify people who use mobile devices and send them notifications. Before you start using the SDK, you should understand a bit about how the SDK works with Customer.io.
sequenceDiagram participant A as Mobile User participant B as SDK participant C as Customer.io A-->>B: Anonymous User activity B-->>C: &amp;nbsp; A->>B: Logs in (identify method) rect rgb(229, 254, 249) Note over A,C: Now you can Send events and receive messages B-->>C: Person added/updated in CIO C-->>C: Associate anonymous</description></item><item><title>How it works</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/getting-started/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/getting-started/how-it-works/</guid><description>Our SDKs provide a ready-made integration to identify people who use mobile devices and send them notifications. Before you start using the SDK, you should understand a bit about how the SDK works with Customer.io.
sequenceDiagram participant A as Mobile User participant B as SDK participant C as Customer.io A-->>B: Anonymous User activity B-->>C: &amp;nbsp; A->>B: Logs in (identify method) rect rgb(229, 254, 249) Note over A,C: Now you can Send events and receive messages B-->>C: Person added/updated in CIO C-->>C: Associate anonymous</description></item><item><title>How it works</title><link>https://docs.customer.io/integrations/sdk/flutter/getting-started/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/getting-started/how-it-works/</guid><description>Our SDKs provide a ready-made integration to identify people who use mobile devices and send them notifications. Before you start using the SDK, you should understand a bit about how the SDK works with Customer.io.
sequenceDiagram participant A as Mobile User participant B as SDK participant C as Customer.io A-->>B: Anonymous User activity B-->>C: &amp;nbsp; A->>B: Logs in (identify method) rect rgb(229, 254, 249) Note over A,C: Now you can Send events and receive messages B-->>C: Person added/updated in CIO C-->>C: Associate anonymous</description></item><item><title>How it works</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/getting-started/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/getting-started/how-it-works/</guid><description>Our SDKs provide a ready-made integration to identify people who use mobile devices and send them notifications. Before you start using the SDK, you should understand a bit about how the SDK works with Customer.io.
sequenceDiagram participant A as Mobile User participant B as SDK participant C as Customer.io A-->>B: Anonymous User activity B-->>C: &amp;nbsp; A->>B: Logs in (identify method) rect rgb(229, 254, 249) Note over A,C: Now you can Send events and receive messages B-->>C: Person added/updated in CIO C-->>C: Associate anonymous</description></item><item><title>How it works</title><link>https://docs.customer.io/integrations/sdk/ios/getting-started/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/getting-started/how-it-works/</guid><description>Our SDKs provide a ready-made integration to identify people who use mobile devices and send them notifications. Before you start using the SDK, you should understand a bit about how the SDK works with Customer.io.
sequenceDiagram participant A as Mobile User participant B as SDK participant C as Customer.io A-->>B: Anonymous User activity B-->>C: &amp;nbsp; A->>B: Logs in (identify method) rect rgb(229, 254, 249) Note over A,C: Now you can Send events and receive messages B-->>C: Person added/updated in CIO C-->>C: Associate anonymous</description></item><item><title>How it works</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/getting-started/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/getting-started/how-it-works/</guid><description>Our SDKs provide a ready-made integration to identify people who use mobile devices and send them notifications. Before you start using the SDK, you should understand a bit about how the SDK works with Customer.io.
sequenceDiagram participant A as Mobile User participant B as SDK participant C as Customer.io A-->>B: Anonymous User activity B-->>C: &amp;nbsp; A->>B: Logs in (identify method) rect rgb(229, 254, 249) Note over A,C: Now you can Send events and receive messages B-->>C: Person added/updated in CIO C-->>C: Associate anonymous</description></item><item><title>How it works</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/getting-started/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/getting-started/how-it-works/</guid><description>Our SDKs provide a ready-made integration to identify people who use mobile devices and send them notifications. Before you start using the SDK, you should understand a bit about how the SDK works with Customer.io.
sequenceDiagram participant A as Mobile User participant B as SDK participant C as Customer.io A-->>B: Anonymous User activity B-->>C: &amp;nbsp; A->>B: Logs in (identify method) rect rgb(229, 254, 249) Note over A,C: Now you can Send events and receive messages B-->>C: Person added/updated in CIO C-->>C: Associate anonymous</description></item><item><title>How it works</title><link>https://docs.customer.io/integrations/sdk/react-native/getting-started/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/getting-started/how-it-works/</guid><description>Our SDKs provide a ready-made integration to identify people who use mobile devices and send them notifications. Before you start using the SDK, you should understand a bit about how the SDK works with Customer.io.
sequenceDiagram participant A as Mobile User participant B as SDK participant C as Customer.io A-->>B: Anonymous User activity B-->>C: &amp;nbsp; A->>B: Logs in (identify method) rect rgb(229, 254, 249) Note over A,C: Now you can Send events and receive messages B-->>C: Person added/updated in CIO C-->>C: Associate anonymous</description></item><item><title>HubSpot</title><link>https://docs.customer.io/integrations/data-out/connections/hubspot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/hubspot/</guid><description>There are two versions of this integration You&amp;rsquo;ll see two entries for HubSpot in our integration catalog, with one labeled Web. We typically recommend that you use the standard integration, the one not labeled &amp;ldquo;Web&amp;rdquo; when possible. The web version of this integration only works with our JavaScript client and does not pass data through Customer.io&amp;rsquo;s servers, which can make it hard to debug your integration, capture a history of events sent to the integration, and so on.</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/android/2.x/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/2.x/identify/</guid><description>You must have have the Tracking SDK to use this feature.
implementation &amp;#39;io.customer.android:tracking:&amp;lt;version-here&amp;gt;&amp;#39; This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/android/3.x/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/3.x/identify/</guid><description>You must have have the Tracking SDK to use this feature.
implementation &amp;#39;io.customer.android:tracking:3.11.1&amp;#39; This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/android/tracking/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/tracking/identify/</guid><description>Identify a person Identifying a person:
Adds or updates the person in your workspace. This is basically the same as an identify call to our server-side API.
Saves the person&amp;rsquo;s information on the device. Future calls to the SDK reference the identified person. For example, after you identify a person, any events that you track are automatically associated with that person.
Associates the current device token with the the person.</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/expo/1.x/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/1.x/identify/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/expo/getting-started/#install" click B href "/integrations/sdk/expo/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/expo/identify" click track-events href "/integrations/sdk/expo/track-events/" click register-token href "</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/expo/tracking/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/tracking/identify/</guid><description>Identify a person Identifying a person:
Adds or updates the person in your workspace. This is basically the same as an identify call to our server-side API.
Saves the person&amp;rsquo;s information on the device. Future calls to the SDK reference the identified person. For example, after you identify a person, any events that you track are automatically associated with that person.
Associates the current device token with the the person.</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/identify/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/flutter/getting-started/#install" click B href "/integrations/sdk/flutter/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/flutter/identify" click track-events href "/integrations/sdk/flutter/track-events/" click register-token href "</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/tracking/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/tracking/identify/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/flutter/getting-started/#install" click B href "/integrations/sdk/flutter/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/flutter/identify" click track-events href "/integrations/sdk/flutter/track-events/" click register-token href "</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/flutter/tracking/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/tracking/identify/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/flutter/getting-started/#install" click B href "/integrations/sdk/flutter/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/flutter/identify" click track-events href "/integrations/sdk/flutter/track-events/" click register-token href "</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/ios/1.x/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/1.x/identify/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/ios/2.x/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/2.x/identify/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/tracking/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/tracking/identify/</guid><description>Identify a person Identifying a person:
Adds or updates the person in your workspace. This is basically the same as an identify call to our server-side API. Saves the person&amp;rsquo;s information on the device. Future calls to the SDK reference the identified person. For example, after you identify a person, any events that you track are automatically associated with that person. If you already registered a device token, identifying a person automatically associates the token with the identified person.</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/ios/tracking/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/tracking/identify/</guid><description>Identify a person Identifying a person:
Adds or updates the person in your workspace. This is basically the same as an identify call to our server-side API. Saves the person&amp;rsquo;s information on the device. Future calls to the SDK reference the identified person. For example, after you identify a person, any events that you track are automatically associated with that person. If you already registered a device token, identifying a person automatically associates the token with the identified person.</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/identify/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/react-native/getting-started/#install" click B href "/integrations/sdk/react-native/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/react-native/identify" click track-events href "/integrations/sdk/react-native/track-events/" click register-token href "</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/identify/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't identify people before you initialize the SDK!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/react-native/getting-started/#install" click B href "/integrations/sdk/react-native/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/react-native/identify" click track-events href "/integrations/sdk/react-native/track-events/" click register-token href "</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/tracking/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/tracking/identify/</guid><description>Identify a person Identifying a person:
Adds or updates the person in your workspace. This is basically the same as an identify call to our server-side API.
Saves the person&amp;rsquo;s information on the device. Future calls to the SDK reference the identified person. For example, after you identify a person, any events that you track are automatically associated with that person.
Associates the current device token with the the person.</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/tracking/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/tracking/identify/</guid><description>Identify a person Identifying a person:
Adds or updates the person in your workspace. This is basically the same as an identify call to our server-side API.
Saves the person&amp;rsquo;s information on the device. Future calls to the SDK reference the identified person. For example, after you identify a person, any events that you track are automatically associated with that person.
Associates the current device token with the the person.</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/sdk/react-native/tracking/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/tracking/identify/</guid><description>Identify a person Identifying a person:
Adds or updates the person in your workspace. This is basically the same as an identify call to our server-side API.
Saves the person&amp;rsquo;s information on the device. Future calls to the SDK reference the identified person. For example, after you identify a person, any events that you track are automatically associated with that person.
Associates the current device token with the the person.</description></item><item><title>In-app messages</title><link>https://docs.customer.io/integrations/sdk/android/in-app/in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/in-app/in-app/</guid><description>How it works An in-app message is a message that people see within the app. To set up in app messaging, install and initialize the tracking and messaging-in-app packages.
People won&amp;rsquo;t see your in-app messages until they open your app. If you set an expiry period for your message, and that time elapses before someone opens your app, they won&amp;rsquo;t see your message.
You can also set page rules to display your in-app messages when people visit specific pages in your app.</description></item><item><title>In-app messages</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/in-app-messages/in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/in-app-messages/in-app/</guid><description>How it works An in-app message is a message that people see in your app. People won&amp;rsquo;t see your in-app messages until they open your app. If you set an expiry period for your message, and that time elapses before someone opens your app, they won&amp;rsquo;t see your message.
You can also set page rules to display your in-app messages when people visit specific pages in your app. However, to take advantage of page rules, you need to use screen tracking features.</description></item><item><title>In-app messages</title><link>https://docs.customer.io/integrations/sdk/flutter/in-app-messages/in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/in-app-messages/in-app/</guid><description>How it works An in-app message is a message that people see in your app. People won&amp;rsquo;t see your in-app messages until they open your app. If you set an expiry period for your message, and that time elapses before someone opens your app, they won&amp;rsquo;t see your message.
You can also set page rules to display your in-app messages when people visit specific pages in your app. However, to take advantage of page rules, you need to use screen tracking features.</description></item><item><title>Inbound statuses and activities</title><link>https://docs.customer.io/journeys/inbound-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/inbound-metrics/</guid><description>&amp;nbsp;Have you set up inbound messaging?
You need to set up inbound messaging to see inbound metrics and activities. See Getting started for more information. The Replied status Most messages have statuses like sent, opened, clicked, and so on. For SMS and MMS messages, we also track replied. While sometimes your call to action might be for users to click a link, SMS lets you set an action item as a reply to a message with a particular keyword.</description></item><item><title>Intercom</title><link>https://docs.customer.io/integrations/data-out/connections/intercom/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/intercom/</guid><description>There are two versions of this integration You&amp;rsquo;ll see two entries for Intercom in our integration catalog, with one labeled Web. We typically recommend that you use the standard integration, the one not labeled &amp;ldquo;Web&amp;rdquo; when possible. The web version of this integration only works with our JavaScript client and does not pass data through Customer.io&amp;rsquo;s servers, which can make it hard to debug your integration, capture a history of events sent to the integration, and so on.</description></item><item><title>Introduction</title><link>https://docs.customer.io/integrations/data-in/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/getting-started/</guid><description>What is a data-in integration? A data-in integration is a website, mobile app, database, or service that you want to capture data from—it&amp;rsquo;s a &amp;ldquo;source&amp;rdquo; of data! These integrations help you collect data from your various customer touchpoints so you can route it to Customer.io and other outgoing integrations, so you can maintain an unbroken chain of customer data throughout your stack.
You&amp;rsquo;ll add a different data-in integrations for each website or app you want to collect data from.</description></item><item><title>Introduction</title><link>https://docs.customer.io/integrations/data-out/data-warehouses/data-warehouse-intro/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/data-warehouses/data-warehouse-intro/</guid><description>How database and data warehouse integrations work Rather than streaming data to your warehouse in real time, like with most outbound integrations, our database and data warehouse integrations send data to your storage buckets in bulk at regular intervals. Then you&amp;rsquo;ll ingest those files into the data warehouse or database of your choice.
These integrations only create new files in your storage bucket; they&amp;rsquo;ll never overwrite or append an existing file, so you can delete or remove files from your storage bucket after you ingest them into their ultimate integration—your data warehouse or database.</description></item><item><title>Introduction to broadcasts</title><link>https://docs.customer.io/journeys/broadcasts-in-customerio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/broadcasts-in-customerio/</guid><description>If you&amp;rsquo;re new to Customer.io, checkout Campaigns, broadcasts, and transactional messages to make sure you&amp;rsquo;re creating the right kind of automation.
How it works A broadcast is a message or workflow that you trigger (or schedule) for a group of people. It&amp;rsquo;s not &amp;ldquo;active&amp;rdquo; like a campaign: you&amp;rsquo;ll send, schedule, or trigger your broadcast for a group of people. Anybody outside that group won&amp;rsquo;t get the broadcast unless you send it again.</description></item><item><title>Introduction to Email Layouts</title><link>https://docs.customer.io/journeys/3-layouts-and-customerio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/3-layouts-and-customerio/</guid><description>What are layouts? &amp;nbsp;Layouts are only available in our rich text or code editors.
You cannot use layouts with Design Studio or our drag and drop editor; instead, start from a template. Or learn more about the reusable content features available in Design Studio (components) and the drag and drop editor (saved rows, snippets). When using our Rich Text and Code editors to design your email templates, there are two parts to emails: the content and the layout.</description></item><item><title>Introduction to Journeys</title><link>https://docs.customer.io/journeys/journeys-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/journeys-overview/</guid><description>Journeys incorporates data from your customer touchpoints, helping you customize campaigns and send sophisticated, personalized messages that support and engage your audience.
&amp;nbsp;New here? Check out our Quick Start Guide
This section provides an overview of Journeys. But we recommend using our Quick Start Guide if you&amp;rsquo;re ready to jump in and start using Customer.io. How it all works The image below illustrates what a well-rounded integration with Customer.io looks like.</description></item><item><title>Koala</title><link>https://docs.customer.io/integrations/data-out/connections/koala/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/koala/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Koala entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Project Slug: Please enter your Public API Key found in your Koala workspace settings. Click Enable Destination.</description></item><item><title>LaunchDarkly</title><link>https://docs.customer.io/integrations/data-out/connections/launchdarkly/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/launchdarkly/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the LaunchDarkly entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Client Id: Find and copy the client-side ID in the LaunchDarkly account settings page. Click Enable Destination.</description></item><item><title>Link Tracking</title><link>https://docs.customer.io/journeys/link-tracking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/link-tracking/</guid><description>We track the number and percentage of recipients who clicked links in your messages:
We also track which links they clicked:
You can view clicked links on a person&amp;rsquo;s profile through the Activity tab by expanding a Clicked action entry:
&amp;nbsp;Your links must include the protocol—HTTP or HTTPS
We can&amp;rsquo;t track links if you don&amp;rsquo;t include the protocol. To generate secure HTTPS links, visit HTTPS Link Tracking. Emails For campaigns and API-triggered broadcasts, link tracking is enabled for emails in your workflows by default.</description></item><item><title>Liquid syntax list</title><link>https://docs.customer.io/journeys/liquid-tag-list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/liquid-tag-list/</guid><description/></item><item><title>LiveLike</title><link>https://docs.customer.io/integrations/data-out/connections/livelike-cloud/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/livelike-cloud/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the LiveLike entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Client Id: Your LiveLike Application Client ID.
Producer Token: Your LiveLike Producer token.
Click Enable Destination.
Actions When you&amp;rsquo;re done setting things up, you can go to the Actions tab to see how we map incoming data to your integration.</description></item><item><title>LogRocket</title><link>https://docs.customer.io/integrations/data-out/connections/logrocket/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/logrocket/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the LogRocket entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
App ID: The LogRocket app ID.
Network Sanitization: Sanitize all network request and response bodies from session recordings.</description></item><item><title>Map HubSpot data to Customer.io</title><link>https://docs.customer.io/integrations/data-in/connections/hubspot/mapping-to-customerio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/hubspot/mapping-to-customerio/</guid><description>In most cases when you map a type of HubSpot data to Customer.io, you should use our default settings and focus only on the Fields that you want to bring into Customer.io. But if the default settings don&amp;rsquo;t quite work for your use case, you can update mappings in a few different ways:
The primary identifiers for the data you bring into Customer.io (its id in HubSpot, email address for contacts, or another field).</description></item><item><title>Map Salesforce data to Customer.io</title><link>https://docs.customer.io/integrations/data-in/connections/salesforce/mapping-to-customerio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/salesforce/mapping-to-customerio/</guid><description>You&amp;rsquo;ll set up a sync for each kind of data you want to send through your pipeline. In most cases, you&amp;rsquo;ll want to follow our typical mappings. But the way you map your data to Customer.io depends on what you want to do with it—send messages, use it to trigger messages, or manage relationships!
Typical mappings Remember, you&amp;rsquo;ll convert your Salesforce data to people, events, custom objectsAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course.</description></item><item><title>Meta (Facebook) Pixel</title><link>https://docs.customer.io/integrations/data-out/connections/meta-pixel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/meta-pixel/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Meta (Facebook) Pixel entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Pixel ID: Your Pixel ID from the snippet created on the Facebook Pixel creation page.</description></item><item><title>Metronome</title><link>https://docs.customer.io/integrations/data-out/connections/metronome/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/metronome/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Metronome entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Api Token: Your Metronome API Token Click Enable Destination.
Actions When you&amp;rsquo;re done setting things up, you can go to the Actions tab to see how we map incoming data to your integration.</description></item><item><title>Microsoft SQL Server</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/microsoft-sql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/microsoft-sql/</guid><description>Best Practices Before you add a Reverse ETL source, you should take some measures to ensure the security of your customers&amp;rsquo; data and limit performance impacts to your database and Customer.io workspace.
Create a new database user/service account. Implement a database user with minimal privileges specifically for Customer.io import/sync operations. This person only requires read permissions with access limited to the tables you want to sync from.
Avoid using your main database instance.</description></item><item><title>Mixpanel</title><link>https://docs.customer.io/integrations/data-out/connections/mixpanel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/mixpanel/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Mixpanel entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Project Token: Mixpanel project token.
Api Secret: Mixpanel project secret.
Api Region: Learn about EU data residency</description></item><item><title>Mixpanel (Message Metrics)</title><link>https://docs.customer.io/integrations/data-out/connections/mixpanel-legacy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/mixpanel-legacy/</guid><description>How it works This integration sends audience engagement data—also available as reporting webhooks—to Mixpanel, where you can use it alongside your other user and analytics data to gain insight into your audience&amp;rsquo;s behaviors.
The events we send are both based on things that happen in Customer.io and your customer activity. For example, an email sent event indicates that we&amp;rsquo;ve sent an email to a person, but an email clicked event lets you know that your audience clicked a link in your email.</description></item><item><title>Moengage</title><link>https://docs.customer.io/integrations/data-out/connections/moengage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/moengage/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Moengage entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Api Id: Your Moengage API Id
Api Key: Your Moengage API Key
Region: The region to send your data.</description></item><item><title>MS Azure Blob Storage (Advanced)</title><link>https://docs.customer.io/integrations/data-out/connections/azure-blob-storage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/azure-blob-storage/</guid><description>How it works This integration sends CSV, JSON, or parquet files containing your data to your MS Azure Blob Storage (Advanced) bucket. Then you can ingest the files in your storage bucket to your data warehouse of choice.
We write files for each type of incoming call to your storage bucket every 10 minutes. So you&amp;rsquo;ll have files for identify calls, track calls, and so on. Files are named with an incrementing number, so it&amp;rsquo;s easy to determine the sequence of files, and the order of incoming calls.</description></item><item><title>MySQL</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/mysql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/mysql/</guid><description>Best Practices Before you add a Reverse ETL source, you should take some measures to ensure the security of your customers&amp;rsquo; data and limit performance impacts to your database and Customer.io workspace.
Create a new database user/service account. Implement a database user with minimal privileges specifically for Customer.io import/sync operations. This person only requires read permissions with access limited to the tables you want to sync from.
Avoid using your main database instance.</description></item><item><title>Node.js</title><link>https://docs.customer.io/integrations/data-in/connections/servers/node/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/servers/node/</guid><description>How it works Our Node.js library helps you record source events from your node-side code. Requests from your Node.js server go to our servers, and we route your data to your destinations.
This library uses an internal queue so that your identify and track calls are fast and non-blocking. It also batches requests and flushes asynchronously to Customer.io&amp;rsquo;s servers.
Like our other libraries, you can log anonymous activity—track and page events—with an anonymousId.</description></item><item><title>Object types</title><link>https://docs.customer.io/journeys/object-types/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/object-types/</guid><description>An object type defines the kind of one-to-many relationship you want to set, like Accounts, Employers, or Job Postings. The first three types appear in the side nav under People. If you have more than three, we&amp;rsquo;ll nest all of your object types under Custom Objects. Depending on your plan type, you can create 2 or more object types. In our API, we identify object types as integers starting at 1.</description></item><item><title>Our Recipe Book</title><link>https://docs.customer.io/journeys/recipes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/recipes/</guid><description>Recipes typically have some Ingredients that we&amp;rsquo;ll tell you about: a few things that need to be in place to use the recipe. These are things like attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc. Use attributes to target people and personalize messages. or eventsSomething that a person in your workspace did.</description></item><item><title>People and their profiles</title><link>https://docs.customer.io/journeys/people-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/people-overview/</guid><description>When you go to the People page, you&amp;rsquo;ll see a list of people you&amp;rsquo;ve identifiedThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously..
From here, you can click on any individual person to see their profile—all the data that you have about a person.</description></item><item><title>Pinterest Conversions</title><link>https://docs.customer.io/integrations/data-out/connections/pinterest-conversions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/pinterest-conversions/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Pinterest Conversions entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Ad Account Id: Unique identifier of an ad account. This can be found in the Pinterest UI by following the steps mentioned here.</description></item><item><title>Pipedrive</title><link>https://docs.customer.io/integrations/data-out/connections/pipedrive/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/pipedrive/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Pipedrive entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Domain: Pipedrive domain. This is found in Pipedrive in Settings &amp;gt; Company settings &amp;gt; Company domain.
Api Token: Pipedrive API token.</description></item><item><title>PlayerZero</title><link>https://docs.customer.io/integrations/data-out/connections/playerzero/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/playerzero/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the PlayerZero entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Project Id: The Project ID where you want to send data. You can find this ID on the Project Data Collection page.</description></item><item><title>PostgreSQL</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/postgresql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/postgresql/</guid><description>Best Practices Before you add a Reverse ETL source, you should take some measures to ensure the security of your customers&amp;rsquo; data and limit performance impacts to your database and Customer.io workspace.
Create a new database user/service account. Implement a database user with minimal privileges specifically for Customer.io import/sync operations. This person only requires read permissions with access limited to the tables you want to sync from.
Avoid using your main database instance.</description></item><item><title>Python</title><link>https://docs.customer.io/integrations/data-in/connections/servers/python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/servers/python/</guid><description>How it works Our python library helps you record source events from your node-side code. Requests from your python app go to our servers, and we route your data to your destinations.
This library uses an internal queue so that your identify and track calls are non-blocking and fast. It also batches requests and flushes asynchronously to Customer.io&amp;rsquo;s servers.
Like our other libraries, you can log anonymous activity—track and page events—with an anonymousId.</description></item><item><title>Qualtrics</title><link>https://docs.customer.io/integrations/data-out/connections/qualtrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/qualtrics/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Qualtrics entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Api Token: Qualtrics API token found in your Qualtrics account under &amp;quot;Account settings&amp;quot; -&amp;gt; &amp;quot;Qualtrics IDs.&amp;quot;
Datacenter: Qualtrics datacenter id that identifies where your qualtrics instance is located.</description></item><item><title>Quick start guide</title><link>https://docs.customer.io/get-started/quick-start-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/get-started/quick-start-guide/</guid><description>Get started This guide is designed to walk you through the most common parts of the setup path and introduce you to the major parts of our platform. When you start setting up Customer.io, we provide you with a Setup List on your Workspace&amp;rsquo;s Dashboard. You don&amp;rsquo;t have to do everything on the list, but you must do the following things before you can really take advantage of Customer.io:
Create an account and a workspace.</description></item><item><title>Quick Start Guide</title><link>https://docs.customer.io/integrations/sdk/expo/quick-start-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/quick-start-guide/</guid><description>&amp;nbsp;Our MCP server can help you get started
Our MCP server includes SDK-installation tools that can help you get integrated quickly with Customer.io and troubleshoot any issues you might have. See Set up an MCP server to get started. Setup process overview Expo provides a managed framework to help you build React Native mobile apps. Our Expo plugin relies on our React Native SDK. When you run the prebuild, we&amp;rsquo;ll generate the native files you&amp;rsquo;ll need to integrate Customer.</description></item><item><title>Reporting Webhooks</title><link>https://docs.customer.io/integrations/data-out/connections/webhooks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/webhooks/</guid><description>You can find information about each individual event type on our Reporting Webhooks API documentation.
&amp;nbsp;Looking to send a custom webhook to a specific API via your workflow?
Check out Webhook Actions, instead. Setup Log in and go to Data &amp;amp; Integrations &amp;gt; Integrations.
Find and select Reporting Webhooks.
Click Add Reporting Webhook.
Enter the Webhook Endpoint URL where you want to receive events. While the endpoint URL can be either HTTP or HTTPs, we recommend HTTPS to protect customer information.</description></item><item><title>Respond to inbound keywords</title><link>https://docs.customer.io/journeys/inbound-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/inbound-campaigns/</guid><description>How it works We treat inbound messages like events in Customer.io: they can trigger campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria. and add people to segmentsA segment is a group of people in your workspace. Use segments to trigger campaigns, track membership over time, or fine-tune your audience. There are two types of segments: data-driven and manual.</description></item><item><title>Ripe</title><link>https://docs.customer.io/integrations/data-out/connections/ripe/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/ripe/</guid><description>There are two versions of this integration You&amp;rsquo;ll see two entries for Ripe in our integration catalog, with one labeled Web. We typically recommend that you use the standard integration, the one not labeled &amp;ldquo;Web&amp;rdquo; when possible. The web version of this integration only works with our JavaScript client and does not pass data through Customer.io&amp;rsquo;s servers, which can make it hard to debug your integration, capture a history of events sent to the integration, and so on.</description></item><item><title>Rudderstack (legacy)</title><link>https://docs.customer.io/integrations/data-out/connections/rudderstack-legacy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/rudderstack-legacy/</guid><description>How it works Rudderstack takes advantage of reporting webhooks when using Customer.io as a source. Rudderstack converts our webhooks to their event format.
A person&amp;rsquo;s customer_id (a legacy identifier for id) in Customer.io becomes their userId in Rudderstack. If a person doesn&amp;rsquo;t have an id, Rudderstack sets a person&amp;rsquo;s email address as an anonymousId. { &amp;#34;event_id&amp;#34;: &amp;#34;01E4C4CT6YDC7Y5M7FE1GWWPQJ&amp;#34;, &amp;#34;object_type&amp;#34;: &amp;#34;email&amp;#34;, &amp;#34;timestamp&amp;#34;: 1613063089, &amp;#34;metric&amp;#34;: &amp;#34;opened&amp;#34;, &amp;#34;data&amp;#34;: { &amp;#34;trigger_id&amp;#34;: 1, &amp;#34;customer_id&amp;#34;: &amp;#34;42&amp;#34;, &amp;#34;delivery_id&amp;#34;: &amp;#34;ZAIAAVTJVG0QcCok0-0ZKj6yiQ==&amp;#34;, &amp;#34;action_id&amp;#34;: 96, &amp;#34;broadcast_id&amp;#34;: 2, &amp;#34;journey_id&amp;#34;: &amp;#34;01GW20GXAAXBKZD8J96M8FNV3R&amp;#34;, &amp;#34;parent_action_id&amp;#34;: 1, &amp;#34;identifiers&amp;#34;: { &amp;#34;id&amp;#34;: &amp;#34;42&amp;#34;, &amp;#34;email&amp;#34;: &amp;#34;test@example.</description></item><item><title>SalesWings</title><link>https://docs.customer.io/integrations/data-out/connections/saleswings/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/saleswings/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the SalesWings entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Api Key: API key for your SalesWings project.
Environment: SalesWings environment this destination is connected with.
Click Enable Destination.</description></item><item><title>Search</title><link>https://docs.customer.io/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/search/</guid><description/></item><item><title>Segment</title><link>https://docs.customer.io/integrations/data-out/connections/segment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/segment/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Segment entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Source Write Key: The Write Key of a Segment source.
Endpoint: The region to send your data.</description></item><item><title>Segment (Message Metrics)</title><link>https://docs.customer.io/integrations/data-out/connections/segment-legacy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/segment-legacy/</guid><description>&amp;nbsp;Disable and re-enable this integration to gain access to new features!
We updated this integration in May of 2022. If you enabled your Segment Source integration before then, disable the integration and re-enable it to gain access to new events and settings. Enable Customer.io as a Segment source To enable Customer.io as a Segment source, you need both a Customer.io and a Segment.com account. If you are creating a new Segment account, enter &amp;ldquo;Customer.</description></item><item><title>Send and receive data with webhook actions</title><link>https://docs.customer.io/journeys/webhooks-action/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/webhooks-action/</guid><description>Here&amp;rsquo;s James, a Senior Solutions Architect at Customer.io, with a quick explanation to help you understand webhook actions and how you can use them to personalize messages for your audience.
&amp;nbsp;You can trigger webhooks without a campaign
Our shortcuts feature lets you manually trigger external APIs for anybody on your People page without entering that person into a campaign. You might do this to manually activate or deactivate a person&amp;rsquo;s account, to open a help desk ticket, etc.</description></item><item><title>Send messages</title><link>https://docs.customer.io/journeys/line-send-messages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/line-send-messages/</guid><description>Send a LINE message As a part of your campaign or broadcast workflow:
Drag LINE into your workflow. Click the message and click Add Content. If you store your audience&amp;rsquo;s LINE ID in an attribute other than line_id, set the correct attribute in the To field. Add text and image content to your message. Click Save Changes. What kinds of messages can I send? While LINE supports a variety of message types, we support basic text and image messages.</description></item><item><title>SendGrid Marketing Campaigns</title><link>https://docs.customer.io/integrations/data-out/connections/sendgrid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/sendgrid/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the SendGrid Marketing Campaigns entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Send Grid Api Key: The Api key for your SendGrid account. Click Enable Destination.
Actions When you&amp;rsquo;re done setting things up, you can go to the Actions tab to see how we map incoming data to your integration.</description></item><item><title>Session cookies and expiration</title><link>https://docs.customer.io/accounts-and-workspaces/login-session/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/login-session/</guid><description>How it works We manage your session in Customer.io using a secure HTTP-only cookie. The cookie can only be read by the browser, protecting your session from unauthorized access and malicious cross-site scripting (XSS) attacks.
By default, our session cookies last for 14 days. But, as an administrator, you can set the duration of sessions for everybody on your team to fit your security policy—down to 1 hour.
If a session expires while a person is logged in, they&amp;rsquo;ll be prompted to re-authenticate, but they won&amp;rsquo;t lose their work.</description></item><item><title>Set up a transactional email</title><link>https://docs.customer.io/journeys/transactional-email/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transactional-email/</guid><description>&amp;nbsp;New to transactional messaging?
Check out our getting started section to learn more about transactional concepts and how our transactional API works. Before you begin Before you can send transactional emails, you need to:
Confirm your registration email and verify your account. Authenticate your sending domain. If you configured a custom SMTP server, contact us to manually authenticate your sending domain. Get your app API key. This is the bearer token that you&amp;rsquo;ll use when calling the transactional API.</description></item><item><title>Set up in-app messages</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/in-app-messages/set-up-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/in-app-messages/set-up-in-app/</guid><description>How it works An in-app message is a message that people see within the app. People won&amp;rsquo;t see your in-app messages until they open your app. If you set an expiry period for your message, and that time elapses before someone opens your app, they won&amp;rsquo;t see your message.
You can also set page rules to display your in-app messages when people visit specific pages in your app. However, to take advantage of page rules, you need to use screen tracking features.</description></item><item><title>Set up in-app messages</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/in-app-messages/set-up-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/in-app-messages/set-up-in-app/</guid><description>How it works An in-app message is a message that people see within the app. People won&amp;rsquo;t see your in-app messages until they open your app. If you set an expiry period for your message, and that time elapses before someone opens your app, they won&amp;rsquo;t see your message.
You can also set page rules to display your in-app messages when people visit specific pages in your app. However, to take advantage of page rules, you need to use screen tracking features.</description></item><item><title>Set up in-app messages</title><link>https://docs.customer.io/integrations/sdk/react-native/in-app-messages/set-up-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/in-app-messages/set-up-in-app/</guid><description>How it works An in-app message is a message that people see within the app. People won&amp;rsquo;t see your in-app messages until they open your app. If you set an expiry period for your message, and that time elapses before someone opens your app, they won&amp;rsquo;t see your message.
You can also set page rules to display your in-app messages when people visit specific pages in your app. However, to take advantage of page rules, you need to use screen tracking features.</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/push-notifications/push-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/push-notifications/push-setup/</guid><description>How it works If you&amp;rsquo;ve followed our getting started instructions, you&amp;rsquo;re already set up to send push notifications to your Android audience. But you&amp;rsquo;ll need to add a bit of code to support your iOS users.
Remember that a device/user can&amp;rsquo;t receive a push notification until you:
(iOS) Register a device token for the device; code samples on this page help you do that. Identify a person. This associates a token with the person; you can&amp;rsquo;t send push notifications to a device until you identify the recipient.</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/flutter/push-notifications/push-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/push-notifications/push-setup/</guid><description>How it works If you&amp;rsquo;ve followed our getting started instructions, you&amp;rsquo;re already set up to send push notifications to your Android audience. But you&amp;rsquo;ll need to add a bit of code to support your iOS users.
Remember that a device/user can&amp;rsquo;t receive a push notification until you:
(iOS) Register a device token for the device; code samples on this page help you do that. Identify a person. This associates a token with the person; you can&amp;rsquo;t send push notifications to a device until you identify the recipient.</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/push/push-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/push/push-setup/</guid><description>Before you begin This page explains how to register for push notifications using our SDK. But, before you can send push notifications, you need to add your push service credentials to Customer.io. See our push service certificates to learn more.
If you haven&amp;rsquo;t already, you&amp;rsquo;ll need to install the push package for the push service you use—APNs or FCM—and enable the Push Notifications capability in XCode. See our quick start guide page for installation instructions.</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/ios/push/push-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/push/push-setup/</guid><description>Before you begin This page explains how to register for push notifications using our SDK. But, before you can send push notifications, you need to add your push service credentials to Customer.io. See our push service certificates to learn more.
If you haven&amp;rsquo;t already, you&amp;rsquo;ll need to install the push package for the push service you use—APNs or FCM—and enable the Push Notifications capability in XCode. For FCM users, you&amp;rsquo;ll also need to install the CioFirebaseWrapper dependency.</description></item><item><title>Set up your notification inbox</title><link>https://docs.customer.io/journeys/inbox-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/inbox-setup/</guid><description>The notification inbox lets you send messages to your audience that they can access at their leisure.
&amp;nbsp;We&amp;rsquo;re actively working on this feature
We&amp;rsquo;re just getting started with inbox messaging. For now, the feature requires some extra work on your part to build your own inbox, style messages in your client, and listen for events. We&amp;rsquo;re working on features to make this all easier. How it works Inbox messages aren&amp;rsquo;t displayed immediately (or along our normal prioritization settings for in-app messages), but rather are displayed through a custom inbox UI.</description></item><item><title>Set up your website</title><link>https://docs.customer.io/journeys/in-app-web/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/in-app-web/</guid><description>How it works While we call some messages &amp;ldquo;in-app&amp;rdquo; messages, they&amp;rsquo;re not limited to mobile apps! You can use &amp;ldquo;in-app&amp;rdquo; messages to send things like banners and modal messages that appear on your website. These are great ways to alert your users about new features, send promotions, ask for feedback using surveys, and so on.
To get set up with in-app messages, you&amp;rsquo;ll copy our JavaScript source snippet to your website.</description></item><item><title>Slack</title><link>https://docs.customer.io/integrations/data-out/connections/slack/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/slack/</guid><description>Getting started Setting up your Slack integration is trivial. To take advantage of it, you&amp;rsquo;ll have to set up the Post Message action.
Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Slack entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.</description></item><item><title>Snowflake</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/snowflake/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/snowflake/</guid><description>Best Practices Before you add a Reverse ETL source, you should take some measures to ensure the security of your customers&amp;rsquo; data and limit performance impacts to your database and Customer.io workspace.
Create a new database user/service account. Implement a database user with minimal privileges specifically for Customer.io import/sync operations. This person only requires read permissions with access limited to the tables you want to sync from.
Avoid using your main database instance.</description></item><item><title>Snowflake</title><link>https://docs.customer.io/integrations/data-out/connections/snowflake-data-out/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/snowflake-data-out/</guid><description>&amp;nbsp;We have two integrations!
This integration uses Customer.io as a source, and syncs data from your Customer.io workspace to your data warehouse, including campaign information. Our other integration sends data from multiple sources to your data warehouse. While the other integration captures data from multiple sources, even if those sources don&amp;rsquo;t send data to your workspace, it cannot capture some data from within Customer.io like campaign information. How it works This integration exports individual parquet files for Deliveries, Metrics, Subjects, Outputs, Content, People, and Attributes to your storage bucket.</description></item><item><title>Snowflake (Advanced)</title><link>https://docs.customer.io/integrations/data-out/connections/snowflake/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/snowflake/</guid><description>How it works This integration sends CSV, JSON, or parquet files containing your data to your Snowflake (Advanced) bucket. Then you can ingest the files in your storage bucket to your data warehouse of choice.
We write files for each type of incoming call to your storage bucket every 10 minutes. So you&amp;rsquo;ll have files for identify calls, track calls, and so on. Files are named with an incrementing number, so it&amp;rsquo;s easy to determine the sequence of files, and the order of incoming calls.</description></item><item><title>Sprig</title><link>https://docs.customer.io/integrations/data-out/connections/sprig/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/sprig/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Sprig entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Env Id: Your environment ID (production or development).
Debug Mode: Enable debug mode for testing purposes.
Click Enable Destination.</description></item><item><title>Standard integrations</title><link>https://docs.customer.io/integrations/data-out/data-warehouses/data-warehouses-intro/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/data-warehouses/data-warehouses-intro/</guid><description>You can find our data warehouse integrations by going to Data &amp;amp; Integrations &amp;gt; Integrations and selecting the Databases option. From here, you can select your data warehouse or storage bucket. If your data warehouse appears twice in this list, pick the Data out integration. Check out the specific documentation for your data warehouse for help setting up your integration.
How it works This integration exports individual parquet files for Deliveries, Metrics, Subjects, Outputs, Content, People, and Attributes to your storage bucket.</description></item><item><title>Submit &amp; manage feedback</title><link>https://docs.customer.io/journeys/feedback/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/feedback/</guid><description>Get feedback Feedback allows other team members to leave comments, annotations, and approvals on your email.
To create and share a feedback version:
Click the dropdown next to your filename and choose Feedback. Or, click Share, then select Get Feedback. Name your feedback version. Add a description to explain what changed or what kind of feedback you’re looking for. Click Get Feedback to open the feedback page. In the sidebar, click Share to copy the link to your feedback page.</description></item><item><title>Talon.One</title><link>https://docs.customer.io/integrations/data-out/connections/talon-one/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/talon-one/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Talon.One entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Api Key: Created under Developer Settings in the Talon.One Campaign Manager.
Deployment: The base URL of your Talon.</description></item><item><title>Tasks: Workspace performance</title><link>https://docs.customer.io/accounts-and-workspaces/workspace-tasks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/workspace-tasks/</guid><description>Access tasks In your workspace&amp;rsquo;s top navigation bar, click and then choose Tasks. You&amp;rsquo;ll see your latest background tasks and their status.
Click See all tasks to drill in further.
From the Tasks page, you can find more information on each task by clicking . Check when the task started, how long it was queued for, and how long it took to complete.
How we process priority levels You&amp;rsquo;ll also see a priority within the details of a task.</description></item><item><title>The subscription center</title><link>https://docs.customer.io/journeys/subscription-center/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/subscription-center/</guid><description>If you&amp;rsquo;re looking for information on global subscriptions or the unsubscribed attribute, check out our overview on subscription options.
How it works The subscription center lets people manage what messages they get through topicsA category of message, set within your workspace&amp;rsquo;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. (content types) and channel preferences (delivery methods).</description></item><item><title>TikTok Conversions</title><link>https://docs.customer.io/integrations/data-out/connections/tiktok-conversions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/tiktok-conversions/</guid><description>Before you get started The TikTok Conversions destination uses the TikTok Events API. To use the Events API, you&amp;rsquo;ll need to generate a TikTok Pixel Code and Access Token:
Create a TikTok For Business account. Create a TikTok Pixel in Developer Mode to obtain a Pixel Code. For more information about Developer Mode, see TikTok&amp;rsquo;s developer documentation. Follow instructions for Authorization and generate a long term Access Token. Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the TikTok Conversions entry in the Directory tab.</description></item><item><title>Translate your messages</title><link>https://docs.customer.io/journeys/localization-getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/localization-getting-started/</guid><description>How it works To localize messages, you&amp;rsquo;ll follow this process:
Set a language attribute for your workspace so we know how to determine a recipient&amp;rsquo;s language preference. Create messages with language variants. When you add or update people, you can set an attributeA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc.</description></item><item><title>Troubleshooting login and browser issues</title><link>https://docs.customer.io/accounts-and-workspaces/login-trouble/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/login-trouble/</guid><description>Help, Customer.io isn&amp;rsquo;t loading! If you see a perpetual loading spinner when you try to log in to Customer.io, you have trouble logging in, or you find the interface to be a little sluggish, you might have a problem with your web browser.
Here&amp;rsquo;s the typical troubleshooting path for browser-related issues in Customer.io:
Update your browser. Clear your browser cache. Try disabling your ad blocker or using Customer.io in incognito mode.</description></item><item><title>Twilio</title><link>https://docs.customer.io/integrations/data-out/connections/twilio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/twilio/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Twilio entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Account Id: Your Twilio Account Id
Token: Your Twilio Token.
Phone Number: Your Twilio Phone Number with Country Code.</description></item><item><title>Twilio Engage Messaging</title><link>https://docs.customer.io/integrations/data-out/connections/engage-messaging-twilio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/engage-messaging-twilio/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Twilio Engage Messaging entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Twilio Account SID: Twilio Account SID
Twilio Api Key SID: Twilio API Key SID
Twilio Api Key Secret: Twilio API Key Secret</description></item><item><title>Twilio Studio</title><link>https://docs.customer.io/integrations/data-out/connections/twilio-studio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/twilio-studio/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Twilio Studio entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Account Sid: Your Twilio Account SID, starting with AC. You can find this in the Account Info section of your dashboard in the Twilio Console.</description></item><item><title>Twitter Pixel</title><link>https://docs.customer.io/integrations/data-out/connections/twitter-pixel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/twitter-pixel/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Twitter Pixel entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Pixel ID: The Pixel ID is a unique identifier for your Twitter Pixel installation. It can be found in the &amp;quot;Tools&amp;quot; -&amp;gt; &amp;quot;Events Manager&amp;quot; section of your Twitter Ads account.</description></item><item><title>Types of branches</title><link>https://docs.customer.io/journeys/branches/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/branches/</guid><description>Flow controls and branches Branches help you personalize campaigns or test different messages in a campaign. When people reach a flow-control block in your workflow, we&amp;rsquo;ll evaluate criteria to determine which path to send them down.
We offer three types of branching flow controls that you can place anywhere in your workflows:
True/False Branches: Send people go down one path if they match a condition, or down the other path if they don&amp;rsquo;t.</description></item><item><title>Understanding incoming data</title><link>https://docs.customer.io/integrations/data-in/source-spec/incoming-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/source-spec/incoming-data/</guid><description>How it works When you send data into Customer.io, it only takes a few different shapes—identify, track, and so on. But the services you connect your data to have different requirements and use your data in different ways!
So we map incoming data to the places where you use it with what we call Actions. Actions are the things your incoming data will do when it reaches its destination, like creating people, updating people, tracking custom events, etc.</description></item><item><title>Understanding Integrations in Customer.io</title><link>https://docs.customer.io/integrations/getting-started/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/getting-started/how-it-works/</guid><description>Why integrate with Customer.io? While you can add people manually, upload CSV files, and get data into and out of Customer.io other ways, integrating with Customer.io unlocks the ability to respond to your audiences in near real-time.
For example, imagine that you want to remind people to complete their purchases when they abandon their carts. Integrating with Customer.io makes this easy: your integration sends events to Customer.io when people add items to their carts, which you can then use to send messages to your audience if they don&amp;rsquo;t complete their purchases within a certain amount of time.</description></item><item><title>Understanding Semantic Events</title><link>https://docs.customer.io/integrations/data-in/semantic-events/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/semantic-events/getting-started/</guid><description>Many of the actionsThe source event and data that triggers an API call to your destination. For example, an incoming identify event from your sources adds or updates a person in our Customer.io Journeys destination. for outbound integrations are based on the name of the event you send. With these semantic events, we expect a certain set of properties that we use to map to multiple integration destinations.
While you can send any properties and events that you want, taking advantage of our pre-defined semantic events can save you time and effort, helping you take advantage of our default actions—so it&amp;rsquo;s easier to set up data-out integrations.</description></item><item><title>Upsell: monetize power users</title><link>https://docs.customer.io/journeys/upsell-users/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/upsell-users/</guid><description>Business-to-business (B2B) companies often need to track and drive growth across both individual users of their product and the account or company they work for. In Customer.io, objectsAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course. help you do this.
For this recipe, imagine you work at a design platform, Sketcher.io, which offers graphic design and product design tools.</description></item><item><title>Use Customer.io with AI</title><link>https://docs.customer.io/ai/cio-with-llms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/ai/cio-with-llms/</guid><description>&amp;nbsp;Check out our roadmap to see what&amp;rsquo;s coming next
We&amp;rsquo;re always working on new features. Take a peek at our roadmap to see what&amp;rsquo;s in store for the future. Our current functionality powered by AI Our current AI tools include:
🎉New AI agent: The agent is your AI coworker in Customer.io. You&amp;rsquo;ll prompt it to help you do things in your workspace, like creating segments, drafting messages, and so on—so you can focus on important parts of your job and not the ins-and-outs of Customer.</description></item><item><title>Validate your email</title><link>https://docs.customer.io/journeys/developer-tools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/developer-tools/</guid><description>Click the caret to expand or collapse the panel.
Inspect element Find the HTML source for any element in the preview using Inspect Element. Click the Inspect Element button in toolbar or enter Cmd/Ctrl + Shift + C. Click the element in the preview panel and the corresponding code will be highlighted in the editor. When you&amp;rsquo;re done, click the button (or keyboard shortcut) again to deactivate inspect mode.
Focus mode Focus mode keeps the preview aligned with the code you&amp;rsquo;re working on.</description></item><item><title>Visual Website Optimizer (VWO)</title><link>https://docs.customer.io/integrations/data-out/connections/vwo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/vwo/</guid><description>There are two versions of this integration You&amp;rsquo;ll see two entries for Visual Website Optimizer (VWO) in our integration catalog, with one labeled Web. We typically recommend that you use the standard integration, the one not labeled &amp;ldquo;Web&amp;rdquo; when possible. The web version of this integration only works with our JavaScript client and does not pass data through Customer.io&amp;rsquo;s servers, which can make it hard to debug your integration, capture a history of events sent to the integration, and so on.</description></item><item><title>Webhook campaigns</title><link>https://docs.customer.io/journeys/webhook-triggered-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/webhook-triggered-campaigns/</guid><description>How it works Normally, you trigger campaigns when a person performs an event or meets some criteria you set. This type of campaign lets you use webhooks to trigger workflows when you receive data from an external source. This video helps explain how it works:
When you set up a webhook-triggered campaign, Customer.io generates a Webhook URL. You&amp;rsquo;ll provide this URL to the service or platform that you capture data from and set up rules determining when that service or platform will call your webhook, sending data to Customer.</description></item><item><title>Webhooks</title><link>https://docs.customer.io/integrations/data-out/connections/webhook/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/webhook/</guid><description>Getting started Our webhook destination lets you transform and send data to any URL you maintain. It&amp;rsquo;s basically a custom destination, letting you handle source data however you want.
Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Webhooks entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.</description></item><item><title>Why aren't people receiving my message?</title><link>https://docs.customer.io/journeys/messages-not-sending/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/messages-not-sending/</guid><description>Note that people who are unsubscribed from topics or from all messages can still trigger a campaign; they just won&amp;rsquo;t receive messages from that campaign.
Check your message&amp;rsquo;s settings Select the message block to get started.
Check your message&amp;rsquo;s sending behavior Select Settings to check your message&amp;rsquo;s sending behavior.
By default, messages are set to queue as drafts in your campaigns. Update them to send automatically then send any drafts manually to ensure all of your campaign&amp;rsquo;s audience receives the messages.</description></item><item><title>Wisepops</title><link>https://docs.customer.io/integrations/data-out/connections/wisepops/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/wisepops/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Wisepops entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Website Id: The identifier of your Wisepops' website. You can find it in your setup code on Wisepops.</description></item><item><title>Workspaces in Customer.io</title><link>https://docs.customer.io/accounts-and-workspaces/workspaces/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/workspaces/</guid><description>Manage workspaces &amp;nbsp;To create, edit, or delete a workspace, you must be an Account Admin.
Click your workspace in the upper left corner and then click Manage all workspaces to see a list of your workspaces. From here you can add, edit or delete workspaces (if you have more than one).
Add a workspace By default, new workspaces use both email and id as identifiersThe attributes you use to add, modify, and target people.</description></item><item><title>Yandex</title><link>https://docs.customer.io/integrations/data-out/connections/yandex-data-out/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/yandex-data-out/</guid><description>&amp;nbsp;We have two integrations!
This integration uses Customer.io as a source, and syncs data from your Customer.io workspace to your data warehouse, including campaign information. Our other integration sends data from multiple sources to your data warehouse. While the other integration captures data from multiple sources, even if those sources don&amp;rsquo;t send data to your workspace, it cannot capture some data from within Customer.io like campaign information. How it works This integration exports individual parquet files for Deliveries, Metrics, Subjects, Outputs, Content, People, and Attributes to your storage bucket.</description></item><item><title>Zendesk</title><link>https://docs.customer.io/integrations/data-out/connections/zendesk/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/zendesk/</guid><description>Getting started Go to Data &amp;amp; Integrations &amp;gt; Integrations and select the Zendesk entry in the Directory tab.
(Optional) Select the data sources that you want to connect to your outbound integration. You can always connect data sources later. We&amp;rsquo;ll only show you data sources that work with your integration.
Configure your integration.
Subdomain: The subdomain of your Zendesk instance. For example, if your Zendesk URL is https://example.zendesk.com, your subdomain is example.</description></item><item><title>Anonymous activity</title><link>https://docs.customer.io/journeys/anonymous-activity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/anonymous-activity/</guid><description>How it works When a person visits your site or app, they get an anonymous_id. You can track events against this ID—the pages they visit, things they click, and so on.
For the most part, this activity isn&amp;rsquo;t very useful by itself. But when you identify people, we&amp;rsquo;ll merge people&amp;rsquo;s anonymous activity with their profiles, so you can respond to the things people did before you identified them! That&amp;rsquo;s where anonymous activity really shines.</description></item><item><title>Authentication</title><link>https://docs.customer.io/integrations/sdk/android/getting-started/auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/getting-started/auth/</guid><description>To get your SDK keys and send data to the right places, you&amp;rsquo;ll need to set up your app as a data inAn integration that feeds data into Customer.io. integration in Customer.io, and route it to your workspace. The SDK lets you route data to any number of destinations, but you must connect it to your workspace destination to send data, like the people you identify, the events you track, and so on, to Customer.</description></item><item><title>Authentication</title><link>https://docs.customer.io/integrations/sdk/expo/getting-started/auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/getting-started/auth/</guid><description>These keys come from different places in Customer.io!
CDP API Key: You&amp;rsquo;ll get this key when you set up your mobile app as a data-in integration in Customer.io. Site ID: This key tells the SDK which workspace your in-app messages come from. You&amp;rsquo;ll use it to support inApp messages. If you&amp;rsquo;re upgrading from a previous version of the Customer.io SDK, it also serves as the migrationSiteId. Get your CDP API Key You&amp;rsquo;ll use your write key to initialize the SDK and send data to Customer.</description></item><item><title>Authentication</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/getting-started/auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/getting-started/auth/</guid><description>Get your CDP API Key You&amp;rsquo;ll use a CDP API Key to initialize the SDK and send data to Customer.io. You&amp;rsquo;ll get this key when you set up your mobile app as a data inAn integration that feeds data into Customer.io. integration in Customer.io. If you haven&amp;rsquo;t already set up your integration in Customer.io, you&amp;rsquo;ll need to do that first.
Go to Data &amp;amp; Integrations &amp;gt; Integrations. Select your Flutter integration in the Overview tab.</description></item><item><title>Authentication</title><link>https://docs.customer.io/integrations/sdk/flutter/getting-started/auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/getting-started/auth/</guid><description>Get your CDP API Key You&amp;rsquo;ll use a CDP API Key to initialize the SDK and send data to Customer.io. You&amp;rsquo;ll get this key when you set up your mobile app as a data inAn integration that feeds data into Customer.io. integration in Customer.io. If you haven&amp;rsquo;t already set up your integration in Customer.io, you&amp;rsquo;ll need to do that first.
Go to Data &amp;amp; Integrations &amp;gt; Integrations. Select your Flutter integration in the Overview tab.</description></item><item><title>Authentication</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/getting-started/auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/getting-started/auth/</guid><description>To get your SDK keys and send data to the right places, you&amp;rsquo;ll need to set up your app as a data inAn integration that feeds data into Customer.io. integration in Customer.io, and route it to your workspace. The SDK lets you route data to any number of destinations, but you must connect it to your workspace destination to send data, like the people you identify, the events you track, and so on, to Customer.</description></item><item><title>Authentication</title><link>https://docs.customer.io/integrations/sdk/ios/getting-started/auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/getting-started/auth/</guid><description>To get your SDK keys and send data to the right places, you&amp;rsquo;ll need to set up your app as a data inAn integration that feeds data into Customer.io. integration in Customer.io, and route it to your workspace. The SDK lets you route data to any number of destinations, but you must connect it to your workspace destination to send data, like the people you identify, the events you track, and so on, to Customer.</description></item><item><title>Authentication</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/getting-started/auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/getting-started/auth/</guid><description>These keys come from different places in Customer.io!
CDP API Key: You&amp;rsquo;ll get this key when you set up your mobile app as a data-in integration in Customer.io. Site ID: This key tells the SDK which workspace your in-app messages come from. You&amp;rsquo;ll use it to support inApp messages. If you&amp;rsquo;re upgrading from a previous version of the Customer.io SDK, it also serves as the migrationSiteId. Get your CDP API Key You&amp;rsquo;ll use your write key to initialize the SDK and send data to Customer.</description></item><item><title>Authentication</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/getting-started/auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/getting-started/auth/</guid><description>These keys come from different places in Customer.io!
CDP API Key: You&amp;rsquo;ll get this key when you set up your mobile app as a data-in integration in Customer.io. Site ID: This key tells the SDK which workspace your in-app messages come from. You&amp;rsquo;ll use it to support inApp messages. If you&amp;rsquo;re upgrading from a previous version of the Customer.io SDK, it also serves as the migrationSiteId. Get your CDP API Key You&amp;rsquo;ll use your write key to initialize the SDK and send data to Customer.</description></item><item><title>Authentication</title><link>https://docs.customer.io/integrations/sdk/react-native/getting-started/auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/getting-started/auth/</guid><description>These keys come from different places in Customer.io!
CDP API Key: You&amp;rsquo;ll get this key when you set up your mobile app as a data-in integration in Customer.io. Site ID: This key tells the SDK which workspace your in-app messages come from. You&amp;rsquo;ll use it to support inApp messages. If you&amp;rsquo;re upgrading from a previous version of the Customer.io SDK, it also serves as the migrationSiteId. Get your CDP API Key You&amp;rsquo;ll use your write key to initialize the SDK and send data to Customer.</description></item><item><title>Brand your subscription pages</title><link>https://docs.customer.io/journeys/subscription-center-branding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/subscription-center-branding/</guid><description>You can add your own Logo and set a primary Brand Color so that your subscription pages look more like a native part of your website or app.
Set up branding Global unsubscribes You can set the branding for your global unsubscribe page as long as you have not created subscription topics.
Go to Workspace Settings &amp;gt; Subscription Center and click Settings. Then select Edit next to Branding. Select your Logo.</description></item><item><title>Create a HAR file for help troubleshooting</title><link>https://docs.customer.io/accounts-and-workspaces/create-a-har-file-for-help-troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/create-a-har-file-for-help-troubleshooting/</guid><description>&amp;nbsp;CAUTION
HAR files contain sensitive data and potentially personally identifiable information. It includes the content of the pages you accessed while recording the file as well as your cookies. This could include things like email addresses, phone numbers, usernames, passwords, credit card numbers, etc. Please handle the resulting file with the same caution you would any other sensitive information.
We offer a tool so you can sanitize your Customer.io credentials - see the instructions below for more info.</description></item><item><title>Map data to other services</title><link>https://docs.customer.io/integrations/data-in/connections/salesforce/mapping-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/salesforce/mapping-data/</guid><description>&amp;nbsp;Is Customer.io where you&amp;rsquo;re using your Salesforce data? Do you want to send messages?
Check out Salesforce with Customer.io page for help connecting your Salesforce data to Customer.io, so you can send messages. This page is meant to help you send Salesforce data to places outside of Customer.io. How it works Unlike most platforms, Salesforce doesn&amp;rsquo;t have generic concepts like People and Groups—or things that map easily to those terms.</description></item><item><title>Mapping Customer.io to outgoing integrations</title><link>https://docs.customer.io/integrations/data-in/connections/classic-api/journeys-track-mappings/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/classic-api/journeys-track-mappings/</guid><description>How it works When we receive traffic from some integrations, like the Track API, we translate them to our newer and more generic Pipelines format to better support downstream, data outAn integration that sends data out of Customer.io. integrations. This might be a little confusing when you send data in to Customer.io with one format, and then see the resulting Data Out calls in a different format!
This page explains how we map the Track API to our Pipelines API for data out integrations, to help you understand how your data transforms as we send it out of Customer.</description></item><item><title>Responsive styles</title><link>https://docs.customer.io/journeys/responsive-styles/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/responsive-styles/</guid><description>How to set responsive styles You can set responsive styles in the visual editor or by writing your own CSS.
Set responsive styles in Design Studio You can set responsive styles for your brand and for individual emails. Our responsive styles have a breakpoint of 600px.
To set responsive styles globally, go to Styles.
To modify mobile vs desktop styles in the visual editor, click a component and locate properties with .</description></item><item><title>Reverse ETL Overview</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/reverse-etl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/reverse-etl/</guid><description>&amp;nbsp;These are legacy integrations
If you&amp;rsquo;re new to Customer.io, you won&amp;rsquo;t see the integrations in this directory. You&amp;rsquo;ll use our newer Reverse ETL integrations instead. A "reverse ETL" integration extracts, transforms, and loads data from your database to your workspace. With this integration, you can automatically add or update people, objects, and their relationships in Customer.io from your database on a recurring interval.
When you set up your integration, you can import people or objects—you cannot import both with the same query.</description></item><item><title>Segment data-in (classic)</title><link>https://docs.customer.io/integrations/data-in/connections/cdps/segment-destination-classic/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/cdps/segment-destination-classic/</guid><description>Set up a Segment Destination integration &amp;nbsp;This integration is in maintenance mode
Segment no longer actively maintains this integration. If you&amp;rsquo;re just getting started, we suggest that you use the newer Segment Destination Actions integration integration, which supports anonymous events and lets you filter the events that you send to Customer.io. Go to Settings &amp;gt; Integrations and click the Segment Destination integration. Click Configure Segment. Pick the Workspace and Source you want to associate your integration with, and then click Allow.</description></item><item><title>Send inbox messages</title><link>https://docs.customer.io/journeys/send-inbox/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/send-inbox/</guid><description>Set up a message Before you try to send an inbox message, make sure you&amp;rsquo;ve set up your inbox.
When you set up a message, you&amp;rsquo;re essentially determining the id or name of the message you want to send. You&amp;rsquo;ll use one of these values to send and populate your message when you&amp;rsquo;re ready to send it.
In your campaign or broadcast workflow, drag an Inbox message block into your workflow.</description></item><item><title>Send SMS/MMS messages</title><link>https://docs.customer.io/journeys/sms-send-messages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/sms-send-messages/</guid><description>Learn how to send smsShort Message Service: a text message, typically up to 160 characters, sent through a mobile carrier to a phone. and mmsMultimedia Message Service: a message sent through a mobile carrier to a phone that includes a picture or video. messages using Customer.io.
Add SMS/MMS messages to your workflow Before you can send messages, you need to set up your Twilio account and enable SMS in your workspace.</description></item><item><title>Sent messages as tasks</title><link>https://docs.customer.io/integrations/data-out/connections/salesforce/tasks-in-sf/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/salesforce/tasks-in-sf/</guid><description>How it works The Task for Message Delivery action records message events from Customer.io as completed tasks in Salesforce. This makes it easy for you to see the messages you&amp;rsquo;ve sent, whether people have interacted with them, and so on—all in Salesforce. This helps you make your Salesforce environment a reliable source of truth.
To take advantage of this action, you need to make sure that you sync people from Salesforce to Customer.</description></item><item><title>Set up in-app messaging</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/in-app/set-up-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/in-app/set-up-in-app/</guid><description>How it works An in-app message is a message that people see within the app; people won&amp;rsquo;t see your message until they open your app. To set up in app messaging, install and initialize the CioDataPipelines and CioMessagingInApp packages.
You can also set page rules to display your in-app messages when people visit specific pages in your app. However, to take advantage of page rules, you need to use screen tracking features.</description></item><item><title>Set up in-app messaging</title><link>https://docs.customer.io/integrations/sdk/ios/in-app/set-up-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/in-app/set-up-in-app/</guid><description>How it works An in-app message is a message that people see within the app; people won&amp;rsquo;t see your message until they open your app. To set up in app messaging, install and initialize the CioDataPipelines and CioMessagingInApp packages.
You can also set page rules to display your in-app messages when people visit specific pages in your app. However, to take advantage of page rules, you need to use screen tracking features.</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/tracking/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/tracking/track-events/</guid><description>Track an event The track method helps you send events representing your audience&amp;rsquo;s activities to Customer.io. When you send events, you can include event properties—information about the person or the event that they performed.
In Customer.io, you can use events to trigger campaigns and broadcasts. Those campaigns might send someone a push notification or manipulate information associated with the person in your workspace.
Events include the following:
name: the name of the event.</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/ios/tracking/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/tracking/track-events/</guid><description>Track an event The track method helps you send events representing your audience&amp;rsquo;s activities to Customer.io. When you send events, you can include event properties—information about the person or the event that they performed.
In Customer.io, you can use events to trigger campaigns and broadcasts. Those campaigns might send someone a push notification or manipulate information associated with the person in your workspace.
Events include the following:
name: the name of the event.</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/tracking/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/tracking/track-events/</guid><description>Track an event The track method helps you send events representing your audience&amp;rsquo;s activities to Customer.io. When you send events, you can include event properties—information about the person or the event that they performed.
In Customer.io, you can use events to trigger campaigns and broadcasts. Those campaigns might send someone a push notification or manipulate information associated with the person in your workspace.
Events include the following:
name: the name of the event.</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/tracking/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/tracking/track-events/</guid><description>Track an event The track method helps you send events representing your audience&amp;rsquo;s activities to Customer.io. When you send events, you can include event properties—information about the person or the event that they performed.
In Customer.io, you can use events to trigger campaigns and broadcasts. Those campaigns might send someone a push notification or manipulate information associated with the person in your workspace.
Events include the following:
name: the name of the event.</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/react-native/tracking/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/tracking/track-events/</guid><description>Track an event The track method helps you send events representing your audience&amp;rsquo;s activities to Customer.io. When you send events, you can include event properties—information about the person or the event that they performed.
In Customer.io, you can use events to trigger campaigns and broadcasts. Those campaigns might send someone a push notification or manipulate information associated with the person in your workspace.
Events include the following:
name: the name of the event.</description></item><item><title>Amazon Redshift</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/redshift-reverse-etl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/redshift-reverse-etl/</guid><description>&amp;nbsp;This is a legacy integration
If you&amp;rsquo;re new to Customer.io, you won&amp;rsquo;t see this integration in your integrations directory. You&amp;rsquo;ll use our newer Amazon Redshift integration. A "reverse ETL" integration extracts, transforms, and loads data from your Amazon Redshift database to your workspace. With this integration, you can automatically add or update people, objects, and their relationships in Customer.io from your database on a recurring interval.
When you set up your integration, you can import people or objects—you cannot import both with the same query.</description></item><item><title>Configuration Options</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/getting-started/packages-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/getting-started/packages-options/</guid><description>You&amp;rsquo;ll call configuration options before you initialize the SDK with CustomerIOConfig. When you initialize the SDK, you can pass configuration options. In most cases, you&amp;rsquo;ll want to stick with the defaults, but you might do things like change the logLevel when testing updates to your app.
CustomerIO.initialize( config: CustomerIOConfig( cdpApiKey: &amp;#34;YOUR_CDP_API_KEY&amp;#34;, // Required migrationSiteId: &amp;#34;YOUR_SITE_ID&amp;#34;, // Required to migrate from a previous version autoTrackDeviceAttributes: true, region: Region.us, logLevel: CioLogLevel.error ) ); Option Type Default Description cdpApiKey string Required: the key you'll use to initialize the SDK and send data to Customer.</description></item><item><title>Configuration Options</title><link>https://docs.customer.io/integrations/sdk/flutter/getting-started/packages-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/getting-started/packages-options/</guid><description>You&amp;rsquo;ll call configuration options before you initialize the SDK with CustomerIOConfig. When you initialize the SDK, you can pass configuration options. In most cases, you&amp;rsquo;ll want to stick with the defaults, but you might do things like change the logLevel when testing updates to your app.
CustomerIO.initialize( config: CustomerIOConfig( cdpApiKey: &amp;#34;YOUR_CDP_API_KEY&amp;#34;, // Required migrationSiteId: &amp;#34;YOUR_SITE_ID&amp;#34;, // Required to migrate from a previous version autoTrackDeviceAttributes: true, region: Region.us, logLevel: CioLogLevel.error ) ); Option Type Default Description cdpApiKey string Required: the key you'll use to initialize the SDK and send data to Customer.</description></item><item><title>Create modifiable, placeholder content</title><link>https://docs.customer.io/journeys/component-slots/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/component-slots/</guid><description>&amp;nbsp;Use our Design Studio GPT to create a custom component!
Learn how to best utilize our GPT to create code for reusable, custom content. How to create a slot To create a slot, define the type of slot in &amp;lt;script&amp;gt; and insert &amp;lt;slot&amp;gt; tags in the &amp;lt;template&amp;gt; where you want users to insert or edit content. You can also add placeholder text to guide your team when they’re working in the visual editor.</description></item><item><title>Frequently Asked Questions</title><link>https://docs.customer.io/integrations/data-out/connections/salesforce/salesforce-faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/connections/salesforce/salesforce-faq/</guid><description>Salesforce OAuth connection limits You should not create more than five Salesforce connections (between data-in and data-out) per user.
Salesforce enforces a limit of five connections per OAuth-enabled Connected Application, per user. When you hit this limit, Salesforce revokes the oldest connection. This limit is not configurable and Customer.io is not notified when Salesforce revokes a connection.
Because this limit is per user, you can circumvent the limit by creating multiple Salesforce integration users and carefully managing their connections—no more than five connections per user.</description></item><item><title>Google BigQuery</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/bigquery-reverse-etl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/bigquery-reverse-etl/</guid><description>&amp;nbsp;This is a legacy integration
If you&amp;rsquo;re new to Customer.io, you won&amp;rsquo;t see this integration in your integrations directory. You&amp;rsquo;ll use our newer Google BigQuery integration. A "reverse ETL" integration extracts, transforms, and loads data from your BigQuery database to your workspace. With this integration, you can automatically add or update people, objects, and their relationships in Customer.io from your database on a recurring interval.
When you set up your integration, you can import people or objects—you cannot import both with the same query.</description></item><item><title>Merging anonymous activity</title><link>https://docs.customer.io/journeys/merge-anonymous/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/merge-anonymous/</guid><description>How it works When you identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously. a person, Customer.io will associate anonymous events with the person. You can use a person&amp;rsquo;s previously anonymous activity to add them to segments, trigger campaigns, and personalize their experiences.</description></item><item><title>Microsoft SQL server</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/ms-sql-reverse-etl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/ms-sql-reverse-etl/</guid><description>&amp;nbsp;This is a legacy integration
If you&amp;rsquo;re new to Customer.io, you won&amp;rsquo;t see this integration in your integrations directory. You&amp;rsquo;ll use our newer Microsoft SQL integration. A "reverse ETL" integration extracts, transforms, and loads data from your Microsoft SQL database to your workspace. With this integration, you can automatically add or update people, objects, and their relationships in Customer.io from your database on a recurring interval.
When you set up your integration, you can import people or objects—you cannot import both with the same query.</description></item><item><title>MySQL</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/sql-reverse-etl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/sql-reverse-etl/</guid><description>&amp;nbsp;This is a legacy integration
If you&amp;rsquo;re new to Customer.io, you won&amp;rsquo;t see this integration in your integrations directory. You&amp;rsquo;ll use our newer MySQL integration. How it works A "reverse ETL" integration extracts, transforms, and loads data from your MySQL database to your workspace. With this integration, you can automatically add or update people, objects, and their relationships in Customer.io from your database on a recurring interval.
When you set up your integration, you can import people or objects—you cannot import both with the same query.</description></item><item><title>Packages and Configuration Options</title><link>https://docs.customer.io/integrations/sdk/android/getting-started/packages-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/getting-started/packages-options/</guid><description>SDK packages To minimize our SDK&amp;rsquo;s impact on your app&amp;rsquo;s size, we&amp;rsquo;ve split the SDK into packages. You can limit your install to the packages that you need for your project. But, in most cases, you&amp;rsquo;ll want to install all the packages to get the most value out of Customer.io.
You must install the datapipelines package. It lets you identify people, which you must do before you can send them messages, etc.</description></item><item><title>Packages and Configuration Options</title><link>https://docs.customer.io/integrations/sdk/expo/getting-started/packages-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/getting-started/packages-options/</guid><description>How it works With our Expo plugin, you can configure the SDK in two ways:
Auto-initialization (Expo 53+): Configure everything in your app.json file using the config object. The SDK will automatically initialize without requiring CustomerIO.initialize() in your app code.
Manual initialization: Configure native settings in app.json and SDK runtime settings in your React Native app code using CustomerIO.initialize().
Both approaches require configuration in your app.json or app.config.js files that affect the native files we generate when you run the prebuild.</description></item><item><title>Packages and Configuration Options</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/getting-started/packages-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/getting-started/packages-options/</guid><description>SDK packages To minimize our SDK&amp;rsquo;s impact on your app&amp;rsquo;s size, we&amp;rsquo;ve split the SDK into packages. You can limit your install to the packages that you need for your project.
You must install the CioDataPipelines package. It lets you identify people, which you must do before you can send them messages, track their events, etc.
Package Product Required? Description CioDataPipelines &amp;#x2705; identify people and track events CioMessagingPushAPN Receive push notifications over Apple&amp;rsquo;s Push Notification Service (APNs) CioMessagingPushFCM Receive push notifications over Google Firebase Cloud Messaging (FCM) CioFirebaseWrapper Required for FCM push notifications.</description></item><item><title>Packages and Configuration Options</title><link>https://docs.customer.io/integrations/sdk/ios/getting-started/packages-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/getting-started/packages-options/</guid><description>SDK packages To minimize our SDK&amp;rsquo;s impact on your app&amp;rsquo;s size, we&amp;rsquo;ve split the SDK into packages. You can limit your install to the packages that you need for your project.
You must install the CioDataPipelines package. It lets you identify people, which you must do before you can send them messages, track their events, etc.
Package Product Required? Description CioDataPipelines &amp;#x2705; identify people and track events CioMessagingPushAPN Receive push notifications over Apple&amp;rsquo;s Push Notification Service (APNs) CioMessagingPushFCM Receive push notifications over Google Firebase Cloud Messaging (FCM) CioFirebaseWrapper Required for FCM push notifications.</description></item><item><title>Packages and Configuration Options</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/getting-started/packages-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/getting-started/packages-options/</guid><description>SDK packages The SDK consists of a few packages. You must use the CioConfig and CustomerIO packages to configure and initialize the SDK.
Package Product Required? Description CustomerIO &amp;#x2705; The main SDK package. Used to initialize the SDK and call the SDK&amp;rsquo;s methods. CioConfig &amp;#x2705; Configure the SDK including in-app messaging support. CioRegion Used inside the CioConfig.region option to declare your region—EU or US. CioLogLevel Used inside the CioConfig.logLevel option to set the level of logs you can view from the SDK.</description></item><item><title>Packages and Configuration Options</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/getting-started/packages-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/getting-started/packages-options/</guid><description>SDK packages The SDK consists of a few packages. You must use the CioConfig and CustomerIO packages to configure and initialize the SDK.
Package Product Required? Description CustomerIO &amp;#x2705; The main SDK package. Used to initialize the SDK and call the SDK&amp;rsquo;s methods. CioConfig &amp;#x2705; Configure the SDK including in-app messaging support. CioRegion Used inside the CioConfig.region option to declare your region—EU or US. CioLogLevel Used inside the CioConfig.logLevel option to set the level of logs you can view from the SDK.</description></item><item><title>Packages and Configuration Options</title><link>https://docs.customer.io/integrations/sdk/react-native/getting-started/packages-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/getting-started/packages-options/</guid><description>SDK packages The SDK consists of a few packages. You must use the CioConfig and CustomerIO packages to configure and initialize the SDK.
Package Product Required? Description CustomerIO &amp;#x2705; The main SDK package. Used to initialize the SDK and call the SDK&amp;rsquo;s methods. CioConfig &amp;#x2705; Configure the SDK including in-app messaging support. CioRegion Used inside the CioConfig.region option to declare your region—EU or US. CioLogLevel Used inside the CioConfig.logLevel option to set the level of logs you can view from the SDK.</description></item><item><title>PostgreSQL</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/postgres-reverse-etl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/postgres-reverse-etl/</guid><description>&amp;nbsp;This is a legacy integration
If you&amp;rsquo;re new to Customer.io, you won&amp;rsquo;t see this integration in your integrations directory. You&amp;rsquo;ll use our newer PostgreSQL integration. A "reverse ETL" integration extracts, transforms, and loads data from your Postgres database to your workspace. With this integration, you can automatically add or update people, objects, and their relationships in Customer.io from your database on a recurring interval.
When you set up your integration, you can import people or objects—you cannot import both with the same query.</description></item><item><title>Preview email in Design Studio</title><link>https://docs.customer.io/journeys/preview-email-in-design-studio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/preview-email-in-design-studio/</guid><description>Preview liquid Check out Add &amp;amp; preview liquid for more information on personalizing your messages with liquid data.
Review links Click Review Links to make sure all links in your email work. You&amp;rsquo;ll see a list of valid links and those that need attention under &amp;ldquo;errors&amp;rdquo; and &amp;ldquo;warnings&amp;rdquo;.
Access preview settings In the visual editor, you can preview a few settings while you edit:
Desktop vs mobile views Light vs dark modes Content hidden based on screen size A more in-depth preview is available when you turn on Preview in the canvas toolbar.</description></item><item><title>Rudderstack</title><link>https://docs.customer.io/integrations/data-in/connections/cdps/rudderstack-in/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/cdps/rudderstack-in/</guid><description>&amp;nbsp;You can find the open-source transformer code for this destination in Rudderstack&amp;rsquo;s GitHub repository.
How it works When you set up Customer.io as a Rudderstack Destination, Rudderstack adds, updates, and sends events representing people to Customer.io from one or more sources.
Rudderstack supports the same set of calls as our Pipelines API, with similar payload structures. This page provides some examples of source calls you can make to forward data to Customer.</description></item><item><title>Scheduled syncs</title><link>https://docs.customer.io/integrations/data-in/connections/salesforce/syncs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/salesforce/syncs/</guid><description>We pull data from Salesforce on a regular interval (that you set) called a sync.
sequenceDiagram participant a as Salesforce participant b as Customer.io participant c as Destination service note over a, c: Sync Data: occurs on a schedule a->>a:Changes happen
in Salesforce b->>a: Query for changes a->>b: Send changeset b->>b: Convert to people,
events, objects b->>c: Send to destination While you can see incoming data in the Data In tab, syncs also show in the Imports tab.</description></item><item><title>Set up rich push</title><link>https://docs.customer.io/integrations/sdk/ios/push/rich-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/push/rich-push/</guid><description>1. Add a service extension to your project Add a Service App Extension to your project in Xcode.
You should now see a new file added to your Xcode project. The file is probably named NotificationService and looks similar to this.
import UserNotifications class NotificationService: UNNotificationServiceExtension { override func didReceive( _ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -&amp;gt; Void ) { } override func serviceExtensionTimeWillExpire() { } } 2. Update the service extension &amp;nbsp;Xcode 16.</description></item><item><title>Set up your localization attribute</title><link>https://docs.customer.io/journeys/localization-attribute/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/localization-attribute/</guid><description>How it works To set up your workspace to send translated messages, you&amp;rsquo;ll follow these steps:
Store your audience&amp;rsquo;s language preferences as an attribute on their profiles. Assign this attribute in your language settings. You&amp;rsquo;ll indicate which attributeA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc. Use attributes to target people and personalize messages.</description></item><item><title>Snowflake</title><link>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/snowflake-reverse-etl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/reverse-etl/database-sync/snowflake-reverse-etl/</guid><description>&amp;nbsp;This is a legacy integration
If you&amp;rsquo;re new to Customer.io, you won&amp;rsquo;t see this integration in your integrations directory. You&amp;rsquo;ll use our newer Snowflake integration. A "reverse ETL" integration extracts, transforms, and loads data from your Snowflake database to your workspace. With this integration, you can automatically add or update people, objects, and their relationships in Customer.io from your database on a recurring interval.
When you set up your integration, you can import people or objects—you cannot import both with the same query.</description></item><item><title>Subscription FAQs</title><link>https://docs.customer.io/journeys/unsubscribe-faqs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/unsubscribe-faqs/</guid><description>What messages will someone stop receiving after unsubscribing? By default, if a customer is globally unsubscribed, we will not send them emails, push or SMS for any campaign or broadcast. If a customer is unsubscribed from a topic in your subscription center, we also stop sending email, push and SMS, but only for that topic.
If you use channel preferences, people can also opt out of specific messaging channels. For example, if someone unsubscribes from the push channel, they won&amp;rsquo;t receive push notifications for any topic—even if they&amp;rsquo;re still subscribed to those topics.</description></item><item><title>How the agent works</title><link>https://docs.customer.io/ai/agent/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/ai/agent/how-it-works/</guid><description>When you ask the agent to do something, it works through a series of steps behind the scenes. Along the way, you might see it doing things that look technical—reading files, writing code, running commands. This is all part of the agent&amp;rsquo;s process. Where you work in a user interface, clicking and typing, the agent works by reading and writing code.
Skills If you see the agent reading a skill, it&amp;rsquo;s just loading instructions for how to work with a specific part of Customer.</description></item><item><title>Routines</title><link>https://docs.customer.io/ai/agent/routines/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/ai/agent/routines/</guid><description>How it works Routines are recurring tasks that the agent runs automatically on a schedule. You tell the agent what to check and how often, and it delivers a summary by email each time it runs.
You can use routines to automate the kinds of checks you&amp;rsquo;d otherwise do manually—monitoring deliverability, auditing segments, comparing broadcast performance, or tracking goal conversions. Routines run in safe mode—the agent can read your workspace data and analyze it, but it can&amp;rsquo;t make changes to your campaigns, segments, or other resources.</description></item><item><title>Screen tracking</title><link>https://docs.customer.io/integrations/sdk/android/tracking/screen-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/tracking/screen-events/</guid><description>Screen views are events that record the pages that your audience visits in your app. They have a type property set to screen, and a name representing the title of the screen or page that a person visited in your app.
Screen view events let you trigger campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria. or add people to segmentsA group of people who match a series of conditions.</description></item><item><title>Screen tracking</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/tracking/screen-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/tracking/screen-events/</guid><description>Screen views are events that record the pages that your audience visits in your app. They have a type property set to screen, and a title representing the title of the screen or page that a person visited in your app.
Screen view events let you trigger campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria. or add people to segmentsA group of people who match a series of conditions.</description></item><item><title>Screen tracking</title><link>https://docs.customer.io/integrations/sdk/ios/tracking/screen-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/tracking/screen-events/</guid><description>Screen views are events that record the pages that your audience visits in your app. They have a type property set to screen, and a title representing the title of the screen or page that a person visited in your app.
Screen view events let you trigger campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria. or add people to segmentsA group of people who match a series of conditions.</description></item><item><title>Screen tracking</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/tracking/screen-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/tracking/screen-events/</guid><description>Screen views are events that record the pages that your audience visits in your app. They have a type property set to screen, and a name representing the title of the screen or page that a person visited in your app.
Screen view events let you trigger campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria. or add people to segmentsA group of people who match a series of conditions.</description></item><item><title>Screen tracking</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/tracking/screen-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/tracking/screen-events/</guid><description>Screen views are events that record the pages that your audience visits in your app. They have a type property set to screen, and a name representing the title of the screen or page that a person visited in your app.
Screen view events let you trigger campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria. or add people to segmentsA group of people who match a series of conditions.</description></item><item><title>Screen tracking</title><link>https://docs.customer.io/integrations/sdk/react-native/tracking/screen-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/tracking/screen-events/</guid><description>Screen views are events that record the pages that your audience visits in your app. They have a type property set to screen, and a name representing the title of the screen or page that a person visited in your app.
Screen view events let you trigger campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria. or add people to segmentsA group of people who match a series of conditions.</description></item><item><title>Style custom components</title><link>https://docs.customer.io/journeys/component-properties/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/component-properties/</guid><description>To create responsive custom components or enable dark mode, check out Responsive Styles and Dark Mode.
&amp;nbsp;Use our Design Studio GPT to create a custom component!
Learn how to best utilize our GPT to create code for reusable, custom content. Define properties To declare properties, export a variable like props so the property can be set in the visual editor. Then set this equal to the Component.defineProps object of your &amp;lt;script&amp;gt;.</description></item><item><title>Delete a component</title><link>https://docs.customer.io/journeys/delete-component/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/delete-component/</guid><description>Delete a custom component On your Design Studio dashboard, click Components. Click next to your component. Click Find Component References to see if your component is used in your messages. Remove the component from all messages where it&amp;rsquo;s referenced. &amp;nbsp;Publish changes to connected messages
After you remove component references from messages, publish your changes so your messages and automations are in sync. Click Delete. If you delete a component file before removing its references from messages, you&amp;rsquo;ll see an error in the visual editor.</description></item><item><title>Track metrics for translations</title><link>https://docs.customer.io/journeys/localization-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/localization-metrics/</guid><description>To learn more about metrics, check out Campaign and newsletter metrics.
Campaign metrics When you look at a running campaign, the Overview and Metrics tabs both show aggregated metrics for your messages, including all the languages they contain.
The Metrics tab shows stats for each language under the name of the message block. Beside the message block name, you&amp;rsquo;ll see metrics aggregated across all languages.
Newsletter metrics In the Overview tab of a newsletter, you&amp;rsquo;ll see metrics for each language.</description></item><item><title>Update your privacy policy for SMS</title><link>https://docs.customer.io/journeys/your-privacy-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/your-privacy-policy/</guid><description>&amp;nbsp;This section contains recommendations and examples, but it does not constitute legal advice. Contact your legal team to ensure that you&amp;rsquo;re compliant with all applicable laws and regulations before you make changes to your privacy policy or terms and conditions.
Update your privacy policy Before you request a sender phone number, you need to update your privacy policy to include information about how you&amp;rsquo;ll message your audience and use their phone numbers.</description></item><item><title>4.x -> 4.4.0</title><link>https://docs.customer.io/integrations/sdk/ios/whats-new/4.4.0-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/whats-new/4.4.0-upgrade/</guid><description>What changed? Version 4.4.0 adds support for App Groups, which improves the reliability of push delivery metric tracking. This update is additive—your existing integration continues to work without changes. However, to take advantage of App Groups, you&amp;rsquo;ll need to update your Xcode project configuration and regenerate provisioning profiles if you use manual signing.
Why App Groups? When you send a push notification, the SDK tracks delivery metrics in your Notification Service Extension (NSE).</description></item><item><title>Add or update people</title><link>https://docs.customer.io/journeys/manually-adding-or-updating-people/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/manually-adding-or-updating-people/</guid><description>Add a person via the UI Go to People. Click Add People. Scroll to the bottom of the modal and click Add a single person. Under Identifiers, you&amp;rsquo;ll see id and/or email as options. The identifiers you see depend on the identifiers you&amp;rsquo;ve allowed in workspace settings. You only need to set one identifier to create a person. Learn more in How to identify people. Add other data you want to store on this person&amp;rsquo;s profile.</description></item><item><title>App Groups for push tracking</title><link>https://docs.customer.io/integrations/sdk/flutter/push-notifications/app-groups/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/push-notifications/app-groups/</guid><description>You need App Groups for reliable push delivery tracking on iOS. Without this setup, delivery metrics may be lost if iOS terminates the Notification Service Extension before the tracking request completes. With App Groups configured, the SDK automatically recovers any lost metrics on the next app launch.
Before you begin Before you configure App Groups, make sure you&amp;rsquo;ve completed the following:
Set up push notifications in your app, including the Notification Service Extension (NSE) 1.</description></item><item><title>App Groups for push tracking</title><link>https://docs.customer.io/integrations/sdk/ios/push/app-groups/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/push/app-groups/</guid><description>App Groups are required for reliable push delivery tracking. Without this setup, delivery metrics may be lost if iOS terminates the Notification Service Extension before the tracking request completes. With App Groups configured, the SDK automatically recovers any lost metrics on the next app launch.
Before you begin Before you configure App Groups, make sure you&amp;rsquo;ve completed the following:
Set up push notifications in your app Set up rich push with a Notification Service Extension (NSE) 1.</description></item><item><title>Campaign journeys</title><link>https://docs.customer.io/journeys/campaign-journeys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/campaign-journeys/</guid><description>View and troubleshoot journeys Journeys help you track people&amp;rsquo;s current or historical pathway through your campaign. This makes it very useful for troubleshooting issues like people not proceeding in your workflow or exiting campaigns when you&amp;rsquo;d expect.
To access individual journeys, go to the Journeys tab of Campaigns or a person&amp;rsquo;s profile.
In this campaign, you can see this person entered the campaign at 4:51pm and left it at 4:58pm, a short journey!</description></item><item><title>Checking Link Status</title><link>https://docs.customer.io/journeys/link-checking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/link-checking/</guid><description>Checking Link Status in the Composer When composing your message, you may notice the &amp;ldquo;Review Links&amp;rdquo; button:
When you click it, you&amp;rsquo;ll see a modal with all of your link information. You&amp;rsquo;ll see your link text, the URL, whether it is tracked or untracked, its UTM tags, and any errors associated with the link.
&amp;nbsp;Note:
If you use a link protocol other than http, https, ftp, mailto or tel you may see a message stating that your protocol is not supported.</description></item><item><title>Configure reusable webhooks</title><link>https://docs.customer.io/journeys/webhook-manager/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/webhook-manager/</guid><description>Overview In Workspace Settings, you can configure webhooks to reuse them across your campaigns and API-triggered broadcasts. Use them to reduce friction across your workflows:
Less repetitive work &amp;amp; fewer errors. Define your webhook URL, headers, and auth details once, and reference them in any campaign. Updates at scale. When an API endpoint or auth header changes, update the configuration in one place and all referencing campaigns pick up the change automatically.</description></item><item><title>Connect an email to an automation</title><link>https://docs.customer.io/journeys/add-email-to-automation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/add-email-to-automation/</guid><description>&amp;nbsp;You can only connect a Design Studio message to one automation.
You can connect an email made in Design Studio to any campaign, broadcast, or transactional message, but only one. If you’d like to connect the same email to multiple automations, you can duplicate the email. Connect your message How you connect your Design Studio message depends on the type of automation you&amp;rsquo;re working with.
Campaigns and API-triggered broadcasts Open your campaign or API-triggered broadcast.</description></item><item><title>Create &amp; assign custom roles</title><link>https://docs.customer.io/accounts-and-workspaces/create-roles/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/create-roles/</guid><description>Overview Customer.io has two types of workspace-level roles: standard roles and custom roles. Standard roles come with a predefined set of permissions, while custom roles allow you to specify your own set of permissions across content, integrations, and more.
Account Admins can create custom roles in Account Settings &amp;gt; Roles. You can create roles from scratch or start from an existing role. A few things to keep in mind:
Custom roles must minimally have all view permissions.</description></item><item><title>Create a campaign</title><link>https://docs.customer.io/journeys/create-a-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/create-a-campaign/</guid><description>&amp;nbsp;New to campaigns?
Check out campaign concepts &amp;amp; settings to get started. Here&amp;rsquo;s a brief video showing the main components of our campaign builder.
And here&amp;rsquo;s a walkthrough on creating an onboarding campaign!
Before you begin Before you begin, determine the purpose of your campaign. This will help you define the trigger and goal of your campaign. Are you trying to reach people who have just signed up? Are you interested in notifying people about changes to accounts they manage?</description></item><item><title>Formatting</title><link>https://docs.customer.io/journeys/transformer-formatting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transformer-formatting/</guid><description>Click Transformers &amp;gt; Formatting to get started.
Format your source code Click Prettify to make your code easy to read.
Clicking this unlocks further preferences you can enable:
Indent with spaces or tabs Wrap HTML attributes We remember the state of those toggles if you deactivate and later reactivate them.
To format the code in your editor, click Format Document at the top of the editor.
Reduce the size of your email Click Minify to reduce the size of your source code when it sends.</description></item><item><title>Import people or events via CSV</title><link>https://docs.customer.io/journeys/uploading-people/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/uploading-people/</guid><description>How it works You can upload CSVs or Google Sheets to add people, update people, and send events to Customer.io outside your normal integration path. When you upload a CSV of people or events, each row in your CSV represents a person or an event respectively; each column in your CSV represents an attribute or event property respectively.
When you go to upload a CSV, you&amp;rsquo;ll select People or Events.</description></item><item><title>JavaScript Frameworks</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/frameworks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/frameworks/</guid><description>Client-side vs. server-side The instructions on this page are for client-side implementations. In general, we prefer the client-side library to support things like in-app messaging and automatic page tracking. But, if you need to use a server-side implementation, see our Node.js library.
Feature Browser Library Node.js Library Package @customerio/cdp-analytics-browser @customerio/cdp-analytics-node Page context Automatic: captured from DOM Manual: you must provide URL, path, etc. Identity persistence Automatic: stored in cookies/localStorage Manual: you must pass userId or anonymousId on every call In-app message support Use for Client-side tracking, single page applications (SPAs), in-app messages Server-side tracking, API routes, background jobs React For React-based applications, you&amp;rsquo;ll want to create a singleton instance of the analytics client that you can import throughout your app.</description></item><item><title>Manage subscription preferences</title><link>https://docs.customer.io/journeys/manage-subscription-preferences/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/manage-subscription-preferences/</guid><description>After you set up your subscription center, you can manage people&amp;rsquo;s subscription preferences in several ways.
Set subscription preferences Beyond people unsubscribing themselves from messages, you can also:
manually set subscription preferences in your workspace migrate people&amp;rsquo;s existing preferences from another service send out a campaign requesting they update their preferences track their preferences outside of the subscription center You have the option to set preferences for some subscription topics or channels, while preserving those set for others, using JSON dot notation.</description></item><item><title>Manage version history</title><link>https://docs.customer.io/journeys/version-history/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/version-history/</guid><description>Save a version Versions capture your message, settings, assets, and components at a specific point in time.
You can save a version from several places:
In the visual or code editors, click and select Save Current Version. On a Feedback page, click New Version. Give your version a name and (optionally) a description.
&amp;nbsp;You can only save a version if something has changed since the last one.
If nothing’s changed, you’ll see a message that the version wasn&amp;rsquo;t saved.</description></item><item><title>Mobile Lifecycle events</title><link>https://docs.customer.io/integrations/sdk/android/tracking/lifecycle-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/tracking/lifecycle-events/</guid><description>By default, we track the following lifecycle events:
Application Installed: A user installed your app. Application Updated: A user updated your app. Application Opened: A user opened your app. Application Foregrounded: A user switched back to your app. Application Backgrounded: A user backgrounded your app or switched to another app. You might also want to send your own lifecycle events, like Application Crashed or Application Updated. You can do this using the track method.</description></item><item><title>Mobile Lifecycle events</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/tracking/lifecycle-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/tracking/lifecycle-events/</guid><description>By default, we track the following lifecycle events:
Application Installed: A user installed your app. Application Updated: A user updated your app. Application Opened: A user opened your app. Application Foregrounded: A user switched back to your app. Application Backgrounded: A user backgrounded your app or switched to another app. You might also want to send your own lifecycle events, like Application Crashed or Application Updated. You can do this using the track call.</description></item><item><title>Mobile Lifecycle events</title><link>https://docs.customer.io/integrations/sdk/flutter/tracking/lifecycle-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/tracking/lifecycle-events/</guid><description>By default, we track the following lifecycle events:
Application Installed: A user installed your app. Application Updated: A user updated your app. Application Opened: A user opened your app. Application Foregrounded: A user switched back to your app. Application Backgrounded: A user backgrounded your app or switched to another app. You might also want to send your own lifecycle events, like Application Crashed or Application Updated. You can do this using the track call.</description></item><item><title>Mobile Lifecycle events</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/tracking/lifecycle-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/tracking/lifecycle-events/</guid><description>By default, we track the following lifecycle events:
Application Installed: A user installed your app. Application Updated: A user updated your app. Application Opened: A user opened your app. Application Foregrounded: A user switched back to your app. Application Backgrounded: A user backgrounded your app or switched to another app. You might also want to send your own lifecycle events, like Application Crashed or Application Updated. You can do this using the track call.</description></item><item><title>Mobile Lifecycle events</title><link>https://docs.customer.io/integrations/sdk/ios/tracking/lifecycle-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/tracking/lifecycle-events/</guid><description>By default, we track the following lifecycle events:
Application Installed: A user installed your app. Application Updated: A user updated your app. Application Opened: A user opened your app. Application Foregrounded: A user switched back to your app. Application Backgrounded: A user backgrounded your app or switched to another app. You might also want to send your own lifecycle events, like Application Crashed or Application Updated. You can do this using the track call.</description></item><item><title>Mobile Lifecycle events</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/tracking/lifecycle-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/tracking/lifecycle-events/</guid><description>By default, we track the following lifecycle events:
Application Installed: A user installed your app. Application Updated: A user updated your app. Application Opened: A user opened your app. Application Foregrounded: A user switched back to your app. Application Backgrounded: A user backgrounded your app or switched to another app. You might also want to send your own lifecycle events, like Application Crashed or Application Updated. You can do this using the track method.</description></item><item><title>Mobile Lifecycle events</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/tracking/lifecycle-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/tracking/lifecycle-events/</guid><description>By default, we track the following lifecycle events:
Application Installed: A user installed your app. Application Updated: A user updated your app. Application Opened: A user opened your app. Application Foregrounded: A user switched back to your app. Application Backgrounded: A user backgrounded your app or switched to another app. You might also want to send your own lifecycle events, like Application Crashed or Application Updated. You can do this using the track method.</description></item><item><title>Mobile Lifecycle events</title><link>https://docs.customer.io/integrations/sdk/react-native/tracking/lifecycle-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/tracking/lifecycle-events/</guid><description>By default, we track the following lifecycle events:
Application Installed: A user installed your app. Application Updated: A user updated your app. Application Opened: A user opened your app. Application Foregrounded: A user switched back to your app. Application Backgrounded: A user backgrounded your app or switched to another app. You might also want to send your own lifecycle events, like Application Crashed or Application Updated. You can do this using the track method.</description></item><item><title>Newsletters</title><link>https://docs.customer.io/journeys/newsletters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/newsletters/</guid><description>How it works A Newsletter is a single message that you want to send to a group of people. You can schedule a newsletter or send it immediately. Newsletters provide a simple way to broadcast a message to your audience without setting up a complex campaign.
You might send a newsletter to alert your audience to changes in your terms of service, or to a group of people when you onboard people belonging to an account.</description></item><item><title>Opt-in and out flow</title><link>https://docs.customer.io/journeys/opt-in-and-out-flow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/opt-in-and-out-flow/</guid><description>You must preview your opt-in and out flow before you register as an SMS sender You do not need to have completed your opt-in and out flow before you contact Customer.io to register as an SMS sender—in part because you won&amp;rsquo;t be able to do it until you have a sender number!
But you need to have designs or a preview to demonstrate your opt-in and out flow. Twilio and carriers evaluate your designs to make sure that you&amp;rsquo;re ready to send messages.</description></item><item><title>Our MCP Server</title><link>https://docs.customer.io/ai/mcp-server/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/ai/mcp-server/</guid><description>How it works Our Model Context Protocol (MCP) Server helps you interact with Customer.io through your favorite AI tools—Claude, Cursor, and so on.
Where you might be able to use our APIs to do some things, the MCP server is a layer of tools that includes features that aren&amp;rsquo;t possible with our APIs today. The MCP server is especially helpful if you want to integrate your mobile or web app with Customer.</description></item><item><title>Pipelines vs Track API</title><link>https://docs.customer.io/integrations/api/track-vs-cdp-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/api/track-vs-cdp-api/</guid><description>TL;DR: Which API should I use? We recommend that you use the Pipelines API unless you send data to Customer.io through a customer data platform (CDP) like Segment or Rudderstack. The Pipelines API is newer and includes support for newer Customer.io features like geolocation.
General differences We have two APIs to help you get data into Customer.io: the Track API and the Pipelines API. If you&amp;rsquo;re new to Customer.io: most of our libraries and SDKs are based on the Pipelines API; it&amp;rsquo;s what you&amp;rsquo;ll use for most integrations.</description></item><item><title>Send event</title><link>https://docs.customer.io/journeys/data-campaign-event-action/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/data-campaign-event-action/</guid><description>&amp;nbsp;You can send events from other kinds of campaigns too!
You&amp;rsquo;re most likely to create events in webhook-triggered campaigns—that&amp;rsquo;s how you associate incoming data with a person. But now you can send events from any campaign, making it easy to trigger parallel campaigns. You can send an event for the current person or someone else entirely. How it works Webhook-triggered campaigns start with arbitrary data from an incoming webhook. This data isn&amp;rsquo;t associated with a person, and it can take any shape.</description></item><item><title>Send event</title><link>https://docs.customer.io/journeys/event-action/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/event-action/</guid><description>An event consists of a name and a data object. The name is typically how you&amp;rsquo;ll select an event, and you can further filter people based on data in the event. You can use properties in the data object to personalize campaigns using liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person&amp;rsquo;s first name, you might use the variable {{customer.</description></item><item><title>Style individual messages</title><link>https://docs.customer.io/journeys/properties-menu/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/properties-menu/</guid><description>Global styles vs message styles By default, components pull from your Global Styles—like text, link, and button styles. If you want to change these for an individual message, you can override them in the Properties menu.
To override styles for a group of standard componentsA pre-built block that helps you build beautiful, engaging messages as quickly as possible in Design Studio., add them to a container (like a section, box, or column) and modify the container&amp;rsquo;s styles—the components will inherit these.</description></item><item><title>Use Emmet syntax</title><link>https://docs.customer.io/journeys/code-editor-emmet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/code-editor-emmet/</guid><description>For example, type this (don&amp;rsquo;t copy/paste):
div&amp;gt;div&amp;gt;table&amp;gt;tr*3&amp;gt;td&amp;gt;a Then hit tab and it expands to:
&amp;lt;div&amp;gt; &amp;lt;div&amp;gt; &amp;lt;table&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;&amp;lt;a href=&amp;#34;&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;&amp;lt;a href=&amp;#34;&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;&amp;lt;a href=&amp;#34;&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; You can learn more about abbreviations in the official Emmet documentation.
Specify child tags with &amp;gt; table&amp;gt;tr&amp;gt;td Becomes&amp;hellip;
&amp;lt;table&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt; &amp;lt;/table&amp;gt; Specify sibling tags with + a+a+a Becomes&amp;hellip;
&amp;lt;a href=&amp;#34;&amp;#34;&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;a href=&amp;#34;&amp;#34;&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;a href=&amp;#34;&amp;#34;&amp;gt;&amp;lt;/a&amp;gt; Multiply tags with * table&amp;gt;tr*3&amp;gt;td*2 Becomes&amp;hellip;</description></item><item><title>Anonymous activity</title><link>https://docs.customer.io/integrations/sdk/android/tracking/anonymous-activity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/tracking/anonymous-activity/</guid><description>In Customer.io, you&amp;rsquo;ll see anonymous activity in the Activity Log, but we don&amp;rsquo;t surface anonymous profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.io. You reference a person&amp;rsquo;s profile attributes in liquid using customer—e.g. {{customer.email}}. in Customer.io. You won&amp;rsquo;t be able to find an &amp;ldquo;anonymous person&amp;rdquo; in your workspace, and an anonymous person can&amp;rsquo;t trigger campaigns or get messages (including push notifications) from Customer.</description></item><item><title>Anonymous activity</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/tracking/anonymous-activity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/tracking/anonymous-activity/</guid><description>In Customer.io, you&amp;rsquo;ll see anonymous activity in the Activity Log, but we don&amp;rsquo;t surface anonymous profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.io. You reference a person&amp;rsquo;s profile attributes in liquid using customer—e.g. {{customer.email}}. in Customer.io. You won&amp;rsquo;t be able to find an &amp;ldquo;anonymous person&amp;rdquo; in your workspace, and an anonymous person can&amp;rsquo;t trigger campaigns or get messages (including push notifications) from Customer.</description></item><item><title>Anonymous activity</title><link>https://docs.customer.io/integrations/sdk/flutter/tracking/anonymous-activity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/tracking/anonymous-activity/</guid><description>In Customer.io, you&amp;rsquo;ll see anonymous activity in the Activity Log, but we don&amp;rsquo;t surface anonymous profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.io. You reference a person&amp;rsquo;s profile attributes in liquid using customer—e.g. {{customer.email}}. in Customer.io. You won&amp;rsquo;t be able to find an &amp;ldquo;anonymous person&amp;rdquo; in your workspace, and an anonymous person can&amp;rsquo;t trigger campaigns or get messages (including push notifications) from Customer.</description></item><item><title>Anonymous activity</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/tracking/anonymous-activity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/tracking/anonymous-activity/</guid><description>In Customer.io, you&amp;rsquo;ll see anonymous activity in the Activity Log, but we don&amp;rsquo;t surface anonymous profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.io. You reference a person&amp;rsquo;s profile attributes in liquid using customer—e.g. {{customer.email}}. in Customer.io. You won&amp;rsquo;t be able to find an &amp;ldquo;anonymous person&amp;rdquo; in your workspace, and an anonymous person can&amp;rsquo;t trigger campaigns or get messages (including push notifications) from Customer.</description></item><item><title>Anonymous activity</title><link>https://docs.customer.io/integrations/sdk/ios/tracking/anonymous-activity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/tracking/anonymous-activity/</guid><description>In Customer.io, you&amp;rsquo;ll see anonymous activity in the Activity Log, but we don&amp;rsquo;t surface anonymous profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.io. You reference a person&amp;rsquo;s profile attributes in liquid using customer—e.g. {{customer.email}}. in Customer.io. You won&amp;rsquo;t be able to find an &amp;ldquo;anonymous person&amp;rdquo; in your workspace, and an anonymous person can&amp;rsquo;t trigger campaigns or get messages (including push notifications) from Customer.</description></item><item><title>Anonymous activity</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/tracking/anonymous-activity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/tracking/anonymous-activity/</guid><description>In Customer.io, you&amp;rsquo;ll see anonymous activity in the Activity Log, but we don&amp;rsquo;t surface anonymous profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.io. You reference a person&amp;rsquo;s profile attributes in liquid using customer—e.g. {{customer.email}}. in Customer.io. You won&amp;rsquo;t be able to find an &amp;ldquo;anonymous person&amp;rdquo; in your workspace, and an anonymous person can&amp;rsquo;t trigger campaigns or get messages (including push notifications) from Customer.</description></item><item><title>Anonymous activity</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/tracking/anonymous-activity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/tracking/anonymous-activity/</guid><description>In Customer.io, you&amp;rsquo;ll see anonymous activity in the Activity Log, but we don&amp;rsquo;t surface anonymous profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.io. You reference a person&amp;rsquo;s profile attributes in liquid using customer—e.g. {{customer.email}}. in Customer.io. You won&amp;rsquo;t be able to find an &amp;ldquo;anonymous person&amp;rdquo; in your workspace, and an anonymous person can&amp;rsquo;t trigger campaigns or get messages (including push notifications) from Customer.</description></item><item><title>Anonymous activity</title><link>https://docs.customer.io/integrations/sdk/react-native/tracking/anonymous-activity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/tracking/anonymous-activity/</guid><description>In Customer.io, you&amp;rsquo;ll see anonymous activity in the Activity Log, but we don&amp;rsquo;t surface anonymous profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.io. You reference a person&amp;rsquo;s profile attributes in liquid using customer—e.g. {{customer.email}}. in Customer.io. You won&amp;rsquo;t be able to find an &amp;ldquo;anonymous person&amp;rdquo; in your workspace, and an anonymous person can&amp;rsquo;t trigger campaigns or get messages (including push notifications) from Customer.</description></item><item><title>Brand and campaign registration</title><link>https://docs.customer.io/journeys/sms-brand-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/sms-brand-campaign/</guid><description>How it works Brand and Campaign are regulatory terms for sending messages in the US and Canada. Before you can register for phone numbers, you have to declare who you are—your brand—and what kinds of messages you&amp;rsquo;ll send—your campaigns.
We&amp;rsquo;ll help you register your brand and campaigns. If you want to get started right away, take a look at campaigns below. Before you contact Customer.io to help you register as an SMS sender, you&amp;rsquo;ll need to provide at least three example messages for each of your campaign use cases—each kind of message you want to send.</description></item><item><title>Subscription preference metrics</title><link>https://docs.customer.io/journeys/subscription-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/subscription-metrics/</guid><description>You can track subscription preference changes across campaigns, broadcasts, and newsletters—and send subscription events to external systems through reporting webhooks and data warehouse integrations.
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.</description></item><item><title>What kind of phone number do I need?</title><link>https://docs.customer.io/journeys/phone-number-types/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/phone-number-types/</guid><description>Most of the guidance here is focused on the United States and Canada—the regions we typically support through Twilio. You can use international numbers, but you may need to work with Twilio to support them.
Types of phone numbers You can send messages using three different kinds of phone numbers. In general, all three have similar regulatory requirements, but they have different daily sending limits. You&amp;rsquo;ll want to pick the type of number that best fits your business needs.</description></item><item><title>Send in-app messages</title><link>https://docs.customer.io/journeys/send-in-app-message/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/send-in-app-message/</guid><description>Before you begin You&amp;rsquo;re welcome to try out our in-app message editor and set up campaigns with in-app messages before you integrate our SDKs. But your audience won&amp;rsquo;t be able to see your in-app messages until you integrate with our SDKs for your app or your website.
How it works You can send in-app messages as a part of any campaign or broadcast workflow. In addition to creating your message, you&amp;rsquo;ll also determine when and where your message will show up for your audience:</description></item><item><title>2.x -> 3.x</title><link>https://docs.customer.io/integrations/sdk/expo/whats-new/3.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/whats-new/3.x-upgrade/</guid><description>What changed? Version 3.0.0 removes support for React Native&amp;rsquo;s legacy architecture. This aligns with React Native&amp;rsquo;s move to exclusively support their new architecture. You must migrate your app to use React Native&amp;rsquo;s new architecture to use this and future versions of the plugin.
Do you need to update to this version? We recommend updating to the latest plugin version. However, if your app uses the old React Native architecture and you&amp;rsquo;re not ready to migrate, you can continue using version 2.</description></item><item><title>3.x -> 3.9.0</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/whats-new/3.9.0-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/whats-new/3.9.0-upgrade/</guid><description>Key Changes The primary change in version 3.9.0 is the introduction of the wrapper pattern for handling push notifications on iOS. This change:
Eliminates method swizzling: No more automatic method replacement Simplifies setup: Less boilerplate code required Improves reliability: More predictable behavior See the instructions below to update your app depending on whether you send push notifications with APN or FCM and whether you use UIKit or SwiftUI.
Update with APNs UIKit Update your AppDelegate.</description></item><item><title>3.x -> 4.0.0</title><link>https://docs.customer.io/integrations/sdk/ios/whats-new/4.0.0-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/whats-new/4.0.0-upgrade/</guid><description>What changed? Version 4.0.0 introduces a breaking change for users who utilize Firebase Cloud Messaging (FCM) for push notifications. The change improves the FCM integration by consolidating Firebase dependencies into a dedicated wrapper package.
FCM Integration Changes New dependency required: CioFirebaseWrapper package is now required for FCM push notifications Import statement updated: Add import CioFirebaseWrapper wherever you use import CioMessagingPushFCM Initialize method unchanged: Continue using MessagingPushFCM.initialize() but it now comes from the new package Note: This change only affects users utilizing FCM for push notifications.</description></item><item><title>4.x -> 4.10</title><link>https://docs.customer.io/integrations/sdk/android/whats-new/4.10-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/whats-new/4.10-upgrade/</guid><description>What changed? The changes in this update are mainly to align our APIs across different platforms. You should not experience changes to functionality or features.
Changes to initialization CustomerIOBuilder is deprecated. You should use CustomerIOConfigBuilder instead.
Before CustomerIOBuilder( applicationContext = this, // new credentials cdpApiKey = &amp;#34;your_cdp_api_key&amp;#34; migrationSiteId = &amp;#34;your_site_id&amp;#34; ).apply { // If you&amp;#39;re in the EU, set Region.EU region(Region.US) addCustomerIOModule( ModuleMessagingInApp( // the in-app module now has its own configuration config = MessagingInAppModuleConfig.</description></item><item><title>A/B Test events</title><link>https://docs.customer.io/integrations/data-in/semantic-events/a-b-test/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/semantic-events/a-b-test/</guid><description>How it works A/B tests help you determine how variations in your websites, apps, and services perform with your audience. We use this specification to support default actions—any we have now and ones we might add in the future. So, if you send A/B tests that conform to this specification, you&amp;rsquo;ll be ready to trigger downstream actions in outbound integrations that rely on an A/B testing framework.
We refer to A/B tests as experiments.</description></item><item><title>Academy: Structured Learning</title><link>https://docs.customer.io/get-started/get-started-academy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/get-started/get-started-academy/</guid><description>The Academy is a free resource where anybody with a Customer.io account can learn about Customer.io.
Access the academy To access the Academy:
Log into your account. Click Need help? at the top. Click Learn with Academy. From there, you can browse individual courses or complete a longer learning path composed of multiple courses. Learning paths are great for getting started with Customer.io!
You can also filter by topic or use the search bar to find relevant learning material.</description></item><item><title>Add &amp; preview liquid</title><link>https://docs.customer.io/journeys/liquid-visual-editor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/liquid-visual-editor/</guid><description>Use the Personalization panel to add the data you want into your messages without having to memorize our syntax or remember all of your attributes.
After you add your liquid, enter Preview mode to check that your data renders as you&amp;rsquo;d expect!
Add liquid You can add liquid to text-based standard componentsA pre-built block that helps you build beautiful, engaging messages as quickly as possible in Design Studio. in three ways:</description></item><item><title>Add a data-out integration</title><link>https://docs.customer.io/integrations/data-out/add-destination/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/add-destination/</guid><description>How it works An outgoing integration is the place you want to send your data to—where you store data, use it to gather analytics, to power marketing automation (like Customer.io Journeys), and so on.
You can send data from any number of incoming integrations to and outgoing integration, or you can do simple one-to-one mapping—whatever you need. However, in most cases, you&amp;rsquo;ll find that you typically want to aggregate data from multiple data sources to a single outgoing integration—so you can act on a holistic understanding of your audience.</description></item><item><title>Adding URL parameters to links</title><link>https://docs.customer.io/journeys/url-parameters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/url-parameters/</guid><description>How it works While Customer.io supports link tracking, you might want to add URL parameters to links to track clicks from specific campaigns, messages, or other factors.
You can manually add URL parameters to links in messages, but this can be tedious and error-prone. You probably have a repeatable set of parameters that you want to use for links in different messages.
That&amp;rsquo;s where our URL parameters feature comes in. It makes it easy to automatically append a templated set of URL parameters to links in your messages.</description></item><item><title>Adoption: drive feature usage</title><link>https://docs.customer.io/journeys/feature-adoption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/feature-adoption/</guid><description>Business-to-business (B2B) companies often need to track and drive growth across both individual users of their product and the account or company they work for. In Customer.io, objectsAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course. help you do this.
For this recipe, imagine you work at a design platform, Sketcher.io, which offers graphic design and product design tools.</description></item><item><title>Advanced: transform data</title><link>https://docs.customer.io/integrations/data-in/connections/classic-api/cio-journeys-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/classic-api/cio-journeys-api/</guid><description>&amp;nbsp;Try using one of our SDKs or the Pipelines API instead
Changing actionsA block in a campaign workflow—like a message, delay, or attribute change. for data coming into Customer.io can be complex. If you&amp;rsquo;re just getting started, we suggest that you format your data based on our default actions and don&amp;rsquo;t change them.
These integrations are based on the Pipelines API already, and our libraries make it easier to understand and manage action mappings for destinations.</description></item><item><title>API-triggered broadcasts</title><link>https://docs.customer.io/journeys/api-triggered-broadcasts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/api-triggered-broadcasts/</guid><description>How it works API-triggered broadcasts provide a way to send a one-to-many campaign on demand. It may help to think of API-triggered broadcasts like event-triggered campaigns, except the event comes from your backend integration and represents a group of people. For example, you might use an API-triggered broadcast to:
Send news alerts to a group of people interested in a specific topic. Alert users interested in an event when tickets go on sale.</description></item><item><title>Batch update</title><link>https://docs.customer.io/journeys/batch-update-webhook-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/batch-update-webhook-campaigns/</guid><description>How it works You can perform a batch update in any campaign, but you&amp;rsquo;re most likely to use it in a webhook-triggered campaign, which starts with arbitrary data from an incoming webhook. This data isn&amp;rsquo;t associated with anybody, and it can take any shape. A batch update lets you associate this data with one or more people—either as attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc.</description></item><item><title>Batch update</title><link>https://docs.customer.io/journeys/batch-update/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/batch-update/</guid><description>How it works You can perform a batch update in any campaign. A batch update lets you associate this data with one or more people—either as attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc. Use attributes to target people and personalize messages. or eventsSomething that a person in your workspace did.</description></item><item><title>Campaigns page</title><link>https://docs.customer.io/journeys/intro-to-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/intro-to-campaigns/</guid><description>Click Campaigns in the left-hand menu to find a list of your campaigns. You can filter for your campaigns, change the default data you see, modify the state of your campaigns, or initiate creating one.
Search for campaigns You can filter to find campaigns by:
name description triggerA trigger determines who enters your campaign and when. status - whether your campaign is active (running) or not (draft, stopped) topic - the subscription preferenceCustomer.</description></item><item><title>Campaigns, broadcasts, and transactional messages</title><link>https://docs.customer.io/journeys/types-of-campaigns-and-broadcasts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/types-of-campaigns-and-broadcasts/</guid><description>If you&amp;rsquo;re just getting started, checkout Start sending campaigns and workflows for a high-level overview.
Campaigns Campaigns offer the most robust options for messaging automation. They offer the most flexible and specific options for triggering a campaign as well as the ability to automate messages over time, as opposed to sending messages all at once.
Your campaign trigger determines who enters your campaign and when. Most triggers are based around people, like when they match certain criteria.</description></item><item><title>Create content templates</title><link>https://docs.customer.io/journeys/whatsapp-content-templates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/whatsapp-content-templates/</guid><description>How it works WhatsApp requires that you use templates to ensure that messages comply with their policies and to prevent spam. So, before you can send WhatsApp messages, you&amp;rsquo;ll need to create templates and have them approved by Meta/WhatsApp.
The process to create and use templates depends on whether you connected your Facebook Business Account directly to Customer.io or set up WhatsApp support as a part of your SMS setup through Twilio.</description></item><item><title>Create or update person</title><link>https://docs.customer.io/journeys/create-update-person/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/create-update-person/</guid><description>How it works You can use the Create or update person action in any campaign workflow. When you update the person currently in your campaign, you can set attributes from static values, the event that triggered your campaign, other profileAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.io. You reference a person&amp;rsquo;s profile attributes in liquid using customer—e.</description></item><item><title>Custom events</title><link>https://docs.customer.io/integrations/data-in/custom-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/custom-events/</guid><description>How it works Most of our API methods have a defined purpose: the identify call identifies users; page calls track pageviews. But the track call lets you send custom events, so that you can track the activities that are meaningful to you. Track calls take a name representing the name of the event you want to track and a set of custom properties.
For example, when someone adds an item to their cart, you might send an added_to_cart event with properties representing the item that your customer added to their cart.</description></item><item><title>Customer.io events</title><link>https://docs.customer.io/integrations/data-in/semantic-events/cio-journeys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/semantic-events/cio-journeys/</guid><description>How it works Your workspace supports a number of actions that aren&amp;rsquo;t immediately apparent from the API. For example, I can add a person using the identify function, but what if I want to remove a person?
That&amp;rsquo;s what semantic events are for: they let you send track calls with a specific event name to perform actions in Customer.io. In general, the event names map directly to the thing you want to do: like Create Device or Delete Person.</description></item><item><title>Customizing Email Layouts</title><link>https://docs.customer.io/journeys/customizing-layout-starters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/customizing-layout-starters/</guid><description>&amp;nbsp;Layouts are only available in our rich text or code editors.
You cannot use layouts with Design Studio or our drag and drop editor; instead, start from a template. Or learn more about the reusable content features available in Design Studio (components) and the drag and drop editor (saved rows, snippets). Our Layout Starters are built using a framework called Foundation for Emails. This framework ensures that our starter email layouts are generally supported across clients, while still letting you to customize the look and feel of your emails.</description></item><item><title>Ecommerce Events</title><link>https://docs.customer.io/integrations/data-in/semantic-events/ecommerce/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/semantic-events/ecommerce/</guid><description>How it works Ecommerce track events typically contain the same information across platforms—products, brands, orders, cart information, etc. However, each place you send this data to might map this information differently.
Our ecommerce specification helps you send events in a uniform format that maps to the actionsThe source event and data that triggers an API call to your destination. For example, an incoming identify event from your sources adds or updates a person in our Customer.</description></item><item><title>Edit connected messages &amp; publish changes</title><link>https://docs.customer.io/journeys/publish-changes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/publish-changes/</guid><description>&amp;nbsp;You&amp;rsquo;ll need to publish changes not just when you update the message in the editor, but also when you update a custom componentA custom block of code with content and properties you can reuse across messages made in Design Studio. file or global style used in the message.
Edit your message Access the message from either the connected automation or directly in Design Studio. In either case, you&amp;rsquo;ll have full access to editing and previewing your message.</description></item><item><title>Email Deliverability Best Practices</title><link>https://docs.customer.io/journeys/email-deliverability-best-practices/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/email-deliverability-best-practices/</guid><description>What is email deliverability? Email deliverability is whether or not the emails you are sending are reaching the inbox of your recipients. There are a number of factors that can directly influence whether or not your emails arrive in the inbox. All of these best practice guidelines should be addressed to ensure maximum deliverability.
Deliverability factors Technical Setup Configuring your MX, DKIM and SPF records is the most important step in letting inbox providers know that Customer.</description></item><item><title>Email events</title><link>https://docs.customer.io/integrations/data-in/semantic-events/email/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/semantic-events/email/</guid><description>How it works Email service providers and other platforms produce events that help you track the lifecycles of your emails—whether emails are delivered, opened, etc. If you send email events into Customer.io, we recommend that you follow the specifications on this page. See Email Events if you want to download the specification or try out email events.
We use this specification to support default actions—any we have now and ones we might add in the future.</description></item><item><title>Email: Getting Started</title><link>https://docs.customer.io/journeys/email-getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/email-getting-started/</guid><description>How it works When you get started with Customer.io or create a new workspace, you can choose how you want to send emails:
Through Customer.io as your managed provider Through your own provider/SMTP server In most cases, the choice is simple: if you already have your own provider, you can use them. If you don&amp;rsquo;t, it&amp;rsquo;s probably easiest to use Customer.io.
In either case, you&amp;rsquo;ll need to verify your domain to send email.</description></item><item><title>Follow up on NPS responses</title><link>https://docs.customer.io/journeys/satismeter-data-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/satismeter-data-campaign/</guid><description>As a part of this guide, you&amp;rsquo;ll:
Set up a webhook-triggered campaign, capturing a response from Satismeter when someone fills out your survey and converting it to an event. Set up an event-triggered campaign (using the Satismeter event) to message people based on their net promoter score (NPS). sequenceDiagram participant A as Customer participant B as Satismeter participant C as Customer.io A->>B: Customer gives NPS rating B->>C: Webhook forwards response C->>C: Convert to event C->>A: Email customer with response Before you begin You&amp;rsquo;ll need access to your Satismeter account and your Customer.</description></item><item><title>Forms</title><link>https://docs.customer.io/journeys/in-app-forms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/in-app-forms/</guid><description>&amp;nbsp;We&amp;rsquo;re adding to this feature!
Today, forms support text input, but we&amp;rsquo;re working on support for more input types—like checkboxes and radio buttons. How it works In-app messages—sent to your mobile app or website—can include form components to collect text-based feedback from recipients.
When you add a Form or form-styled components to your message like Long Text or Short Text, we add a Form element to your message. Whenever someone submits the form, we&amp;rsquo;ll:</description></item><item><title>Formstack</title><link>https://docs.customer.io/integrations/data-in/connections/forms/formstack/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/formstack/</guid><description>How it works Formstack is a form builder that lets you create forms and add them to your website. This integration lets you identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.</description></item><item><title>Get started</title><link>https://docs.customer.io/journeys/push-getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/push-getting-started/</guid><description>Before you begin Setting up push notifications requires development work in your mobile app, access to your push provider, and then you&amp;rsquo;ll need to compose messages in Customer.io. This may mean that you&amp;rsquo;ll need to coordinate work across a few different people in your organization to get up and running!
Your path in the setup process might change depending on whether you&amp;rsquo;re a developer integrating with Customer.io or a marketer who wants to send messages.</description></item><item><title>Get Started</title><link>https://docs.customer.io/journeys/slack/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/slack/</guid><description>What you need to get started It&amp;rsquo;s very easy to set up Slack in Customer.io. All you&amp;rsquo;ll need are your Slack login details, if you&amp;rsquo;re not logged into your team already.
Enable Slack in Customer.io Before you can send Slack messages, you need to enable the Slack action in Customer.io—essentially inviting Customer.io to your Slack workspace as a bot. When you configure Slack in Customer.io, you need to provide Slack credentials with the &amp;ldquo;bot&amp;rdquo; scope, letting Customer.</description></item><item><title>Global styles for in-app messages</title><link>https://docs.customer.io/journeys/global-styles-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/global-styles-in-app/</guid><description>How Design Studio works Design Studio is a flexible editor that helps you create beautiful, responsive messages faster than ever before. Use it to set branding across emails made in Design Studio and in-app messages.
If you&amp;rsquo;re new to Design Studio, this is the core of what you need to know:
You continue to create an in-app message in a workflow, like a campaign or broadcast. By default, new messages use the styles set in Design Studio.</description></item><item><title>Go</title><link>https://docs.customer.io/integrations/data-in/connections/servers/go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/servers/go/</guid><description>How it works Our Go library helps you record source events from your server-side code. This lets your Go-based app send requests to our servers, and we route your data to your cloud-mode destinations.
Like our other libraries, you can log anonymous activity with an anonymousId. When you identify a person, you can pass the anonymousId and we&amp;rsquo;ll associate the anonymous activity with the identified person.
This library uses a configurable buffer to batch messages, optimized to reduce network activity.</description></item><item><title>How to identify people</title><link>https://docs.customer.io/journeys/identifying-people/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/identifying-people/</guid><description>How it works You can identify people using values that are unique for each person, like an email address or a user id. You add and update people based on their identifiers.
To identify people, you need to first understand your workspace settings. Then you can add or update people based on the allowed identifiers:
email: A person&amp;rsquo;s email address. You may want to use this identifier to track leads before they become customers.</description></item><item><title>How We Bill</title><link>https://docs.customer.io/accounts-and-workspaces/how-we-bill/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/how-we-bill/</guid><description>How it works When you sign up for Customer.io, you choose a plan—essentials, premium, or enterprise. Your plan determines how many emails and profilesThe representation of a person or group in Customer.io. People and custom objects both have their own profiles, but we bill based on the total number of profiles in your account. you&amp;rsquo;re entitled to. Profiles are the peopleAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.</description></item><item><title>Identify</title><link>https://docs.customer.io/integrations/data-in/source-spec/identify-spec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/source-spec/identify-spec/</guid><description>&amp;nbsp;See our API documentation for code samples
This page can help you better understand when and how to use this API method. But, if you already know how it works and are ready to get started, you can go straight to our API documentation and start writing code. How it works The Identify method helps you represent a user and their traits — the things you know about them, like their name, email address, and so on.</description></item><item><title>Identify people</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/legacy-js/identify/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/legacy-js/identify/</guid><description>How it works Identifying people adds them to, or updates them in, your workspace, and makes them eligible to receive in-app messages. After you identify someone, calls to the SDK will automatically reference the identified person until you identify someone else or send a reset call.
Before you identify someone, we&amp;rsquo;ll attribute their activity on your website—page and track events—to an anonymous user. When you identify a person, we&amp;rsquo;ll automatically associate their anonymous activities with their profile in your workspace.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/android/in-app/in-app-event-listeners/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/in-app/in-app-event-listeners/</guid><description>Handle responses to messages (event listeners) You can set up event listeners to handle your audience&amp;rsquo;s response to your messages. For example, you might run different code in your app when your audience taps a button in your message or when they dismiss the message without tapping a button.
You can listen for four different events:
messageShown: a message is &amp;ldquo;sent&amp;rdquo; and appears to a user messageDismissed: the user closes the message (by tapping an element that uses the close action) errorWithMessage: the message itself produces an error—this probably prevents the message from appearing to the user messageActionTaken: the user performs an action in the message.</description></item><item><title>Inline in-app messages</title><link>https://docs.customer.io/integrations/sdk/android/in-app/inline-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/in-app/inline-in-app/</guid><description>How it works An inline message targets a specific view in your app. Basically, you&amp;rsquo;ll create an empty placeholder view in your app&amp;rsquo;s UI, and we&amp;rsquo;ll fill it with the content of your message.
This makes it easy to show dynamic content in your app without development effort. You don&amp;rsquo;t need to force an update every time you want to talk to your audience. And, unlike push notifications, banners, toasts, and so on, in-line messages can look like natural parts of your app.</description></item><item><title>Inline in-app messages</title><link>https://docs.customer.io/integrations/sdk/expo/in-app-messages/inline-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/in-app-messages/inline-in-app/</guid><description>How it works An inline message targets a specific view in your app. Basically, you&amp;rsquo;ll create an empty placeholder view in your app&amp;rsquo;s UI, and we&amp;rsquo;ll fill it with the content of your message.
This makes it easy to show dynamic content in your app without development effort. You don&amp;rsquo;t need to force an update every time you want to talk to your audience. And, unlike push notifications, banners, toasts, and so on, in-line messages can look like natural parts of your app.</description></item><item><title>Inline in-app messages</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/in-app-messages/inline-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/in-app-messages/inline-in-app/</guid><description>How it works An inline message targets a specific widget in your app. You create a placeholder InlineInAppMessageView in your UI, and the SDK fills it with the content of your message.
Inline messages let you show dynamic content without releasing a new version of your app. Unlike push notifications, banners, or modal in-app messages, an inline message looks and feels like part of your interface.
1. Add View to your app UI to support inline messages Add InlineInAppMessageView anywhere you want to display inline messages.</description></item><item><title>Inline in-app messages</title><link>https://docs.customer.io/integrations/sdk/flutter/in-app-messages/inline-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/in-app-messages/inline-in-app/</guid><description>How it works An inline message targets a specific widget in your app. You create a placeholder InlineInAppMessageView in your UI, and the SDK fills it with the content of your message.
Inline messages let you show dynamic content without releasing a new version of your app. Unlike push notifications, banners, or modal in-app messages, an inline message looks and feels like part of your interface.
1. Add View to your app UI to support inline messages Add InlineInAppMessageView anywhere you want to display inline messages.</description></item><item><title>Inline in-app messages</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/in-app/inline-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/in-app/inline-in-app/</guid><description>How it works An inline message targets a specific view in your app. Basically, you&amp;rsquo;ll create an empty placeholder view in your app&amp;rsquo;s UI, and we&amp;rsquo;ll fill it with the content of your message.
This makes it easy to show dynamic content in your app without development effort. You don&amp;rsquo;t need to force an update every time you want to talk to your audience. And, unlike push notifications, banners, toasts, and so on, in-line messages can look like natural parts of your app.</description></item><item><title>Inline in-app messages</title><link>https://docs.customer.io/integrations/sdk/ios/in-app/inline-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/in-app/inline-in-app/</guid><description>How it works An inline message targets a specific view in your app. Basically, you&amp;rsquo;ll create an empty placeholder view in your app&amp;rsquo;s UI, and we&amp;rsquo;ll fill it with the content of your message.
This makes it easy to show dynamic content in your app without development effort. You don&amp;rsquo;t need to force an update every time you want to talk to your audience. And, unlike push notifications, banners, toasts, and so on, in-line messages can look like natural parts of your app.</description></item><item><title>Inline in-app messages</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/in-app-messages/inline-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/in-app-messages/inline-in-app/</guid><description>How it works An inline message targets a specific view in your app. Basically, you&amp;rsquo;ll create an empty placeholder view in your app&amp;rsquo;s UI, and we&amp;rsquo;ll fill it with the content of your message.
This makes it easy to show dynamic content in your app without development effort. You don&amp;rsquo;t need to force an update every time you want to talk to your audience. And, unlike push notifications, banners, toasts, and so on, in-line messages can look like natural parts of your app.</description></item><item><title>Inline in-app messages</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/in-app-messages/inline-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/in-app-messages/inline-in-app/</guid><description>How it works An inline message targets a specific view in your app. Basically, you&amp;rsquo;ll create an empty placeholder view in your app&amp;rsquo;s UI, and we&amp;rsquo;ll fill it with the content of your message.
This makes it easy to show dynamic content in your app without development effort. You don&amp;rsquo;t need to force an update every time you want to talk to your audience. And, unlike push notifications, banners, toasts, and so on, in-line messages can look like natural parts of your app.</description></item><item><title>Inline in-app messages</title><link>https://docs.customer.io/integrations/sdk/react-native/in-app-messages/inline-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/in-app-messages/inline-in-app/</guid><description>How it works An inline message targets a specific view in your app. Basically, you&amp;rsquo;ll create an empty placeholder view in your app&amp;rsquo;s UI, and we&amp;rsquo;ll fill it with the content of your message.
This makes it easy to show dynamic content in your app without development effort. You don&amp;rsquo;t need to force an update every time you want to talk to your audience. And, unlike push notifications, banners, toasts, and so on, in-line messages can look like natural parts of your app.</description></item><item><title>Integrate external tools with Design Studio</title><link>https://docs.customer.io/integrations/api/integrate-with-ds/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/api/integrate-with-ds/</guid><description>To upload or update assets like images and PDFs, you&amp;rsquo;ll use a different set of endpoints: the Assets endpoints.
Both the Assets and Design Studio endpoints are part of our App API and use the same bearer token for authentication.
How it works Regardless of which external editor you use, the process for preparing and integrating your email with Customer.io follows the same pattern:
Design your email in your preferred tool.</description></item><item><title>Integrate your app</title><link>https://docs.customer.io/journeys/push-developer-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/push-developer-guide/</guid><description>When you integrate with us, you have some choices depending on the push platform you use (APNs, FCM) and whether or not you want to use our SDKs—though we strongly recommend that you use our SDKs if possible to simplify your integration process.
But, before you can send and receive push notifications with Customer.io, you must:
Generate and add certificates for your push service, Apple Push Notification service (APNs) and/or Firebase Cloud Messaging (FCM).</description></item><item><title>Jotform</title><link>https://docs.customer.io/integrations/data-in/connections/forms/jotform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/jotform/</guid><description>How it works When you set up a Jotform integration, we&amp;rsquo;ll give you a personalized Webhook URL. You&amp;rsquo;ll provide this webhook URL to Jotform. Whenever someone submits your form, Jotform calls this webhook to send the form submission data to Customer.io.
The form submission creates a person in your workspace if they do not already exist, or updates them if they do. In both cases, we map form fields to attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc.</description></item><item><title>Lead capture</title><link>https://docs.customer.io/journeys/in-app-lead-form/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/in-app-lead-form/</guid><description>How it works The Lead Form component is a form containing Name and Email fields. When people submit the form, we&amp;rsquo;ll add the person to your workspace so you can send them messages and convert them to a customer or user. This component helps you capture leads from anonymous messages.
For example, you might send an anonymous message with a Lead Form that offers people coupons when they sign up with their email addresses.</description></item><item><title>LINE metrics and reporting</title><link>https://docs.customer.io/journeys/line-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/line-metrics/</guid><description>LINE message metrics The following metrics apply to LINE messages. Note that metrics like Delivered depend on the webhook you set up in your LINE account.
Metric Description Attempted We&amp;rsquo;re trying to send the message to LINE. You may see this status if we need to retry your message. Sent The message left Customer.io and was passed to LINE. Delivered LINE confirmed that the message reached the recipient, reported through your LINE webhook.</description></item><item><title>Link shortening</title><link>https://docs.customer.io/journeys/sms-link-shortening/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/sms-link-shortening/</guid><description>How it works In Workspace settings &amp;gt; SMS, you&amp;rsquo;ll see a toggle for Shorten links. When this is enabled, we automatically shorten links in your SMS/MMS messages.
When someone clicks a shortened link, the link directs them to Customer.io, where we&amp;rsquo;ll resolve the link and then send your audience to the ultimate destination.
Shortened links are especially helpful with link tracking. By default, we track the links that people click in your SMS or WhatsApp messages, but tracked links won&amp;rsquo;t reliably fit inside a 160 character SMS message; shortened links fix that!</description></item><item><title>Live chat events</title><link>https://docs.customer.io/integrations/data-in/semantic-events/live-chat/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/semantic-events/live-chat/</guid><description>How it works If you send live chat events into Data Customer.io, you should shape incoming events using the formats on this page. We use this specification to support default actions—any we have now and ones we might add in the future. If you send live chat events that conform to this specification, you&amp;rsquo;ll be ready to trigger downstream actions in integrations that rely on an live chat events. See Live Chat Events if you want to download the specification or try out live chat events.</description></item><item><title>Method Reference</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/method-reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/method-reference/</guid><description>Identify The identify method is how you link your users, and their actions, to a recognizable userId and traits. The Identify method follows the format below and includes the following options.
cioanalytics.identify([userId], [traits], [options], [callback]); // A typical identify call without options or callback cioanalytics.identify(&amp;#39;f4ca124298&amp;#39;, { email: &amp;#39;cool.person@example.com&amp;#39;, first_name: &amp;#39;cool&amp;#39;, last_name: &amp;#39;person&amp;#39; }); Argument Optional/Required Type Description userId optional String The database ID for the user. If you don't know who the user is yet, you can omit the userId and just record traits.</description></item><item><title>Metrics Overview</title><link>https://docs.customer.io/journeys/analytics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/analytics/</guid><description>What does Customer.io measure? We primarily focus on two kinds of metrics. You may find a combination of both of these things on the Home dashboard, Analysis, and Campaign Overview pages. While they often correspond, it’s important to note that we measure two different things.
Campaign journeyTypically, a person&amp;rsquo;s path through your campaign. If the campaign is triggered by a webhook, then a journey captures the webhook&amp;rsquo;s path, not a person&amp;rsquo;s.</description></item><item><title>Migrate components from Parcel</title><link>https://docs.customer.io/journeys/migrate-comp-from-parcel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/migrate-comp-from-parcel/</guid><description>Keep the following in mind as you migrate:
Make sure the component tag name matches the content value in the script element. If this is the child of another component, make sure you also add the parent components to Design Studio or remove the allowedParents array. If you run into other issues, try troubleshooting with our GPT designed for creating custom components!</description></item><item><title>Migrate from another provider</title><link>https://docs.customer.io/journeys/push-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/push-migration/</guid><description>How it works While you can export your audience from your old provider, push notification delivery is still dependent on the SDK(s) in your app. You can&amp;rsquo;t send a push from Customer.io to someone using a version of your app that doesn&amp;rsquo;t use Customer.io!
So, when you move to Customer.io from another push provider, you&amp;rsquo;ll need to import your audience and help them upgrade to a version of your app that uses Customer.</description></item><item><title>Migrate from another service</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/js-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/js-migration/</guid><description>Migrating from Segment Our calls are nearly identical to Segment&amp;rsquo;s. In most cases, you can simply replace your Segment script with our JavaScript client, and you&amp;rsquo;re all set.
However, Segment supports a wider range of integration destinations than we do. Before you make the switch, check that we support the services you integrate with and the actionsThe source event and data that triggers an API call to your destination. For example, an incoming identify event from your sources adds or updates a person in our Customer.</description></item><item><title>Mobile App Lifecycle Events</title><link>https://docs.customer.io/integrations/data-in/semantic-events/mobile-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/semantic-events/mobile-app/</guid><description>How it works Our Mobile App Lifecycle Event specification helps you send events in a uniform format that automatically maps data to the integrations we support. Following this spec makes it easier to use data from your mobile apps without having to re-map your incoming data each time you set up a new integration.
These events typically contain information about your app version and build. If you use our SDKs, we capture some of the following events automatically.</description></item><item><title>Objects</title><link>https://docs.customer.io/journeys/objects-create/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/objects-create/</guid><description>&amp;nbsp;Before you can create an object, you must create an object type.
Create an object Remember that an object type is the kind of non-people grouping that you want to track in Customer.io—like Companies, Online classes, or Accounts. An object is an individual thing—a single company, online class, or account—that you want to relate to one or more people.
You can create objects programmatically by integrating your systems with your Customer.</description></item><item><title>Registering device tokens</title><link>https://docs.customer.io/journeys/device-tokens/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/device-tokens/</guid><description>What is a device token? Device tokens—sometimes known as push tokens in other products or push services—are unique, anonymous identifiers for the app-device combination that are issued by push notification services: they&amp;rsquo;re basically device addresses, so you can send push notifications to your app&amp;rsquo;s users. If a person doesn&amp;rsquo;t have a device token, they can&amp;rsquo;t receive push notifications and their device won&amp;rsquo;t appear in Customer.io.
In Customer.io, we reflect device tokens as devices (or device_id in our APIs and SDKs).</description></item><item><title>Segment builder</title><link>https://docs.customer.io/ai/agent/ai-segment-builder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/ai/agent/ai-segment-builder/</guid><description>How it works Segment conditions typically require you to break your audience down into if this, then that style statements—but the logic can become complex when you have narrow or especially dense conditions.
To help you build these conditions, you can use our agent. Describe the segment or ask for suggestions based on your target audience.
You can ask the agent to build a segment at any time. Or, when you go to create a segmentA group of people who match a series of conditions.</description></item><item><title>Send a test message</title><link>https://docs.customer.io/journeys/send-test/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/send-test/</guid><description>You can send a test message before or after connecting a Design Studio message to an automation.
Open the message in Design Studio or the connected automation. Click Send test. Add up to 25 email addresses or choose an email group. Your email address is added by default. Click Send. Prevent threading adds a unique subject line so your inbox won’t group test emails together. If you don&amp;rsquo;t want this, uncheck the box.</description></item><item><title>Send a Welcome Email</title><link>https://docs.customer.io/journeys/send-a-welcome-email/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/send-a-welcome-email/</guid><description>Introduction The way you make customers feel in the first few days after they’ve signed up for your site or service can influence their level of engagement with your company long-term. This moment of first impression is a crucial moment.
In this tutorial, we’ll walk you through creating your welcome email in Customer.io (and also assumes that you&amp;rsquo;ve completed your integration).
Ingredients Every customer in your Customer.io account must have a created_at attributeA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc.</description></item><item><title>Send a WhatsApp Message</title><link>https://docs.customer.io/journeys/send-whatsapp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/send-whatsapp/</guid><description>Set up your WhatsApp message &amp;nbsp;If you created your WhatsApp template in Design Studio, check out our Design Studio docs!
The process for sending a WhatsApp message made with Design Studio is simpler than with other templates. Learn more. Add a WhatsApp message block to your campaign or broadcast workflow. Click Add Content.
Select a WhatsApp approved sender in the From field. If you only have one sender phone number, it&amp;rsquo;s already selected for you.</description></item><item><title>Send in-app messages using webhooks</title><link>https://docs.customer.io/journeys/in-app-message-webhooks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/in-app-message-webhooks/</guid><description>An in-app message is a message that targets a person currently using your app or website. In-app messages reach people after they open your app, helping you communicate with engaged members of your audience without bombarding them with notifications outside your app.
&amp;nbsp;We have our own in-app solution!
Check out our in-app documentation to learn more about sending in-app messages from Customer.io without a third party service. If you already use another service, you might use webhooks as a transitional solution while you migrate to Customer.</description></item><item><title>Set up a transactional push</title><link>https://docs.customer.io/journeys/transactional-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transactional-push/</guid><description>Before you begin Before you can send transactional push notifications you need to:
Enable Push Notifications in your workspace for Android and/or iOS. Set up your app to receive push notifications from Customer.io. We strongly recommend that you use our SDKs. If this isn&amp;rsquo;t an option, you can follow the instructions here to configure push without our SDKs. Create a transactional push notification &amp;nbsp;Try our Postman collection!
You can use our Postman collection and associated environment to get started with the Customer.</description></item><item><title>Set up rich push</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/push/rich-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/push/rich-push/</guid><description>1. Add a service extension to your project Add a Service App Extension to your project in Xcode.
You should now see a new file added to your Xcode project. The file is probably named NotificationService and looks similar to this.
import UserNotifications class NotificationService: UNNotificationServiceExtension { override func didReceive( _ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -&amp;gt; Void ) { } override func serviceExtensionTimeWillExpire() { } } 2. Update the service extension Modify your new NotificationService extension by selecting the push package you want to import and calling the appropriate Customer.</description></item><item><title>Set URL parameters for a single message</title><link>https://docs.customer.io/journeys/transformer-url-parameters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transformer-url-parameters/</guid><description>You can define URL parameters in two ways:
Across all messages in Workspace Settings For a single email made in Design Studio This article shows you how to add URL parameters to a single message made in Design Studio.
If you set URL parameters in workspace settings and in a single message, we append all parameters to your links. One does not override the other, so make sure you don&amp;rsquo;t duplicate URL parameters across these locations.</description></item><item><title>Squarespace</title><link>https://docs.customer.io/integrations/data-in/connections/forms/squarespace/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/squarespace/</guid><description>How it works Squarespace is a website builder that lets you create websites and add forms to your site. This integration lets you identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.</description></item><item><title>Swift 6</title><link>https://docs.customer.io/integrations/sdk/ios/getting-started/swift-six/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/getting-started/swift-six/</guid><description>General Swift 6 was introduced in 2024 with Xcode 16. It includes language updates focused on safer, more predictable code, including macro improvements, stronger C++ interoperability, and stronger data-race detection through Strict Concurrency.
Strict Concurrency helps you catch concurrency issues at compile time by enforcing actor isolation, Sendable requirements, and safer async boundaries. Many iOS apps are still migrating to Swift 6, while others have already completed the transition and run Swift 6 in production.</description></item><item><title>Time Window</title><link>https://docs.customer.io/journeys/delivery-window/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/delivery-window/</guid><description>This video shows each of our delay options. Click to fast forward to the Time Window section.
How to set up a time window Within your campaign workflow, the Time Window option will be available to drag and drop into your workflow builder from the sidebar.
If there are already other items in your workflow you&amp;rsquo;ll need to choose where you want to place your Time Window. Then, you can customize when you&amp;rsquo;d like the user to advance to the next step in the workflow.</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/expo/tracking/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/tracking/track-events/</guid><description>Track an event The track method helps you send events representing your audience&amp;rsquo;s activities to Customer.io. When you send events, you can include event properties—information about the person or the event that they performed.
In Customer.io, you can use events to trigger campaigns and broadcasts. Those campaigns might send someone a push notification or manipulate information associated with the person in your workspace.
Events include the following:
name: the name of the event.</description></item><item><title>Transitioning to Customer.io as a sender</title><link>https://docs.customer.io/journeys/deliverability-getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/deliverability-getting-started/</guid><description>What is a sender identity? Your sending identity, sometimes called a sender &amp;ldquo;fingerprint,&amp;rdquo; is comprised of:
Sending domain Sending IP Other non-public fingerprints Every inbox provider tracks your sender identity differently. The goal of establishing sender fingerprints is to properly identify senders and calibrate their reputation and anti-spam systems based on historical behavior and performance.
When you move to a new sending platform, some aspects of your sender identity will change.</description></item><item><title>Trigger inbox messages from your backend</title><link>https://docs.customer.io/journeys/send-inbox-txnl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/send-inbox-txnl/</guid><description>How it works You can leverage our transactional messaging feature to send inbox messages immediately from your backend without triggering a campaign or broadcast. This gives you a way to send one-to-one messages using Customer.io without having your message-sending logic inside Customer.io.
flowchart LR a{Did user perform behavior that triggers an inbox message?} a-->|yes|b(Trigger inbox_message) a-.....->|no|c(Message not sent) b-->d{Is the recipient on your website or app?} d-->|no, wait for user to return</description></item><item><title>Typeform</title><link>https://docs.customer.io/integrations/data-in/connections/forms/typeform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/typeform/</guid><description>How it works When you set up a Typeform integration, we&amp;rsquo;ll give you a personalized Webhook URL. You&amp;rsquo;ll provide this webhook URL to Typeform. Whenever someone submits your form, Typeform sends the form submission data to Customer.io.
The form submission creates a person in your workspace if they do not already exist, or updates them if they do. In both cases, we map form fields to attributes for each person.</description></item><item><title>Unbounce</title><link>https://docs.customer.io/integrations/data-in/connections/forms/unbounce/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/unbounce/</guid><description>How it works Unbounce is a website builder that lets you create websites and add forms to your site. This integration lets you identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.</description></item><item><title>Use MSO syntax</title><link>https://docs.customer.io/journeys/code-editor-mso/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/code-editor-mso/</guid><description>Add conditional logic for Outlook You can add conditional logic that&amp;rsquo;s only parsed by Outlook through MSO comments.
Syntax highlighting We visually distinguish MSO comments from regular comments to help you scan your email.
For example, the following comment:
&amp;lt;!--[if true]&amp;gt; &amp;lt;table role=&amp;#34;presentation&amp;#34; width=&amp;#34;100%&amp;#34; align=&amp;#34;center&amp;#34; style=&amp;#34;background:#EEE&amp;#34;&amp;gt; &amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td style=&amp;#34;width:600px;background:#ffffff;padding:24px;&amp;#34;&amp;gt; &amp;lt;![endif]--&amp;gt; becomes
Disable syntax highlighting You can disable syntax highlighting for MSO comments in your editor preferences. Click Cmd/Ctrl + , then turn off the toggle.</description></item><item><title>Use Your Own SMTP Server</title><link>https://docs.customer.io/journeys/use-your-smtp-server/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/use-your-smtp-server/</guid><description>Upsides to doing this You&amp;rsquo;re in full control. You can send as many emails as you want: emails sent through your custom SMTP server don’t count against your billing plan’s allotted email count. We&amp;rsquo;ll still handle your open and click tracking. We&amp;rsquo;ll keep a full copy of your sent emails associated with the recipient. Downsides to doing this Customer.io won&amp;rsquo;t have a feedback loop for data from your email service provider.</description></item><item><title>Using Zapier with the Track API</title><link>https://docs.customer.io/integrations/data-in/connections/webhooks/zapier-legacy-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/webhooks/zapier-legacy-api/</guid><description>Each Zap has one app as the Trigger, where your information comes from and which causes one or more Actions in other apps, where your data gets sent automatically.
What Customer.io Actions and Triggers are Supported? Supported Actions Create or Update Customer - Creates a new customer. If the customer already exists, it will be updated. Create Event - Creates an event for a specific customer. Create Anonymous Event - Creates an event for an anonymous profile.</description></item><item><title>Video playback events</title><link>https://docs.customer.io/integrations/data-in/semantic-events/video/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/semantic-events/video/</guid><description>How it works Video events help you observe and report how customers engage with your videos and ad content. Using the specification outlined on this page will help you take advantage of out-of-the-box actions for integrations that rely on video playback events. See Video Playback Events if you want to download the specification or try out video playback events.
Playback events occur in three areas:
Video: this represents the complete movie, program, or video that a person watches.</description></item><item><title>Webflow</title><link>https://docs.customer.io/integrations/data-in/connections/forms/webflow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/webflow/</guid><description>How it works Webflow is a website builder that lets you create websites and add forms to your site. This integration lets you identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.</description></item><item><title>Wordpress with WPForms</title><link>https://docs.customer.io/integrations/data-in/connections/forms/wordpress-with-wpforms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/wordpress-with-wpforms/</guid><description>How it works This integration lets you identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously., update, and trigger events for people who submit your forms on your Wordpress site using the WPForms plugin.</description></item><item><title>Anonymous messages</title><link>https://docs.customer.io/journeys/anonymous-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/anonymous-in-app/</guid><description>How it works With anonymous in-app messages, you can show messages to people who visit your website or use your app but haven&amp;rsquo;t been identified—people who haven&amp;rsquo;t logged in, provided their email address, and so on. These messages specifically exclude people you&amp;rsquo;ve identified.
You can determine the pages where your message will appear, and any unidentified people who visit the page will see your message! That way you can show visitors a banner, pop-up, or even present them with a survey to learn what brought them to your website.</description></item><item><title>Billing for SMS messages</title><link>https://docs.customer.io/accounts-and-workspaces/sms-billing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/sms-billing/</guid><description>&amp;nbsp;This page is for accounts billed for SMS activity through Customer.io
Most users currently have their own Twilio account and manage their phone numbers and bill directly with Twilio. If this is the case for your account, you should see Twilio&amp;rsquo;s billing information instead. How it works SMS billing is mostly concerned with message &amp;ldquo;segments,&amp;rdquo; where each segment is up to 160 characters—what you might sometimes see as a single chat bubble in traditional SMS applications.</description></item><item><title>Email content analysis</title><link>https://docs.customer.io/ai/content-analysis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/ai/content-analysis/</guid><description>&amp;nbsp;Not seeing this AI feature?
Make sure &amp;ldquo;Customer.io AI&amp;rdquo; is enabled in Privacy, Data, &amp;amp; AI settings. Reach out to an Account Admin if you can&amp;rsquo;t edit the toggle. How it works When you work on an email in your campaign, broadcast, or newsletter, you can click Analyze Email Content to review your email and highlight ways you can improve deliverability so your message gets to the audience you want to build relationships with.</description></item><item><title>Manage customer attributes</title><link>https://docs.customer.io/journeys/attributes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/attributes/</guid><description>What are customer attributes? Customer attributes are data points about people in your audience: things like first_name, email or product_interests—any information that is important for your marketing workflows.
Every attribute has a name and a value. The name is how you reference the attribute whenever you want to get or set the value. When you want to personalize messages with customer data or group people by shared characteristics, you&amp;rsquo;ll use the attribute name.</description></item><item><title>Tags</title><link>https://docs.customer.io/journeys/tagging-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/tagging-campaigns/</guid><description>Manage tags You can create, edit, and delete tags from Campaigns, Broadcasts, Transactional messages, Segments, and your Data Index. No matter where you create them, you can assign that tag to any other automation, segment, or attribute moving forward. However, you can only assign tags on individual campaigns, segments, etc.
From landing pages Select the tags filter at the top of pages like Campaigns, Segments, etc. Click Manage.
Here you can create, edit or delete tags and check their usage.</description></item><item><title>Billing for WhatsApp messages</title><link>https://docs.customer.io/accounts-and-workspaces/whatsapp-billing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/whatsapp-billing/</guid><description>Meta&amp;rsquo;s pricing Meta, WhatsApp&amp;rsquo;s parent company, charges for WhatsApp messaging on a per-message basis. Pricing varies by template category and the recipient&amp;rsquo;s country. They also offer volume-based pricing tiers.
For example, a message based on a &amp;ldquo;utility&amp;rdquo; template to a recipient in the United States costs $0.0034 per message. See Meta&amp;rsquo;s WhatsApp pricing page for the full list of rates for templates, countries, and message volume tiers. Template categories include:</description></item><item><title>Liquid recipes</title><link>https://docs.customer.io/journeys/liquid-recipes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/liquid-recipes/</guid><description>You can find our available tags, keys, and filters in our Liquid syntax list, and you can learn more about how to use liquid in Personalize messages with liquid.
Countdown to an event If your customers subscribe to an event—a webinar, they buy tickets to a movie or concert, etc—you can include a countdown to an event or specific date and time that your audience is interested in! The timer produces an animated GIF that counts down to the event.</description></item><item><title>Manual Segments</title><link>https://docs.customer.io/journeys/manual-segments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/manual-segments/</guid><description>Create a manual segment You have the opportunity to create manual segments when you import people by CSV and import people from a database. Otherwise, you can create a manual segment first, and then add people to it later.
Go to Segments. Click Create Segment. Enter a Name and Description for the segment. These help you find the segment—both in the list of segments, and when selecting the segment in a campaign, broadcast, etc.</description></item><item><title>AI credits</title><link>https://docs.customer.io/accounts-and-workspaces/ai-credits/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/ai-credits/</guid><description>How it works AI credits are the units that LLM actions consume when the action calls a Large Language Model (LLM). Each time a person uses an LLM action in your campaign, the LLM runs and uses credits based on the model and complexity of the request.
&amp;nbsp;AI credits only apply to LLM actions
Only LLM actions consume AI credits in your account. Other AI features—including the Agent, segment builder, content analysis, and in-app message suggestions—don&amp;rsquo;t use AI credits.</description></item><item><title>Segment mobile device audiences</title><link>https://docs.customer.io/journeys/device-segments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/device-segments/</guid><description>How it works A person can have multiple devices. Each device has its own attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc. Use attributes to target people and personalize messages.. You can use these attributes to create a segment of people whose devices match your criteria.
Remember that your segment matches people.</description></item><item><title>CSS cleanup</title><link>https://docs.customer.io/journeys/transformer-css-cleanup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transformer-css-cleanup/</guid><description>Remove unused CSS Enable this transformer and we&amp;rsquo;ll automatically find embedded CSS classes or ids that aren&amp;rsquo;t in use and remove them.
This only affects selectors with at least one class or id. If the selector only has attributes and tags (i.e. a[x-apple-data-detectors]), it will not be affected.
In this code, the class i-never-get-used will be removed since no HTML tags use that particular class.
&amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;style&amp;gt; .i-am-used { background: blue; } .</description></item><item><title>Custom JS integrations</title><link>https://docs.customer.io/integrations/data-in/connections/forms/javascript-form-integrations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/javascript-form-integrations/</guid><description>How it works When someone submits your form, we&amp;rsquo;ll identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously. the form submitter and assign them attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc.</description></item><item><title>Disconnect an email from an automation</title><link>https://docs.customer.io/journeys/disconnect-from-automation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/disconnect-from-automation/</guid><description>You can also duplicate the message to use it in another automation.
Disconnect message from an automation To disconnect a Design Studio message from a campaign or API-triggered broadcast, delete the email block from your workflow.
To disconnect a Design Studio message from a newsletter or transactional message, you can either switch to another message type (then back to &amp;ldquo;Email&amp;rdquo; if you want a different email connected) or delete the automation and start over.</description></item><item><title>Domain Authentication</title><link>https://docs.customer.io/journeys/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/authentication/</guid><description>Why we require domain authentication Creating great copy means nothing if your messages don&amp;rsquo;t make it to the People you&amp;rsquo;re trying to reach. Although it’s just one piece of the deliverability puzzle (along with your copy and overall reputation), authenticating your email domains helps your messages reach your users. Check out our post on Email Deliverability to know more about how it works.
In addition to improving email deliverability, authenticating your sending domains in Customer.</description></item><item><title>Goals</title><link>https://docs.customer.io/journeys/goals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/goals/</guid><description>How it works From the Goals page, you can define a business outcome—like starting a paid plan or completing onboarding—and attribute campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria. and broadcastsA message sent to a group of people at the same time. Unlike campaigns, where individuals can enter campaigns and receive messages on their own time, you&amp;rsquo;ll trigger a broadcast for everybody meeting your criteria at once.</description></item><item><title>Multi-language support for the subscription center</title><link>https://docs.customer.io/journeys/subscription-center-translation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/subscription-center-translation/</guid><description>To translate custom copy on your subscription preferences page, like topics and a custom header and headline, you first need to add a topic and, optionally, customize your heading.
You can localize your subscription preferences page before and after enabling your subscription center.
We currently support 29 languages. Please let us know if you need support for another one!
Factors that influence how translations render for your audience The following factors influence which languages your users will see on their subscription preferences page in this order:</description></item><item><title>Personalize actions with JavaScript</title><link>https://docs.customer.io/journeys/js-in-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/js-in-actions/</guid><description>How it works In our Create Event and Create or Update Person actions, you can select the JavaScript option to return a specific value from your Trigger data. JavaScript might be easier to use than Liquid when you want to modify incoming JSON.
If you use the JSON editor in the JavaScript mode, you can return an object representing the data object for your event. These are properties you can reference in messages or other campaigns using liquidA syntax that supports variables, letting you personalize messages for your audience.</description></item><item><title>Relationships</title><link>https://docs.customer.io/journeys/relationships/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/relationships/</guid><description>Create relationships between objects and people to segment users based on the groups they belong to and to personalize messages with object data.
You can create and remove relationships between objects and people through:
object and people pages in the UI our Track API our web sdk reverse ETL integrations our Segment integration While you can relate objects to people, you can&amp;rsquo;t relate objects to objects. If this is functionality you need, please share your use case with us.</description></item><item><title>Set journey attributes</title><link>https://docs.customer.io/journeys/set-journey-attributes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/set-journey-attributes/</guid><description>Unlike customer attributes, journey attributes don&amp;rsquo;t persist on a person&amp;rsquo;s profile—they automatically expire when the person exits the campaign. This keeps your workspace data clean while still letting you use data for personalization, conditions, and branching within a workflow.
How it works You can set journey attributes in three ways:
Method Use case Set journey attributes action Set values directly based on profile attributes, trigger data, liquid, or JavaScript. For instance, you might do this to temporarily store a discount code while a person is actively in a campaign.</description></item><item><title>Delete a domain</title><link>https://docs.customer.io/journeys/delete-domain/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/delete-domain/</guid><description>Go to Workspace Settings &amp;gt; Email. Click Show Records to the right of the domain you want to delete. Click Delete domain. Confirm your action. The domain will no longer appear in settings and the corresponding From addresses will not be available for emails.
Remove a domain from messages If any email uses the From address for the domain you want to delete, you won&amp;rsquo;t be able to delete the domain.</description></item><item><title>Actions</title><link>https://docs.customer.io/integrations/data-out/actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/actions/</guid><description>Here&amp;rsquo;s a quick demonstration showing how actions work and how easy it is to change data structures to fit your needs.
How it works Customer.io knows how to use the data you send in identify calls and track events. But your outbound integrations don&amp;rsquo;t all work the same way Customer.io does! So we have to reshape the data you send to Customer.io to fit the kinds of requests and data your outgoing integration expects.</description></item><item><title>Action triggers: code mode</title><link>https://docs.customer.io/integrations/data-out/action-trigger-syntax/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/action-trigger-syntax/</guid><description>How it works On any action, click Code mode to see the FQL trigger for that action. You can set or edit the trigger conditions to determine when we send data to your integration.
This can be especially helpful if you need to set up complex trigger logic with nested and/or conditions—which you can&amp;rsquo;t do with the simple visual editor.
Standard view Code mode You&amp;rsquo;ll apply criteria that evaluates to true or false based on the contents of incoming requests.</description></item><item><title>Backfill historical data</title><link>https://docs.customer.io/integrations/data-in/importing-old-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/importing-old-data/</guid><description>Backfill people and attributes You can backfill people and their attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc. Use attributes to target people and personalize messages. in your Customer.io account through our integrations or manually in your workspace. You might do this to store all your data within Customer.io so you can create segmentsA segment is a group of people in your workspace.</description></item><item><title>Default sending settings</title><link>https://docs.customer.io/journeys/sending-behavior/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/sending-behavior/</guid><description>Defaults In campaigns and API-triggered broadcasts, messages are set to queue, not send automatically. All campaigns and API-triggerd broadcasts have the setting &amp;ldquo;Track opens and link clicks&amp;rdquo; on. Messages inherit a campaign or broadcast&amp;rsquo;s subscription preference setting. You can, however, override this setting on each message. If you use our global unsubscribe functionality (this is our out-of-the-box option), we send to all subscribed by default. If you use our subscription center, you must choose to send to people subscribed to a specific topic or all subscribed AND unsubscribed.</description></item><item><title>Filter incoming data</title><link>https://docs.customer.io/integrations/data-in/connections/hubspot/filter-incoming-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/hubspot/filter-incoming-data/</guid><description>How it works When you sync data from an integration like HubSpot to Customer.io, we re-shape it to match Customer.io&amp;rsquo;s data model through Actions. By default, your Journeys Workspace Actions are set up to process and use all of the data you sync to Customer.io. This works for most integrations.
But what do you do if you want to filter out certain requests from HubSpot?
You&amp;rsquo;d create a new Customer.io Journeys (Workspace) instance to handle data from these integrations independently from default settings!</description></item><item><title>Proxying requests to Customer.io</title><link>https://docs.customer.io/integrations/data-in/proxying-requests/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/proxying-requests/</guid><description>Proxying requests through your backend server lets you keep your Customer.io credentials secure while maintaining control over data collection. Instead of sending data directly from client applications to Customer.io, your SDKs send data to a server you control, which then forwards the requests to Customer.io.
Why proxy requests? There are several reasons you might want to proxy requests through your backend:
Security: Keep your Customer.io credentials secure on your backend instead of embedding them in client applications.</description></item><item><title>1. Create your workspace</title><link>https://docs.customer.io/get-started/create-workspace/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/get-started/create-workspace/</guid><description>Create your account and workspace After you create your account, you&amp;rsquo;ll follow the on-screen steps to make a workspace. If you&amp;rsquo;re new to Customer.io, we encourage you to use the default settings. They support most use cases and you can change them later!
When you create your account, you&amp;rsquo;re considered an administrator. You can add other users to your account and determine their roles within your account and workspaces.
Adding additional workspaces You can always set up extra workspaces when you go to Settings &amp;gt; Account-settings &amp;gt; Workspaces and click Add Workspace.</description></item><item><title>1x -> 2.x</title><link>https://docs.customer.io/integrations/sdk/expo/whats-new/2.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/whats-new/2.x-upgrade/</guid><description>What changed? While this represents a significant change &amp;ldquo;under the hood,&amp;rdquo; we&amp;rsquo;ve tried to make it as seamless as possible for you; much of your implementation remains the same.
This move also adds two additional features:
Support for anonymous tracking: you can send events and other activity for anonymous users, and we&amp;rsquo;ll reconcile that activity with a person when you identify them. Built-in lifecycle events: the SDK now automatically captures events like &amp;ldquo;Application Installed&amp;rdquo; and &amp;ldquo;Application Updated&amp;rdquo; for you.</description></item><item><title>2. Set up message channels</title><link>https://docs.customer.io/get-started/set-up-messages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/get-started/set-up-messages/</guid><description>Before you begin Before you can send messages, you need to configure the types of messages you want to send. If your workspace is new, you can follow the onscreen setup guide, but you can always add channels later under ** Settings &amp;gt; Workspace settings.
Some message channels take more time and effort to set up than others. Most require access to resources outside of Customer.io. You might need to work with your development team or other teams in your organization to set up your message channels.</description></item><item><title>2.x -> 3.x</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/whats-new/3.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/whats-new/3.x-upgrade/</guid><description>What changed? This update provides native support for our new integrations framework. While this represents a significant change &amp;ldquo;under the hood,&amp;rdquo; we&amp;rsquo;ve tried to make it as seamless as possible for you; much of your implementation remains the same.
This move also adds two additional features:
Support for anonymous tracking: you can send events and other activity for anonymous users, and we&amp;rsquo;ll reconcile that activity with a person when you identify them.</description></item><item><title>3. Integrate with Customer.io</title><link>https://docs.customer.io/get-started/integrate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/get-started/integrate/</guid><description>How it works While you can add people manually or upload CSVs, you&amp;rsquo;ll get the most out of Customer.io when you integrate with us, adding people and tracking the events they perform programmatically.
You can integrate different data sources with Customer.io—your website, mobile apps, databases, and so on.
flowchart LR d{Where does your
data come from?} d-->|Website|a d--->|Mobile App|f(Integrate with a mobile SDK) d--->|Database or Data Warehouse|g(Reverse ETL Integration) a{Will you send</description></item><item><title>3.4x -> 4.x</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/whats-new/4.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/whats-new/4.x-upgrade/</guid><description>What changed? This update provides native support for our new integrations framework. While this represents a significant change &amp;ldquo;under the hood,&amp;rdquo; we&amp;rsquo;ve tried to make it as seamless as possible for you; much of your implementation remains the same.
This move also adds two additional features:
Support for anonymous tracking: you can send events and other activity for anonymous users, and we&amp;rsquo;ll reconcile that activity with a person when you identify them.</description></item><item><title>3.4x -> 4.x</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/4.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/4.x-upgrade/</guid><description>What changed? This update provides native support for our new integrations framework. While this represents a significant change &amp;ldquo;under the hood,&amp;rdquo; we&amp;rsquo;ve tried to make it as seamless as possible for you; much of your implementation remains the same.
This move also adds two additional features:
Support for anonymous tracking: you can send events and other activity for anonymous users, and we&amp;rsquo;ll reconcile that activity with a person when you identify them.</description></item><item><title>3.4x -> 4.x</title><link>https://docs.customer.io/integrations/sdk/react-native/whats-new/4.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/whats-new/4.x-upgrade/</guid><description>What changed? This update provides native support for our new integrations framework. While this represents a significant change &amp;ldquo;under the hood,&amp;rdquo; we&amp;rsquo;ve tried to make it as seamless as possible for you; much of your implementation remains the same.
This move also adds two additional features:
Support for anonymous tracking: you can send events and other activity for anonymous users, and we&amp;rsquo;ll reconcile that activity with a person when you identify them.</description></item><item><title>3.x -> 3.13.0</title><link>https://docs.customer.io/integrations/sdk/ios/whats-new/3.13.0-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/whats-new/3.13.0-upgrade/</guid><description>What changed? The changes are mainly to align our SDK APIs across different platforms. No functional changes to be expected.
Upgrade process Attributes profileAttributes property is deprecated Getter has no replacement, the mobile SDK doesn&amp;rsquo;t expose the user&amp;rsquo;s profile attributes Setter is replaced with setProfileAttributes(attributes: [String: Any]) deviceAttributes property is deprecated Getter has no replacement, the mobile SDK doesn&amp;rsquo;t expose the user&amp;rsquo;s device attributes Setter is replaced with setDeviceAttributes(attributes: [String: Any]) Tracking Identifying a user</description></item><item><title>3.x -> 4.x</title><link>https://docs.customer.io/integrations/sdk/android/whats-new/4.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/whats-new/4.x-upgrade/</guid><description>What changed? This update provides native support for our new integrations framework. While this represents a significant change &amp;ldquo;under the hood,&amp;rdquo; we&amp;rsquo;ve tried to make it as seamless as possible for you; much of your implementation remains the same.
This move also adds two additional features:
Support for anonymous tracking: you can send events and other activity for anonymous users, and we&amp;rsquo;ll reconcile that activity with a person when you identify them.</description></item><item><title>4. Add people</title><link>https://docs.customer.io/get-started/add-people/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/get-started/add-people/</guid><description>How it works Customer.io Journeys revolve around your audience of people. And the data you store in your workspace typically represents people and the things they do. To really take advantage of Journeys, you&amp;rsquo;ll add people and their events to Customer.io.
Because we represent people with data, a &amp;ldquo;person&amp;rdquo; consists of a few things—all of which you can use to group people into segmentsA segment is a group of people in your workspace.</description></item><item><title>5. Send events and make segments</title><link>https://docs.customer.io/get-started/segments-and-people-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/get-started/segments-and-people-data/</guid><description>How it works People have data associated with them—the attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc. Use attributes to target people and personalize messages. you know about them and the eventsSomething that a person in your workspace did. Events can trigger campaigns, add people to segments, etc, and you can use properties from events to personalize messages.</description></item><item><title>6. Start sending campaigns and workflows</title><link>https://docs.customer.io/get-started/send-messages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/get-started/send-messages/</guid><description>&amp;nbsp;Want to send your first message right away?
Check out our quick start guide to send your first message and jump right in. How it works A message is what you want to send. But before you send a message, you have to determine who to send your message to and when to send it. You answer these questions when you set up a campaign, broadcast, newsletter, or transactional message.</description></item><item><title>Ad Audiences</title><link>https://docs.customer.io/journeys/ad-audiences-sync/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/ad-audiences-sync/</guid><description>What are Ad Audiences? In Ad Networks, such as Google, Facebook, and Instagram Ads, you can target your advertising in several ways. One way is to import a list of known users (“known” meaning you have some personally identifiable information on them - such as an email address) and use that list for targeting. Now, you can programmatically send your Customer.io segments into Ad Networks as audiences. This eliminates the historically manual process of importing custom lists - as well as ensure parity in the people you reach in Customer.</description></item><item><title>Advanced Integrations</title><link>https://docs.customer.io/integrations/data-out/data-warehouses/data-warehouses-cdp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/data-warehouses/data-warehouses-cdp/</guid><description>&amp;nbsp;Want information from your workspace, including campaign journeys?
Try our standard Data Warehouse integration to get data from your workspace, including campaign journeys. How it works This integration forwards incoming data from data sources to your storage bucket independently of your workspace. This means that you can send data to your storage bucket even if you don&amp;rsquo;t store that data in Customer.io. It also means that this integration does not have access to campaign, broadcast, or journey information from your workspace.</description></item><item><title>Archiving Old Layouts</title><link>https://docs.customer.io/journeys/archiving-layouts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/archiving-layouts/</guid><description>We don&amp;rsquo;t let you delete Layouts that you&amp;rsquo;re using in active campaigns or newsletters. But what if you don&amp;rsquo;t want to use that Layout anymore going forward? Simple: archive it!
How to archive Archiving a Layout is simple. When you hover over that Layout in the Layouts menu, you&amp;rsquo;ll see a button to archive.
The option will also be available on the individual Layout&amp;rsquo;s page.
&amp;hellip;and how to unarchive If you&amp;rsquo;d like to use the Layout in emails once more, head over to the &amp;lsquo;Archived&amp;rsquo; tag, find the Layout you&amp;rsquo;d like to use again, and Unarchive it either from the Layouts listing, or the individual page:</description></item><item><title>Awareness: announce events</title><link>https://docs.customer.io/journeys/awareness-announce-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/awareness-announce-events/</guid><description>Business-to-business (B2B) companies often need to track and drive growth across both individual users of their product and non-people entities like the company they work for or webinars they want to attend. In Customer.io, objectsAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course. help you do this.
For this recipe, imagine you work at a design platform, Sketcher.io, which offers graphic design and product design tools.</description></item><item><title>Campaign and Broadcast Metrics</title><link>https://docs.customer.io/journeys/campaign-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/campaign-metrics/</guid><description>This page focuses on your Campaign Metrics, which provides a complete overview of the journeyTypically, a person&amp;rsquo;s path through your campaign. If the campaign is triggered by a webhook, then a journey captures the webhook&amp;rsquo;s path, not a person&amp;rsquo;s. and messageThe instance of a message sent to a person. When you set up a message, you determine an audience for your message. Each individual &amp;ldquo;send&amp;rdquo;—the version of a message sent to a single member of your audience—is a delivery.</description></item><item><title>CSS variables</title><link>https://docs.customer.io/journeys/transformer-css-variables/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transformer-css-variables/</guid><description>CSS variables (also known as CSS custom properties) help you define reusable styles and reduce duplication across your stylesheets. However, most email clients don&amp;rsquo;t support them. The CSS Variables transformer solves this by inserting the values of the variables.
Statically insert :root CSS variables Enable this transformer to convert your CSS variables into styles that are compatible with more email clients.
&amp;nbsp;Define CSS variables on the :root element in a &amp;lt;style&amp;gt; tag</description></item><item><title>Domain warming</title><link>https://docs.customer.io/journeys/domain-warming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/domain-warming/</guid><description>&amp;nbsp;Automate your warm-up with Daily ramp for newsletters!
If you use newsletters to warm up your sending domain, add a rate limit and set a daily ramp period to get your system up and running. This eliminates the need to create multiple newsletters or messages for your warm-up schedule! Overview Think of warming up your domain like introducing yourself to email providers (like Gmail, Yahoo, etc.) and saying, &amp;ldquo;Hi, I&amp;rsquo;m trustworthy and send relevant, valuable emails.</description></item><item><title>Edit Account Information</title><link>https://docs.customer.io/accounts-and-workspaces/editing-account-information/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/editing-account-information/</guid><description>&amp;nbsp;To edit this information, you must be an Account Admin or Member with the account-level permission, &amp;ldquo;Access billing &amp;amp; account info.&amp;rdquo;
All of these items can be edited in your Account Information.
Uploading a logo In your Account Settings, click Edit Account Information. Under Basic information, you can add, replace, or delete a logo:
Please note that the file must be more than 200x200 pixels. The logo image will be automatically cropped to a square.</description></item><item><title>Facebook Lead Ads</title><link>https://docs.customer.io/integrations/data-in/connections/forms/facebook-lead-ads/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/facebook-lead-ads/</guid><description>Overview To set up a Facebook lead ads integration, you connect a page in your Facebook business account to Customer.io, activate the forms you want to capture leads from, and map fields from your forms to attributes.
When a person fills out your Facebook lead ad, Customer.io receives a form_submit event containing the Facebook lead form ID, the form name, and values representing the form submission.
This form_submit event adds a person to, or updates a person in, your workspace.</description></item><item><title>Filtering and mapping actions</title><link>https://docs.customer.io/integrations/data-out/action-mapping/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/action-mapping/</guid><description>How it works Each data-out integration has a list of available actions. An action is how we map incoming data to your outgoing integration. In most cases, the defaults are all you&amp;rsquo;ll ever need.
But you might want to add additional action filters or change the values we map to various events to change when we send data out or to fine-tune the data that we send with each action.</description></item><item><title>Fix typos in attributes</title><link>https://docs.customer.io/journeys/how-to-use-attribute-updates-to-fix-typos-in-your-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/how-to-use-attribute-updates-to-fix-typos-in-your-data/</guid><description>In this example, let&amp;rsquo;s say you have an attribute called frist_name that should be first_name instead.
1. Create a segment to capture the misspelled attribute Create a new segment that captures people with the misspelled attribute. In this case, we&amp;rsquo;re looking for people with a frist_name attribute.
2. Create a campaign using your segment Use that segment as the trigger condition in a new campaign. If misspelled data is still coming into your workspace, make sure that your campaign is re-enterable, so that you fix the typo whenever it reoccurs.</description></item><item><title>Group</title><link>https://docs.customer.io/integrations/data-in/source-spec/group-spec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/source-spec/group-spec/</guid><description>&amp;nbsp;See our API documentation for code samples
This page can help you better understand when and how to use this API method. But, if you already know how it works and are ready to get started, you can go straight to our API documentation and start writing code. How it works The group method is how you&amp;rsquo;ll associate a person with a group, like the company they work for or the school they attend.</description></item><item><title>Import objects or relationships via CSV</title><link>https://docs.customer.io/journeys/import-objects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/import-objects/</guid><description>How it works You can upload CSVs or Google Sheets to add or update objects and relationships outside your normal integration path.
When you upload a CSV of objects, each row in your CSV represents an object, and each column represents an object attribute. When you upload a CSV of relationships, each row is a relationship between an object and person, and each column (besides object_type_id, object_id, and the identifier of the person) is an attribute on the relationship.</description></item><item><title>In-app message suggestions</title><link>https://docs.customer.io/ai/in-app-suggestions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/ai/in-app-suggestions/</guid><description>&amp;nbsp;Not seeing this AI feature?
Make sure &amp;ldquo;Customer.io AI&amp;rdquo; is enabled in Privacy, Data, &amp;amp; AI settings. Reach out to an Account Admin if you can&amp;rsquo;t edit the toggle. How it works When you drag an in-app message into your campaign and click it, you&amp;rsquo;ll see a section that says Add Content. Just below that, you&amp;rsquo;ll see Suggested with AI. Here we&amp;rsquo;ll provide some starter messages based on your campaign and message objectives.</description></item><item><title>In-app survey analysis</title><link>https://docs.customer.io/ai/in-app-survey-analysis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/ai/in-app-survey-analysis/</guid><description>&amp;nbsp;Not seeing this AI feature?
Make sure &amp;ldquo;Customer.io AI&amp;rdquo; is enabled in Privacy, Data, &amp;amp; AI settings. Reach out to an Account Admin if you can&amp;rsquo;t edit the toggle. How it works When you create an in-app survey, you&amp;rsquo;ll add buttons with Tracked Name parameters. When someone interacts with the button, you&amp;rsquo;ll see the results in Tracked Responses on the Metrics tab of your campaign or API-triggered broadcast.
The Analyze Survey feature observes the responses to your survey (or any set of in-app messages with multiple buttons) and provides you with insights based on responses to your messages.</description></item><item><title>Inbox message metrics</title><link>https://docs.customer.io/journeys/inbox-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/inbox-metrics/</guid><description>Inbox messages follow a similar delivery patterns as regular in-app messages. This means that messages are sent but not displayed until the recipient returns to your website or app.
The major difference is that inbox messages aren&amp;rsquo;t &amp;ldquo;delivered&amp;rdquo; in the traditional sense. Rather, you&amp;rsquo;ll fetch and display messages to your audience when they open your notification inbox. When you mark a message as opened, we&amp;rsquo;ll report that it&amp;rsquo;s delivered as well.</description></item><item><title>Inline messages</title><link>https://docs.customer.io/journeys/inline-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/inline-in-app/</guid><description>How it works Unlike traditional in-app messages, which appear on top of your app or website, inline in-app messages act like a part of the content on your page. They let you dynamically populate parts of your app and talk to your customers without interrupting their experience.
To support inline messages, you need to add empty elements to your website or views to your app to contain your inline messages. Then, when you send an inline message, you&amp;rsquo;ll specify the Position ID of the for your inline message—the empty element or view where you want to display your message.</description></item><item><title>Introduction to Creating Emails</title><link>https://docs.customer.io/journeys/2-email-basics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/2-email-basics/</guid><description>&amp;nbsp;Check out Design Studio!
Design Studio is our newest, most flexible email editor. Use components to create a block-based email from scratch, and set global styles to create a consistent brand across your messages made in Design Studio. No longer do you have to decide between a visual or code-based editor; you can use both! Writing your message You can use one of four editors to create your email copy: Design Studio, drag-and-drop, rich text, or code.</description></item><item><title>Legacy Rails Package</title><link>https://docs.customer.io/integrations/data-in/connections/servers/rails-customerio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/servers/rails-customerio/</guid><description>Add the customer.io gem to your Gemfile
gem &amp;#39;customerio&amp;#39;, :git =&amp;gt; &amp;#39;https://github.com/customerio/customerio-ruby&amp;#39; Run bundle install to install the gem then we&amp;rsquo;ll set up the configuration.
Configuration We&amp;rsquo;ll add your Customer.io Site ID and API Key. We can do this in an initializer to save time and make sure we don&amp;rsquo;t accidentally commit sensitive data into source control.
config/initializers/customerio.rb Rails.configuration.customerio = { :site_id =&amp;gt; ENV[&amp;#39;CIO_SITE_ID&amp;#39;], :api_key =&amp;gt; ENV[&amp;#39;CIO_API_KEY&amp;#39;] } $customerio = Customerio::Client.</description></item><item><title>Manage devices</title><link>https://docs.customer.io/journeys/managing-customer-mobile-devices/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/managing-customer-mobile-devices/</guid><description>You&amp;rsquo;ll find a person&amp;rsquo;s devices by going to the People page, selecting a person, and going to their Devices tab.
For each device, we show the device platform platform, token, and when the device was &amp;ldquo;last used&amp;rdquo;. Last used indicates the last time you identified a device—something you typically do when someone logs into your app, or opens your app and is already logged in!
You can hover over the truncated token to see the full string and copy it to your clipboard.</description></item><item><title>Managing identities</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/js-source-identities/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/js-source-identities/</guid><description>How it works Our JavaScript client manages the identities of your audience, first as an anonymousId. Then, when you identify them, you know them by their userId. Then we remove those values when a person logs out and you call cioanalytics.reset();.
We store user identity information in cookies and local storage. You can retrieve or override this information as necessary to support your integrations. This page provides information about the values we store, where we store them, and how to get or override them.</description></item><item><title>Migrate subscription preferences</title><link>https://docs.customer.io/journeys/migrate-subscription-prefs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/migrate-subscription-prefs/</guid><description>&amp;nbsp;These steps will not affect your audience&amp;rsquo;s global subscription status
This page is about migrating subscription preferences—the topics and channels a person wants (or does not want) to receive messages for. These steps will not affect your audience&amp;rsquo;s unsubscribed attribute—which indicates whether a person has opted out of messages. How it works If you used to manage subscription preferences outside our subscription center feature, or you set up new &amp;ldquo;opt-in&amp;rdquo; topics or channels, you&amp;rsquo;ll want to apply people&amp;rsquo;s current preferences to the cio_subscription_preferences attribute.</description></item><item><title>Multi-Split Branches</title><link>https://docs.customer.io/journeys/multi-split/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/multi-split/</guid><description>How it works A multi-split branch sends people down different paths based on one or more conditions:
Profile attributes Segment membership Events objectAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course. attributes relationshipThe connection between an object and a person in your workspace. For instance, if you have Account objects, people could have relationships to an Account if they&amp;rsquo;re admins.</description></item><item><title>Multi-step messages</title><link>https://docs.customer.io/journeys/multi-step/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/multi-step/</guid><description>How it works You can add multiple steps to your in-app message, where users progress through each step as they interact with your message—click a button; go to the next step within the in-app message. You might do this to walk new users through an onboarding flow, showcase new features in your app, immediately respond to surveys, and so on. Each step has its own settings including display, position, and content.</description></item><item><title>Page</title><link>https://docs.customer.io/integrations/data-in/source-spec/page-spec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/source-spec/page-spec/</guid><description>How it works The page method represents pageviews. It helps you record the pages that people visit on your website. By recording page events, you can better understand the parts of your website that people use. You might even follow up with people who&amp;rsquo;ve visited particular pages to see if they&amp;rsquo;re still interested in a product, online class, and so on.
Our JavaScript client automatically captures page events on load, but you&amp;rsquo;ll need to invoke page calls manually if you use our server-side libraries, you have a single page app, or you want to augment the call with special properties.</description></item><item><title>Page rules</title><link>https://docs.customer.io/integrations/sdk/android/in-app/target-in-app-messages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/in-app/target-in-app-messages/</guid><description>You can set page rules when you create in-app messages. These rules determine the pages that your audience must visit in your app to see each message. Before you can take advantage of page rules, you need to:
Track screens in your app. You can add autoTrackActivityScreens(true) to your CustomerIO configuration to automatically track screens or you can track screens manually. If you use Jetpack Compose you should turn off automatic screen tracking and track screens manually.</description></item><item><title>Page rules</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/in-app/target-in-app-messages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/in-app/target-in-app-messages/</guid><description>You can set page rules when you create in-app messages. These rules determine the pages that your audience must visit in your app to see each message. Before you can take advantage of page rules, you need to:
Track screens in your app. You can add $0.autoTrackScreenViews = true to your CustomerIO.config to automatically track screens or you can track screens manually. Provide page names to whomever sets up in-app messages in fly.</description></item><item><title>Page rules</title><link>https://docs.customer.io/integrations/sdk/ios/in-app/target-in-app-messages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/in-app/target-in-app-messages/</guid><description>You can set page rules when you create in-app messages. These rules determine the pages that your audience must visit in your app to see each message. Before you can take advantage of page rules, you need to:
Track screens in your app. You can add $0.autoTrackScreenViews = true to your CustomerIO.config to automatically track screens or you can track screens manually. Provide page names to whomever sets up in-app messages in fly.</description></item><item><title>Personalize messages with trigger data</title><link>https://docs.customer.io/journeys/previewing-broadcast-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/previewing-broadcast-data/</guid><description>How it works When you trigger a broadcast, you can provide additional data in your trigger that you can use to personalize your broadcast with liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person&amp;rsquo;s first name, you might use the variable {{customer.first_name}}.. This is very similar to the way you&amp;rsquo;d personalize event-triggered campaigns. But, in this case, you&amp;rsquo;ll reference your data using {{trigger.</description></item><item><title>Random Cohorts</title><link>https://docs.customer.io/journeys/random-cohort/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/random-cohort/</guid><description>How it works A Random Cohort action randomly distributes people across up to 20 different paths in your workflow. It provides a way to test different messages or actions in a campaign.
If you use custom objectsAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course. in your workspace, pay attention to the Cohort by setting. By default, we add people to random cohorts.</description></item><item><title>Reducing billing overages</title><link>https://docs.customer.io/accounts-and-workspaces/reduce-billing-overages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/reduce-billing-overages/</guid><description>You should develop a cadence to delete unnecessary people and objects from your account to reduce overages and keep your billing predictable. Regularly deleting unused or defunct profiles can help you control your costs. This is probably something you should do monthly or every few months, rather than once or twice a year!
1. Review your integrations Overall, we recommend you review your integrations and ensure that you only add people and objects that provide value to your company/organization.</description></item><item><title>Reusing content with snippets</title><link>https://docs.customer.io/journeys/snippets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/snippets/</guid><description>Creating Snippets You can create snippets through our API or in the Customer.io UI. To simplify things, let&amp;rsquo;s create your first snippet in the UI.
Go to Content &amp;gt; Snippets. Click Create New Snippet. Enter a Name and Value for the snippet. The liquid tag you&amp;rsquo;ll use to reference the snippet automatically updates as you enter name and value. &amp;nbsp;Avoid spaces in snippet names
While snippet names can contain spaces, we recommend using underscores or hyphens to separate words, so they&amp;rsquo;re easier to use in messages and less prone to errors.</description></item><item><title>Screen</title><link>https://docs.customer.io/integrations/data-in/source-spec/screen-spec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/source-spec/screen-spec/</guid><description>How it works The screen method represents screenviews in your mobile apps—like a page call, but specifically for apps. It helps you record the screens that people visit as they use your app. By recording screen events, you can better understand the parts of your app that people use. You might even follow up with people who&amp;rsquo;ve visited particular screens to see if they&amp;rsquo;re still interested in a product, need help with something, and so on.</description></item><item><title>Screen tracking</title><link>https://docs.customer.io/integrations/sdk/expo/tracking/screen-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/tracking/screen-events/</guid><description>Screen views are events that record the pages that your audience visits in your app. They have a type property set to screen, and a name representing the title of the screen or page that a person visited in your app.
Screen view events let you trigger campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria. or add people to segmentsA group of people who match a series of conditions.</description></item><item><title>Screen tracking</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/tracking/screen-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/tracking/screen-events/</guid><description>Screen views are events that record the pages that your audience visits in your app. They have a type property set to screen, and a title representing the title of the screen or page that a person visited in your app.
Screen view events let you trigger campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria. or add people to segmentsA group of people who match a series of conditions.</description></item><item><title>Screen tracking</title><link>https://docs.customer.io/integrations/sdk/flutter/tracking/screen-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/tracking/screen-events/</guid><description>Screen views are events that record the pages that your audience visits in your app. They have a type property set to screen, and a title representing the title of the screen or page that a person visited in your app.
Screen view events let you trigger campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria. or add people to segmentsA group of people who match a series of conditions.</description></item><item><title>Senders</title><link>https://docs.customer.io/journeys/sender-phone-numbers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/sender-phone-numbers/</guid><description>Syncing Phone Numbers (Senders) to Customer.io If you add or change any of your sender identities in your Twilio account, you&amp;rsquo;ll need to re-sync them in Customer.io before you&amp;rsquo;ll see your changes in Customer.io.
Go to &amp;gt; Workspace Settings &amp;gt; SMS and click Sync from Twilio.
Using a Manual Sender ID You&amp;rsquo;ll see Manual Sender IDs in your Twilio Settings. You can add an Alphanumeric Sender ID, a Message Service ID, or provide some Liquid that dynamically determines the Sender ID for each message here.</description></item><item><title>Sending behavior options</title><link>https://docs.customer.io/journeys/queue-draft/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/queue-draft/</guid><description>How it works By default, we set messages to &amp;ldquo;Queue Draft.&amp;rdquo; This means we generate drafts, but don&amp;rsquo;t automatically send them to your audience. This is meant to be temporary; you should update your messages to &amp;ldquo;Send Automatically&amp;rdquo; when you&amp;rsquo;re confident your messages are ready to go.
With “Queue Draft” you can see a campaign in action before you actually send messages to your audience. Queueing drafts allows your complex workflow to run - matching recipients, rendering content, and emulating the campaign’s behavior - without any content being sent.</description></item><item><title>Set up a transactional SMS</title><link>https://docs.customer.io/journeys/transactional-sms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transactional-sms/</guid><description>&amp;nbsp;New to transactional messaging?
Check out our getting started section to learn more about transactional concepts and how our transactional API works. Before you begin Before you can send transactional SMS messages, you need to:
Set up your Twilio account and enable SMS in your workspace. Get your app API key. This is the bearer token that you&amp;rsquo;ll use when you call the transactional API to trigger a message. We also recommend that you use different phone numbers for transactional and marketing SMS messages.</description></item><item><title>Surveys</title><link>https://docs.customer.io/journeys/in-app-surveys/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/in-app-surveys/</guid><description>How it works You can use our in-app feature to send a message with an arrangement of buttons to solicit feedback from your audience—for net promoter score (NPS), customer satisfaction (CSAT), and other kinds of microsurveys.
We track the buttons that people click or tap in your messages, so you can see how your audience feels about your products, features, and so on. You can even use responses to follow-up with people based on their feedback.</description></item><item><title>Sync customers from Stripe to Customer.io</title><link>https://docs.customer.io/journeys/stripe-data-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/stripe-data-campaign/</guid><description>Customer.io is great for tracking leads and sending people messages. Stripe is great for managing customer and purchase data. With this process, you&amp;rsquo;ll capture Stripe&amp;rsquo;s customer.created event in Customer.io to represent people who have become customers. From here you might do things like thank people for making their first purchase or offer them coupons!
&amp;nbsp;This process works for other Stripe events
This tutorial is based on customer events, but after you sync customer data between Stripe and Customer.</description></item><item><title>Test your emails</title><link>https://docs.customer.io/journeys/testing-emails/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/testing-emails/</guid><description>&amp;nbsp;Are you using Design Studio to create your email?
You can send tests from both the email editor and the connected automation. &amp;nbsp;Are you on a trial?
If you&amp;rsquo;re on a trial, you&amp;rsquo;re allowed a limited number of test emails per day. From any workflow (campaign, broadcast, or transactional message), you can send test messages to make sure your emails look right in your inbox.
Select the email block, and then click Edit Content.</description></item><item><title>The visual editor</title><link>https://docs.customer.io/journeys/new-in-app-editor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/new-in-app-editor/</guid><description>&amp;nbsp;We&amp;rsquo;re actively developing this feature!
This feature is new, and we&amp;rsquo;re continuing to improve on it. If you run into a problem or have feedback for us, please get in touch so that we can build the best possible feature for you! How it works Our in-app editor lets you drag-and-drop components like text, media, and buttons to build in-app-messages. You can style each component so that your message looks and feels like a part of your app or website.</description></item><item><title>Track</title><link>https://docs.customer.io/integrations/data-in/source-spec/track-spec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/source-spec/track-spec/</guid><description>How it works The track method helps you record events: the things your users do on your site, in your app, and so on.
Each track call records a single event. Each event has a name and properties. For example, if you send a track call when someone starts a video on your website, the name of the event might be Video Started, and the properties might include the title of the video, the length of the video, and so on.</description></item><item><title>Track and page events</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/legacy-js/events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/legacy-js/events/</guid><description>How it works You can send events representing the things people do, and the pages people visit, on your website. The events that you capture with our web SDK can trigger campaigns and supplament user information.
You can send events before you identify a person. We call these &amp;ldquo;anonymous&amp;rdquo; events. When you identify your web visitor, we&amp;rsquo;ll automatically associate anonymous events with the person you identify.
flowchart LR a[anonymous person</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/android/2.x/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/2.x/track-events/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't send events before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/android/3.x/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/3.x/track-events/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't send events before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/android/tracking/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/tracking/track-events/</guid><description>Track a custom event The track method helps you send events representing your audience&amp;rsquo;s activities to Customer.io. When you send events, you can include event properties—information about the person or the event that they performed.
In Customer.io, you can use events to trigger campaigns and broadcasts. Those campaigns might send someone a push notification or manipulate information associated with the person in your workspace.
Events include the following:
name: the name of the event.</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/expo/1.x/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/1.x/track-events/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't send events before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/expo/getting-started/#install" click B href "/integrations/sdk/expo/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/expo/identify" click track-events href "/integrations/sdk/expo/track-events/" click register-token href "</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/track-events/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't send events before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/flutter/getting-started/#install" click B href "/integrations/sdk/flutter/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/flutter/identify" click track-events href "/integrations/sdk/flutter/track-events/" click register-token href "</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/tracking/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/tracking/track-events/</guid><description>Track an event The track method helps you send events representing your audience&amp;rsquo;s activities to Customer.io. When you send events, you can include event properties—information about the person or the event that they performed.
In Customer.io, you can use events to trigger campaigns and broadcasts. Those campaigns might send someone a push notification or manipulate information associated with the person in your workspace.
Events include the following:
name (Required): The name of the event.</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/flutter/tracking/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/tracking/track-events/</guid><description>Track an event The track method helps you send events representing your audience&amp;rsquo;s activities to Customer.io. When you send events, you can include event properties—information about the person or the event that they performed.
In Customer.io, you can use events to trigger campaigns and broadcasts. Those campaigns might send someone a push notification or manipulate information associated with the person in your workspace.
Events include the following:
name (Required): The name of the event.</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/ios/1.x/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/1.x/track-events/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't send events before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/ios/2.x/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/2.x/track-events/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't send events before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/track-events/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't send events before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/react-native/getting-started/#install" click B href "/integrations/sdk/react-native/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/react-native/identify" click track-events href "/integrations/sdk/react-native/track-events/" click register-token href "</description></item><item><title>Track events</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/track-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/track-events/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't send events before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/react-native/getting-started/#install" click B href "/integrations/sdk/react-native/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/react-native/identify" click track-events href "/integrations/sdk/react-native/track-events/" click register-token href "</description></item><item><title>Track universal links and app links in email</title><link>https://docs.customer.io/journeys/universal-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/universal-links/</guid><description>&amp;nbsp;These instructions only apply to universal and app links in emails
You can use universal links and app links in other message channels, but the manual tracking steps we describe in this article are only viable in emails.
For in-app messages, our web and mobile SDKs automatically track links, but make sure your app is set up to resolve deep links. For push, use the Opened metric to track links, which is the push equivalent to Clicked.</description></item><item><title>Tracking</title><link>https://docs.customer.io/journeys/tracking-twilio-messages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/tracking-twilio-messages/</guid><description>SMS/MMS delivery logs When you send an SMS or MMS message, you can view the delivery logs for that message in the campaign&amp;rsquo;s sent messages page.
Here you can correct and retry failed messages. Message failures are sometimes related to problems with liquid in your message (missing attributes, etc).
In delivery logs, you&amp;rsquo;ll see:
The recipient The name of the message The status of the message (sent or failed) Date and time sent Conversions after receiving the message Create a segment based on SMS/MMS messages As with an email, you can create a segment for SMS&amp;rsquo;s that have been sent, converted, etc.</description></item><item><title>Transactional examples</title><link>https://docs.customer.io/journeys/transactional-api-examples/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transactional-api-examples/</guid><description>Send an email using a transactional message template To send a message using a transactional message template, you need the following:
transactional_message_id: This is found in the code examples when setting up a transactional message. It&amp;rsquo;s also the id listed in the URL of a transactional message. message_data: A list of data that you want to pass into your message using liquidA syntax that supports variables, letting you personalize messages for your audience.</description></item><item><title>Triggers, filters, and frequencies</title><link>https://docs.customer.io/journeys/campaign-triggers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/campaign-triggers/</guid><description>If you&amp;rsquo;re just getting started, we&amp;rsquo;ve created a quick video to help you understand what each campaign trigger does. To learn about object and relationship triggers, read on.
How it works A campaign trigger determines who enters your campaign and when. You can set up filters to narrow your trigger criteria. People need to meet your trigger and filter criteria to enter your campaign. You can also set your exit conditions to make people exit your campaign when they quit matching your trigger and filter criteria, ensuring that your campaign is relevant to your audience.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/getting-started/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/getting-started/troubleshooting/</guid><description>This page helps you check the various areas of your pipeline to find and solve problems.
General troubleshooting tips Check your Data &amp;amp; Integrations &amp;gt; Integrations page to determine if an integration has a problem. You can hover over each integration to see if we&amp;rsquo;ve noticed a problem. Check your incoming integration&amp;rsquo;s Data In tab: are you sending the right calls to Customer.io? Check your outgoing integration&amp;rsquo;s Data Out tab: are you sending data to its ultimate destination?</description></item><item><title>True/False Branches</title><link>https://docs.customer.io/journeys/true-false/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/true-false/</guid><description>How it works A true/false branch sends your audience down different paths based on conditions. Customers matching the conditions go down one path; customers who don&amp;rsquo;t match the conditions go down the other.
You can create a true/false branch based on:
profile attributes segment membership events messages (like if a certain email has ever been clicked) objectAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course.</description></item><item><title>Using Multiple SMTP servers</title><link>https://docs.customer.io/journeys/multiple-smtp-servers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/multiple-smtp-servers/</guid><description>Getting started First, you need to configure your primary custom SMTP server. By default, all your emails will send from your first SMTP server, but you can change this as you add new servers.
You can configure up to six servers.
Customizing campaign delivery To customize the delivery settings by campaign type, you need to add your additional servers in the same manner as you added your first custom SMTP server.</description></item><item><title>Wait Until...</title><link>https://docs.customer.io/journeys/wait-until/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/wait-until/</guid><description>How it works You can set three different types of waits. Each wait type adds a new path in your workflow. A person progresses down the first path they meet conditions for.
Conditions: Determine whether a person needs to achieve certain attributes, perform an event, join a segment, and so on before they can progress through the campaign. You can set multiple conditions. Event time (event-triggered campaigns only): Base your wait on a timestamp in your event data.</description></item><item><title>Web push with webhooks</title><link>https://docs.customer.io/journeys/web-push-webhooks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/web-push-webhooks/</guid><description>Webhooks provide a way to access public APIs and services outside of Customer.io. We treat webhooks like messages: when someone reaches a webhook in your campaign, we&amp;rsquo;ll execute the webhook, sending a request to an external API. In this case, we&amp;rsquo;ll show you how to use webhooks to send web push messages.
&amp;nbsp;Try our in-app message solution!
Check to see if our in-app messages suit your needs before moving forward with web push with webhooks.</description></item><item><title>Welcome Email Copy</title><link>https://docs.customer.io/journeys/welcome-email-copy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/welcome-email-copy/</guid><description>General product / service welcome This is a basic welcome message from a business, app, or website that is sent after people sign up for an account.
[greeting] Hi Bob!Welcome to Prioritizer! Thanks so much for joining us. You’re on your way to super-productivity and beyond!
[who we are; our mission/ what we help you do; how it works] Prioritizer is a task management app that helps you focus on the important things in life by only allowing you to add 3 items a day.</description></item><item><title>WhatsApp metrics and reporting</title><link>https://docs.customer.io/journeys/whatsapp-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/whatsapp-metrics/</guid><description>WhatsApp message metrics The following metrics apply to WhatsApp messages. Some metrics, like Opened, behave differently for WhatsApp than for email because they rely on WhatsApp-specific signals like read receipts.
Metric Description Drafted We generated the message but haven&amp;rsquo;t sent it yet. The message requires manual action if you use Queue Draft. Sent The message left Customer.io and was passed to the delivery provider. Delivered The delivery provider confirmed that the message reached the recipient.</description></item><item><title>Anonymous events</title><link>https://docs.customer.io/journeys/anonymous-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/anonymous-events/</guid><description>An anonymous event is an event associated with a person you don&amp;rsquo;t recognize. The event bears an anonymous_id—a value representing the unknown person, like a cookie. We store these events for up to 30 days.
The Anonymous event merge feature lets you associate these events with a person after you identify them. You can enable anonymous event merging in your workspace settings.
If you use the JavaScript snippet (client-side): we automatically log anonymous events and associate them with people you identify.</description></item><item><title>Export objects or relationships via CSV</title><link>https://docs.customer.io/journeys/objects-export-many/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/objects-export-many/</guid><description>Export a single object and its relationships You can export data for a single objectAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course. from an object&amp;rsquo;s detail page or the object list page.
Select an object type from the left hand navigation. Click the name of the object you want to export. Click Options in the top right then choose &amp;ldquo;Export Object data.</description></item><item><title>NPS Surveys</title><link>https://docs.customer.io/journeys/web-nps-survey/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/web-nps-survey/</guid><description>While we&amp;rsquo;ve provided instructions below, here&amp;rsquo;s a quick video explaining how to set up an NPS survey and conditional logic in your workflow to handle different responses.
How it works If you want to gauge how people feel about your product, you can send them an NPS survey in your website to measure their satisfaction.
Here, we&amp;rsquo;ll help you set up a web in-app message to survey your customers. In your campaign, we&amp;rsquo;ll help you group responses so you can follow-up with people depending on the rating they give you—detractors (0-6), passives (7-8), and promoters (9-10).</description></item><item><title>Promotions and offers</title><link>https://docs.customer.io/journeys/web-promotion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/web-promotion/</guid><description>Read on for instructions on how to build messages like this welcome offer.
How it works In this recipe, we&amp;rsquo;ll broadcastA single broadcast sent to a group of people, all from the Customer.io user interface. Newsletters provide a simple way to send a message without having to set up a campaign workflow or send a call to the API to trigger your broadcast. You can also A/B test a newsletter. an in-app message telling people that we&amp;rsquo;re running a promotion.</description></item><item><title>Send push notifications</title><link>https://docs.customer.io/journeys/send-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/send-push/</guid><description>Create a Push Notification This process covers a basic push notification. If you set an image or a deep link, your app should either use our SDKs or handle payloads in the format we send. If you want to send more than images and links—like badges, sounds, etc—you can send a message using a Custom Push Payload.
In your campaign, click and drag a Push Notification into your campaign from the sidebar.</description></item><item><title>Update Flutter SDK</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/update/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/update/</guid><description>Assuming that you have followed the install instructions, this section covers the steps to take to successfully update the Customer.io Flutter SDK to the latest version.
Inside of your pubspec.yaml, update the version of the Customer.io Flutter SDK (customer_io) to the latest version found here. If you followed the instructions for setting up push notifications on iOS and made modifications to your ios/Podfile, open your ios/Podfile file and make the following updates: # For every line of code that contains &amp;#39;pod CustomerIO.</description></item><item><title>Upgrade to Flutter 2.x</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/whats-new/2.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/whats-new/2.x-upgrade/</guid><description>What changed? This update provides native support for our new integrations framework. While this represents a significant change &amp;ldquo;under the hood,&amp;rdquo; we&amp;rsquo;ve tried to make it as seamless as possible for you; much of your implementation remains the same.
This move also adds two additional features:
You&amp;rsquo;ll use SDK methods from an instance: Support for anonymous tracking: you can send events and other activity for anonymous users, and we&amp;rsquo;ll reconcile that activity with a person when you identify them.</description></item><item><title>Upgrade to Flutter 2.x</title><link>https://docs.customer.io/integrations/sdk/flutter/whats-new/2.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/whats-new/2.x-upgrade/</guid><description>What changed? This update provides native support for our new integrations framework. While this represents a significant change &amp;ldquo;under the hood,&amp;rdquo; we&amp;rsquo;ve tried to make it as seamless as possible for you; much of your implementation remains the same.
This move also adds two additional features:
You&amp;rsquo;ll use SDK methods from an instance: Support for anonymous tracking: you can send events and other activity for anonymous users, and we&amp;rsquo;ll reconcile that activity with a person when you identify them.</description></item><item><title>Track links with your domain</title><link>https://docs.customer.io/journeys/link-tracking-custom-domain/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/link-tracking-custom-domain/</guid><description>Set up link tracking for your domain Customer.io provides link tracking by default, but you can also track links on your own subdomain. To use a custom subdomain for tracked links using HTTP in Customer.io, add a CNAME (Canonical Name) record to your DNS host that aliases our tracking subdomains. These are e.customeriomail.com or e-eu.customeriomail.com depending on your Customer.io account region.
To use a custom subdomain for tracking links using HTTPS, you&amp;rsquo;ll need to take additional steps outside of Customer.</description></item><item><title>Accessibility fixes</title><link>https://docs.customer.io/journeys/transformer-accessibility-fixes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transformer-accessibility-fixes/</guid><description>Within Transformers &amp;gt; Accessibility fixes, enable the feature to set further preferences.
You can customize how the Accessibility transformer behaves. For example, you can:
Choose whether to autodetect the message language or define it manually. Automatically add lang and role attributes. Remove meta tags that prevent mobile users from zooming. These updates can make your message more accessible and reduce the need for manual fixes.</description></item><item><title>Campaign for syncing Mixpanel cohorts</title><link>https://docs.customer.io/journeys/mixpanel-data-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/mixpanel-data-campaign/</guid><description>In Mixpanel, you can organize users into cohorts, which are akin to segments in Customer.io. Mixpanel cohorts compile users based on criteria like what events they&amp;rsquo;ve performed. You can send cohort data from Mixpanel to Customer.io through webhooks, and you can trigger campaigns to update people, index events, and more. Visit Mixpanel&amp;rsquo;s documentation on webhooks for more info.
Before you begin Mixpanel You must have a paid Mixpanel plan to create custom webhooks.</description></item><item><title>IP addresses: shared vs dedicated</title><link>https://docs.customer.io/journeys/ip-addresses/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/ip-addresses/</guid><description>Shared IP pool (default) By default, we add email domains to Customer.io&amp;rsquo;s shared IP address pool to send emails. We manage and monitor multiple IP pools and remove domains that perform poorly to maintain high deliverability.
Send from transactional IP pool We also maintain a separate, transactional IP address pool. This pool has even higher standards—stricter bounce and spam thresholds—than our default, shared IP pool. This ensures that your transactional messages achieve the highest deliverability.</description></item><item><title>Objects and relationships in campaigns</title><link>https://docs.customer.io/journeys/object-and-relationship-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/object-and-relationship-campaigns/</guid><description>Trigger campaigns based on objects or relationships You can trigger campaigns based on changes to objects or relationships. You can trigger a campaign when:
an object is updated (like an Account&amp;rsquo;s name was changed). a relationship between an object and person is added. a relationship is changed (like a person is no longer associated with an Account). You can also narrow in on the audience for these campaigns. For both object and relationship-triggered campaigns, you can choose to send to:</description></item><item><title>Promote upcoming event</title><link>https://docs.customer.io/journeys/in-app-event-promotion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/in-app-event-promotion/</guid><description>How it works This recipe expands on our recipe Create an email campaign to announce registration for events! It uses a feature of ours called objectsAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course., which are non-people entities you can relate to people. In this case, objects are events that people want to register for.
Below you&amp;rsquo;ll learn how to set up an in-app message to promote an upcoming event on your website.</description></item><item><title>Spamhaus blocklist listings</title><link>https://docs.customer.io/journeys/spamhaus-blocklist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/spamhaus-blocklist/</guid><description>Spamhaus maintains one of the most widely used blocklists on the internet. When your domain is listed on the Spamhaus Domain Block List (DBL), it can&amp;rsquo;t be verified or used for sending in Customer.io until it&amp;rsquo;s removed — and delivery to most major email providers is blocked in the meantime.
Listings can escalate quickly: a domain listing can lead to an IP listing, which can result in a broader network block.</description></item><item><title>WhatsApp templates</title><link>https://docs.customer.io/journeys/whatsapp-design-studio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/whatsapp-design-studio/</guid><description>How it works To manage WhatsApp templates in Design Studio, you must integrate directly with your Facebook Business Account.
Then you can create WhatsApp templates and submit them for approval from Design Studio, instead of having to leave your workspace to create them with Meta.
The process goes like this:
From Design Studio, create a WhatsApp message from scratch and add your content including any relevant liquid syntax.
Submit it for approval from Meta.</description></item><item><title>When to use filters</title><link>https://docs.customer.io/journeys/campaign-triggers-and-filters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/campaign-triggers-and-filters/</guid><description>How it works Both triggers and filters are sets of conditions that determine who enter your campaigns.
A trigger determines who&amp;rsquo;s eligible to enter a campaign and when. A filter is additional criteria that a person or triggering data must meet for people to enter or remain in the campaign. For example, you might want to send a message when someone views the pricing page (event trigger: page view) of your website, but only send that message to people who aren&amp;rsquo;t on a paid plan (filter: free plan).</description></item><item><title>Email suppression lists</title><link>https://docs.customer.io/journeys/esp-suppression/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/esp-suppression/</guid><description>Email service providers (ESP) keep suppression lists to ensure they don&amp;rsquo;t send messages from servers that rejected them before or from people who explicitly do not want messages from you.
A message experiences a hard bounce. This means that either the recipient email address does not exist or the recipient email server blocked delivery. A person lodges a spam complaint against a message. ESP suppression only prevents people from receiving emails.</description></item><item><title>Push notifications</title><link>https://docs.customer.io/integrations/sdk/android/push/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/push/push/</guid><description>Before you begin This page explains how to receive rich push notifications using our SDK. However, before you can send push notifications to your audience, you need to enable Customer.io to send push notifications through Firebase Cloud Messaging (FCM).
How it works Before a device can receive a push notification, you must:
Set up FCM. Set up push. Identify a person. When someone starts the app, they automatically generate a device token.</description></item><item><title>Resend past data</title><link>https://docs.customer.io/integrations/data-out/data-replay/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-out/data-replay/</guid><description>How it works Imagine that you&amp;rsquo;ve sent source data to an analytics platform for six months. Now you want to move to a new platform—it might have features you need or just aligns better with your business needs. Do you really have to start fresh in your new analytics platform? What happens to that six months of data?
That&amp;rsquo;s what our Resend past data feature does: it lets you send data that you previously sent into Customer.</description></item><item><title>3.x -> 3.9.0</title><link>https://docs.customer.io/integrations/sdk/ios/whats-new/3.9.0-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/whats-new/3.9.0-upgrade/</guid><description>Key Changes The primary change in version 3.9.0 is the introduction of the wrapper pattern for handling push notifications on iOS. This change:
Eliminates method swizzling: No more automatic method replacement Simplifies setup: Less boilerplate code required Improves reliability: More predictable behavior See the instructions below to update your app depending on whether you send push notifications with APN or FCM and whether you use UIKit or SwiftUI.
Update with APNs UIKit Update your AppDelegate.</description></item><item><title>Alias</title><link>https://docs.customer.io/integrations/data-in/source-spec/alias-spec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/source-spec/alias-spec/</guid><description>&amp;nbsp;See our API documentation for code samples
This page can help you better understand when and how to use this API method. But, if you already know how it works and are ready to get started, you can go straight to our API documentation and start writing code. How it works An alias call helps you merge two user profiles—a userId and a previousId. The userId inherits the traits and activity of the previousId, so you can track activity going forward against the canonical userId.</description></item><item><title>Birthday and Anniversary Campaigns</title><link>https://docs.customer.io/journeys/birthday-and-anniversary-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/birthday-and-anniversary-campaigns/</guid><description>Introduction Sending messages on birthdays, anniversaries, and other recurring dates is a great way of keeping customers engaged with your company throughout the year. Customer.io makes this simple. Let&amp;rsquo;s get started sending your customers a birthday discount, celebrating their time as a customer, or reminding them of something that reccurs on a long time scale.
This recipe documents a yearly anniversary campaign, but the same steps work for any type of date.</description></item><item><title>Choose the right email editor</title><link>https://docs.customer.io/journeys/email-editors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/email-editors/</guid><description>&amp;nbsp;Check out Design Studio!
Design Studio is our newest, most flexible email editor. Use components to create a block-based email from scratch, and set global styles to create a consistent brand across your messages made in Design Studio. No longer do you have to decide between a visual or code-based editor; you can use both! Choose your editor While editing a campaign, broadcast, or transactional message, you can create and edit your emails.</description></item><item><title>Common transactional API errors</title><link>https://docs.customer.io/journeys/transactional-api-common-api-errors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transactional-api-common-api-errors/</guid><description>Successful requests A successful transactional API request returns a 200 OK and looks like this:
status: 200 OK { &amp;#34;delivery_id&amp;#34;: &amp;#34;A1C2E3jdieDks7zXdyz8XCFn1888&amp;#34;, &amp;#34;queued_at&amp;#34;: 1604977406 } status: 405 Method Not Allowed Possible misspelling of the request URI. The URI is https://api.customer.io/v1/send/email or https://api.customer.io/v1/send/push.
status: 403 Forbidden You probably need to take some additional steps to ensure that you&amp;rsquo;re authorized to send transactional messages.
Error Message Resolution Account owner&amp;rsquo;s email address is not confirmed.</description></item><item><title>Conversion: activate people on your event waitlist</title><link>https://docs.customer.io/journeys/conversion-activate-waitlist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/conversion-activate-waitlist/</guid><description>Business-to-business (B2B) companies often need to track and drive growth across both individual users of their product and non-people entities like the company they work for or webinars they want to attend. In Customer.io, objectsAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course. help you do this.
For this recipe, imagine you work at a design platform, Sketcher.io, which offers graphic design and product design tools.</description></item><item><title>Cookies and identity management</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/js-source-cookies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/js-source-cookies/</guid><description>How it works The JavaScript library stores some information in cookies and local storage on the client to manage user identity. By default, we store up to five cookies on the client. You can recall this information when you need to reuse it and change whether we persist data to protect your audience&amp;rsquo;s personal information. Cookie Contains ajs_anonymous_id A user&amp;rsquo;s anonymous ID, set automatically when someone visits your site. This value is used to track anonymous activity and associate anonymous activity with an identified person.</description></item><item><title>Custom push payloads</title><link>https://docs.customer.io/journeys/push-custom-payloads/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/push-custom-payloads/</guid><description>Getting started with custom payloads Creating a custom payload for your push notification grants access to a greater range of push features, like images and deep links—provided that your app is set up to support those features.
To enter a custom payload, click Custom Payload when composing your push notification.
You can then write or paste your custom code into the editor. There are different tabs for Android and iOS so that you can send custom code for each platform separately but, if you are using Firebase Cloud Messaging, you can just use the Android tab to send custom code that will be used for both Android and iOS.</description></item><item><title>Deep Links</title><link>https://docs.customer.io/integrations/sdk/android/push/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/push/deep-links/</guid><description>Our SDK supports redirects for notification links registered in Android by default. You can customize this behavior using CustomerIOPushNotificationCallback.
To register a deep link, you must first add intent filters in your AndroidManifest.xml file.
&amp;lt;intent-filter android:label=&amp;#34;deep_linking_filter&amp;#34;&amp;gt; &amp;lt;action android:name=&amp;#34;android.intent.action.VIEW&amp;#34; /&amp;gt; &amp;lt;category android:name=&amp;#34;android.intent.category.DEFAULT&amp;#34; /&amp;gt; &amp;lt;category android:name=&amp;#34;android.intent.category.BROWSABLE&amp;#34; /&amp;gt; &amp;lt;!-- Accepts URIs that begin with &amp;#34;remote-habits://settings” --&amp;gt; &amp;lt;data android:host=&amp;#34;settings&amp;#34; android:scheme=&amp;#34;remote-habits&amp;#34; /&amp;gt; &amp;lt;/intent-filter&amp;gt; CustomerIOPushNotificationCallback—a URL handler feature provided by the SDK. When configuring your CustomerIO instance, you can set the callback to handle notification behavior.</description></item><item><title>Deep Links</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/push/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/push/deep-links/</guid><description>Deep links let you open a specific page in your app instead of opening the device&amp;rsquo;s web browser. Want to open a screen in your app or perform an action when a push notification or in-app button is clicked? Deep links work great for this!
Setup deep linking in your app. There are two ways to do this; you can do both if you want.
Universal Links: universal links let you open your mobile app instead of a web browser when someone interacts with a URL on your website.</description></item><item><title>Deep Links</title><link>https://docs.customer.io/integrations/sdk/ios/push/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/push/deep-links/</guid><description>Deep links let you open a specific page in your app instead of opening the device&amp;rsquo;s web browser. Want to open a screen in your app or perform an action when a push notification or in-app button is clicked? Deep links work great for this!
Setup deep linking in your app. There are two ways to do this; you can do both if you want.
Universal Links: universal links let you open your mobile app instead of a web browser when someone interacts with a URL on your website.</description></item><item><title>Deleting Data</title><link>https://docs.customer.io/integrations/data-in/connections/hubspot/delete/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/hubspot/delete/</guid><description>&amp;nbsp;This information is for services outside of Customer.io
Customer.io automatically handles deleted HubSpot data. You only need to pay attention to the information on this page if you send your HubSpot data through Customer.io to other services. How it works We use Semantic Events, events with special meanings, to handle delete operations when you sync data from HubSpot to Customer.io.
For example, if you delete a contact in HubSpot, we represent the deletion in Customer.</description></item><item><title>Deleting Data</title><link>https://docs.customer.io/integrations/data-in/connections/salesforce/delete/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/salesforce/delete/</guid><description>&amp;nbsp;Customer.io Journeys automatically handles deleted Salesforce data
The information below is important if you want to handle deletions in services outside of Customer.io. But, if you don&amp;rsquo;t send your Salesforce data to anywhere other than Customer.io, then you don&amp;rsquo;t need to do anything to handle deleted data; we handle it for you. How it works You can delete data in Salesforce, but the API that Salesforce uses to ingest data from Salesforce doesn&amp;rsquo;t have Delete operations.</description></item><item><title>Email Attachments</title><link>https://docs.customer.io/journeys/email-attachments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/email-attachments/</guid><description>&amp;nbsp;Try sending a transactional message
Rather than trying to send links, or add attachments to events, you can send attachments as a part of our transactional message service. Why you shouldn&amp;rsquo;t send attachments Sending attachments can create problems for your deliverability. Here&amp;rsquo;s a non-exhaustive list of potential problems stemming from attachments:
Email attachments are often used to hide viruses and malware, so they are more likely to end up in spam folders or flagged as potentially malicious.</description></item><item><title>Exit Blocks</title><link>https://docs.customer.io/journeys/exit-blocks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/exit-blocks/</guid><description>How it works Normally, people leave a campaign when they reach the end. But if you set up branches and flow controls, you may want to allow people to exit the campaign at different points along different paths. That&amp;rsquo;s what exit blocks are for!
You can place exit blocks along different branches in your workflow, letting people gracefully exit the campaign along different paths in your workflow.
For example, imagine that you have a multi-split branch configured to send messages to anyone whose favorite color is red or yellow, but you want to make sure that everyone else does not receive messages from this branch and leaves the campaign.</description></item><item><title>Format API-Triggered Broadcasts</title><link>https://docs.customer.io/journeys/api-triggered-data-format/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/api-triggered-data-format/</guid><description>Providing custom data You&amp;rsquo;ll send custom data using our API or our libraries. You can also see sample data in our Composer preview.
Here&amp;rsquo;s a basic example of what some custom data might look like in your request.
{ &amp;#34;data&amp;#34;: { &amp;#34;headline&amp;#34;: &amp;#34;Roadrunner spotted in Albuquerque!&amp;#34;, &amp;#34;date&amp;#34;: &amp;#34;January 24, 2018&amp;#34;, &amp;#34;text&amp;#34;: &amp;#34;We&amp;#39;ve received reports of a roadrunner in your immediate area! Head to your dashboard to view more information!&amp;#34; } } Overriding Recipients You can set the audience for an API-triggered broadcast in the UI—which is useful when your audience always meets the same conditions.</description></item><item><title>Frequently Asked Questions</title><link>https://docs.customer.io/journeys/transactional-faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transactional-faq/</guid><description>&amp;nbsp;Is your question not answered here?
If you have any questions or feedback not covered on this page or in our transactional API documentation, let us know at product@customer.io! Does the transactional API cost extra? No! You can start sending transactional messages immediately alongside your other messages.
When should I use the &amp;lsquo;disable message retention&amp;rsquo; setting? You probably want to disable message retention to concealing sensitive content, like password reset tokens.</description></item><item><title>Frequently Asked Questions</title><link>https://docs.customer.io/journeys/faq-twilio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/faq-twilio/</guid><description>Does Customer.io manage my Twilio account? No. While Customer.io partners with Twilio to send SMS messages, we can&amp;rsquo;t set up or manage your Twilio account for you.
Your Twilio account includes your sender numbers and other things that we can&amp;rsquo;t manage on your behalf—so you can make changes to your senders, keywords, and so on without having to wait on us to make changes to your account.
What countries can I send SMS messages to?</description></item><item><title>Frequently Asked Questions</title><link>https://docs.customer.io/journeys/faq-whatsapp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/faq-whatsapp/</guid><description>How much does it cost to send WhatsApp messages? Customer.io doesn&amp;rsquo;t charge you for WhatsApp messages. However, both Meta and Twilio (if you use Twilio) charge for WhatsApp usage. See Billing for WhatsApp messages for more information.
Meta charges per message using a tiered pricing model based on the template type (marketing, utility, authentication, or service), recipient country, and message volume. See Meta&amp;rsquo;s WhatsApp pricing page for details. Twilio As of February 2026, Twilio charges $0.</description></item><item><title>Gmail Promotions</title><link>https://docs.customer.io/journeys/gmail-promotions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/gmail-promotions/</guid><description>Introduction Google has added annotation support for emails that appear in the Promotions tab of the Gmail app. This means that your promotional emails have more opportunities to make an impression beyond the subject and preheader. You can highlight incentives, share key information from your message, and stand out in the crowded inbox.
1. Choose your Annotations Supported annotations include images, your logo, promo codes, expiration dates on deals, and more.</description></item><item><title>Goals &amp; conversion criteria</title><link>https://docs.customer.io/journeys/campaign-conversions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/campaign-conversions/</guid><description>How goals work A goal is what you want your audience to accomplish during your campaign, like purchase a product, sign up, or subscribe. When you set up a goal, you define conversion criteria, which are the rules that determine when we mark a message or journey as &amp;ldquo;converted.&amp;rdquo;
The conversion criteria can be one of (and only one of) the following things:
an eventSomething that a person in your workspace did.</description></item><item><title>Google Postmaster Tools</title><link>https://docs.customer.io/journeys/google-postmaster-tools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/google-postmaster-tools/</guid><description>If your recipient marks a message as spam and the email service provider sends that information back to Customer.io, we will automatically suppress that user profile so you can&amp;rsquo;t send to someone who clearly doesn’t want your messages in the future.
However, Google does not send information about spam complaints back to Customer.io. Remember that when viewing your Customer.io dashboard, the spam information displayed does not include Gmail users!
Google Postmaster Tools is the only place to view information about Gmail user-reported spam complaints.</description></item><item><title>Home dashboard</title><link>https://docs.customer.io/journeys/dashboard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/dashboard/</guid><description>&amp;nbsp;Use the Agent to understand your workspace data and assist in managing your workflows.
Click anytime to chat with your Agent, get help, and get started. Learn more in AI Features. Continue where you left off Under Ready to keep going, you&amp;rsquo;ll see a carousel of pages you last edited. If you haven&amp;rsquo;t made any changes in the last 90 days, you&amp;rsquo;ll see a list of actions you can take to get started.</description></item><item><title>HTML and CSS Email vs. Web</title><link>https://docs.customer.io/journeys/1-html-and-css/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/1-html-and-css/</guid><description>There are a couple of reasons for this:
HTML and CSS work differently in emails and the web. Emails and how they&amp;rsquo;re laid out (Layouts) both work a little differently in Customer.io In this doc, we&amp;rsquo;ll try to explain reason #1, show how those differences manifest in emails, and hopefully give some good advice for how to move forward. (Here&amp;rsquo;s more info on reason #2.)
Why does this happen? Coding for the web is code for browsers.</description></item><item><title>HubSpot forms</title><link>https://docs.customer.io/integrations/data-in/connections/hubspot/forms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/hubspot/forms/</guid><description>How it works You&amp;rsquo;ll set up a workflow in HubSpot that sends a webhook to Customer.io when someone submits your form. Then, in Customer.io, you can:
Convert that webhook to an event that triggers downstream campaigns Store attributes on your audience&amp;rsquo;s profiles in Customer.io. These attributes can add people to segments, trigger campaigns, or personalize messages. flowchart LR subgraph HubSpot direction TB a(Person
submits form)-->|Hubspot
workflow|b(Generate
webhook) end b-->c subgraph Customer.</description></item><item><title>In-app component reference</title><link>https://docs.customer.io/journeys/in-app-components/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/in-app-components/</guid><description>How it works In-app messages use an HTML-like syntax with components similar to HTML elements beginning with x-.
In HTML, you typically pass CSS styles to components in a style attribute. You can still do that with our in-app code editor, but each component also exposes a number of top-level attributes that makes it easy to set things like fonts, colors, and so on. These attributes correspond to common CSS properties, like font-size and color, so all the styles should make sense to you if you&amp;rsquo;re familiar with CSS.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/in-app/in-app-event-listeners/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/in-app/in-app-event-listeners/</guid><description>Handle responses to messages (event listeners) You can set up event listeners to handle your audience&amp;rsquo;s response to your messages. For example, you might run different code in your app when your audience taps a button in your message or when they dismiss the message without tapping a button.
You can listen for four different events:
messageShown: a message is &amp;ldquo;sent&amp;rdquo; and appears to a user messageDismissed: the user closes the message (by tapping an element that uses the close action) errorWithMessage: the message itself produces an error—this probably prevents the message from appearing to the user messageActionTaken: the user performs an action in the message.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/ios/in-app/in-app-event-listeners/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/in-app/in-app-event-listeners/</guid><description>Handle responses to messages (event listeners) You can set up event listeners to handle your audience&amp;rsquo;s response to your messages. For example, you might run different code in your app when your audience taps a button in your message or when they dismiss the message without tapping a button.
You can listen for four different events:
messageShown: a message is &amp;ldquo;sent&amp;rdquo; and appears to a user messageDismissed: the user closes the message (by tapping an element that uses the close action) errorWithMessage: the message itself produces an error—this probably prevents the message from appearing to the user messageActionTaken: the user performs an action in the message.</description></item><item><title>In-app metrics</title><link>https://docs.customer.io/journeys/in-app-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/in-app-metrics/</guid><description>How it works When you send a message to a person, Customer.io reports the status of your message until it&amp;rsquo;s Sent. After that, we rely on the device to tell us when a message is Opened.
We aggregate these statuses as metrics, helping you determine how your message performed across your audience. However, we begin displaying metrics before your message expires. While metrics can always help you understand how your audience responds to your message, you should probably consider metrics incomplete until your message expires and your in-app message stops being sent.</description></item><item><title>Milestones and achievements</title><link>https://docs.customer.io/journeys/web-achievements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/web-achievements/</guid><description>Consider what milestone or achievement you&amp;rsquo;d like to celebrate. In this recipe, we&amp;rsquo;ll create a campaign to notify customers of their one year anniversary using your product.
How it works In this recipe, we’ll trigger a campaign based on the date a person started using your product. When they reach their one year anniversary, we&amp;rsquo;ll send them an in-app message to congratulate them and offer a discount code for their loyalty.</description></item><item><title>Mobile Lifecycle events</title><link>https://docs.customer.io/integrations/sdk/expo/tracking/lifecycle-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/tracking/lifecycle-events/</guid><description>By default, we track the following lifecycle events:
Application Installed: A user installed your app. Application Updated: A user updated your app. Application Opened: A user opened your app. Application Foregrounded: A user switched back to your app. Application Backgrounded: A user backgrounded your app or switched to another app. You might also want to send your own lifecycle events, like Application Crashed or Application Updated. You can do this using the track method.</description></item><item><title>Push metrics</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/push/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/push/push-metrics/</guid><description>Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.
If you already configured rich push notifications, the SDK will automatically track opened and delivered events for push notifications originating from Customer.io. See section Automatic push handling below to learn more about this great feature and how to best take advantage of it.</description></item><item><title>Push metrics</title><link>https://docs.customer.io/integrations/sdk/ios/push/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/push/push-metrics/</guid><description>Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.
&amp;nbsp;Improve delivery metric reliability
Configure App Groups to make sure delivery metrics aren&amp;rsquo;t lost when iOS terminates the Notification Service Extension before the tracking request completes. With App Groups, the SDK automatically recovers any undelivered metrics on the next app launch.</description></item><item><title>Push notifications</title><link>https://docs.customer.io/integrations/sdk/android/2.x/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/2.x/push/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive push notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Push notifications</title><link>https://docs.customer.io/integrations/sdk/android/3.x/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/3.x/push/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive push notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Push notifications</title><link>https://docs.customer.io/integrations/sdk/ios/1.x/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/1.x/push/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive push notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Push notifications</title><link>https://docs.customer.io/integrations/sdk/ios/2.x/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/2.x/push/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive push notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Randomized delay</title><link>https://docs.customer.io/journeys/random-delay/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/random-delay/</guid><description>You can hold people in randomized time delays in campaigns. When journeys reach a Random Delay block, we hold them for a random amount of time between the minimum and maximum time you set using a flat distribution model. This can help you avoid overloading rate-limited API endpoints with webhook requests.
Add a condition Like with other workflow blocks, you can add one or more conditions so only certain people wait in a random delay.</description></item><item><title>Reformat timestamp attributes</title><link>https://docs.customer.io/journeys/how-to-use-attribute-updates-to-reformat-timestamps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/how-to-use-attribute-updates-to-reformat-timestamps/</guid><description>1. Create a segment with the attribute you want to reformat When you create your segment, you can use the is not a timestamp condition. This makes sure that you only update attributes that aren&amp;rsquo;t formatted correctly.
2. Create a campaign using your new segment When you create your campaign make the campaign re-enterable, so you can reformat the timestamp whenever it appears. This campaign won&amp;rsquo;t send any messages, so you&amp;rsquo;ll want it to &amp;ldquo;send&amp;rdquo; to unsubscribed people as well.</description></item><item><title>Resolve duplicate people</title><link>https://docs.customer.io/journeys/merge-people/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/merge-people/</guid><description>How merging people works You can merge people manually or automatically. When you merge two people, you pick a primary person and a secondary person. The primary person remains after the merge and the secondary is deleted. This process is permanent: you cannot recover the secondary person. Depending on the data type, the primary person may retain its data or inherit the data from the secondary person.
&amp;nbsp;The primary person might enter new segments and campaigns</description></item><item><title>Send direct mail with Lob</title><link>https://docs.customer.io/journeys/lob-webhook-integration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/lob-webhook-integration/</guid><description>How it works Lob specializes in intelligent direct mail, so you can send personalized postcards, letters, and more to your customers. Using webhooks, you can send personalization data and trigger messages from your campaigns.
This lets you send personalized physical mail to customers in response to the things they do on your website or in your app—like if a customer requests more information, or if you want to follow up with a physical coupon to retain customers.</description></item><item><title>Set preferences outside of the subscription center</title><link>https://docs.customer.io/journeys/set-preferences-outside-center/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/set-preferences-outside-center/</guid><description>How it works Customer.io&amp;rsquo;s Subscription Center feature lets your audience set their subscription preferences when they click Unsubscribe or Manage your preferences in your messages. But you might want to let your audience proactively manage their preferences outside of messages—like as a part of your in-product settings or as a part of your sign-up flow.
There are two ways to do this:
Link to the hosted subscription center — Generate a signed URL that takes a person directly to your Customer.</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/expo/1.x/push-notifications/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/1.x/push-notifications/push/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive push notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/expo/getting-started/#install" click B href "/integrations/sdk/expo/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/expo/identify" click track-events href "/integrations/sdk/expo/track-events/" click register-token href "</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/expo/push-notifications/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/push-notifications/push/</guid><description>How it works When you use our Expo plugin, you&amp;rsquo;re already set up to support push notifications, including images and deep links.
Before a device can receive a push notification, you must:
Identify a person. This associates a token with the person; you can&amp;rsquo;t send push notifications to a device until you identify the recipient. (Optional) Set up your app to report push metrics back to Customer.io. Before you begin You need to enable Customer.</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/push-notifications/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/push-notifications/push/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive push notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/flutter/getting-started/#install" click B href "/integrations/sdk/flutter/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/flutter/identify" click track-events href "/integrations/sdk/flutter/track-events/" click register-token href "</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/push-notifications/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/push-notifications/push/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive push notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/react-native/getting-started/#install" click B href "/integrations/sdk/react-native/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/react-native/identify" click track-events href "/integrations/sdk/react-native/track-events/" click register-token href "</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/push-notifications/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/push-notifications/push/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive push notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/react-native/getting-started/#install" click B href "/integrations/sdk/react-native/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/react-native/identify" click track-events href "/integrations/sdk/react-native/track-events/" click register-token href "</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/push-notifications/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/push-notifications/push/</guid><description>How it works Under the hood, our React Native SDK takes advantage of our native Android and iOS SDKs. This helps us keep the React Native SDK up to date. But, for now, it also means you&amp;rsquo;ll need to add a bit of code to support your iOS users. For Android, you&amp;rsquo;re ready to go if you followed our getting started instructions.
Before a device can receive a push notification, you must:</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/push-notifications/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/push-notifications/push/</guid><description>How it works Under the hood, our React Native SDK takes advantage of our native Android and iOS SDKs. This helps us keep the React Native SDK up to date. But, for now, it also means you&amp;rsquo;ll need to add a bit of code to support your iOS users. For Android, you&amp;rsquo;re ready to go if you followed our getting started instructions.
Before a device can receive a push notification, you must:</description></item><item><title>Set up push notifications</title><link>https://docs.customer.io/integrations/sdk/react-native/push-notifications/push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/push-notifications/push/</guid><description>How it works Under the hood, our React Native SDK takes advantage of our native Android and iOS SDKs. This helps us keep the React Native SDK up to date. But, for now, it also means you&amp;rsquo;ll need to add a bit of code to support your iOS users. For Android, you&amp;rsquo;re ready to go if you followed our getting started instructions.
Before a device can receive a push notification, you must:</description></item><item><title>Slack notification for support tickets</title><link>https://docs.customer.io/journeys/zendesk-data-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/zendesk-data-campaign/</guid><description>As a part of this guide, you&amp;rsquo;ll set up a webhook in Zendesk to your Customer.io workspace when someone opens a high-priority ticket. You&amp;rsquo;ll use the webhook to trigger Slack notifications that alert your Support. Zendesk doesn&amp;rsquo;t support native Slack notifications when tickets are created, and this provides a handy way to help your Support team stay on top of tickets!
sequenceDiagram participant A as Customer participant B as Zendesk participant C as Customer.</description></item><item><title>Sound in push notifications</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/push/sound-in-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/push/sound-in-push/</guid><description>When you send a push notification to iOS devices that uses our SDK, you can opt to send the Default system sound or no sound at all. If your audience&amp;rsquo;s phone is set to vibrate, or they&amp;rsquo;ve disabled sound permissions for your app, the Default setting will cause the device to vibrate rather than playing a sound.
In most cases, you should use the Default sound setting to make sure your audience hears (or feels) your message.</description></item><item><title>Sound in push notifications</title><link>https://docs.customer.io/integrations/sdk/ios/push/sound-in-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/push/sound-in-push/</guid><description>When you send a push notification to iOS devices that uses our SDK, you can opt to send the Default system sound or no sound at all. If your audience&amp;rsquo;s phone is set to vibrate, or they&amp;rsquo;ve disabled sound permissions for your app, the Default setting will cause the device to vibrate rather than playing a sound.
In most cases, you should use the Default sound setting to make sure your audience hears (or feels) your message.</description></item><item><title>Test your messages</title><link>https://docs.customer.io/journeys/test-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/test-in-app/</guid><description>There are different ways to test your in-app messages:
Live preview: Preview your web message in real time on your actual website. Adjust display settings on the fly and see changes sync back to the editor automatically. Send a test message: Send a one-time test of your message to check that it shows up in the right place and behaves the way you expect. Send test Live preview How it works Sends a one-time test message Opens an interactive session Settings Uses editor settings Adjustable on the fly via preview bar Platforms Web and mobile Web only Duration One-time 30-minute session Preview your message on your website Live preview lets you see your in-app message on your actual website as you build it.</description></item><item><title>Timestamp Conditions</title><link>https://docs.customer.io/journeys/segmentation-and-timestamp-rules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/segmentation-and-timestamp-rules/</guid><description>When you created your Customer.io account, you likely saw a default segment called &amp;ldquo;Signed up&amp;rdquo; that uses the rule created_at is a timestamp.
When you build your own segment, we have a variety of timestamp-based rules:
This document will give some guidelines for how and when to use each.
What does &amp;ldquo;is a timestamp&amp;rdquo; even mean? is a timestamp will evaluate to true as soon as the value is a valid UNIX timestamp.</description></item><item><title>Use form data in Customer.io</title><link>https://docs.customer.io/integrations/data-in/connections/forms/forms-in-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/forms-in-campaigns/</guid><description>How it works You can use form submissions to trigger campaigns and you can personalize messages using form submission data. This helps you talk to users who fill out your forms.
Each form submission also comes into Customer.io as an event called form_submit. You can use this event to create segments or complex campaign conditions in campaigns that aren&amp;rsquo;t necessarily triggered by the original form submission.
Trigger a campaign from a form Form submission events can trigger campaigns, so you can start a conversation with people and foster conversions immediately when they fill out your form.</description></item><item><title>Use objects in liquid</title><link>https://docs.customer.io/journeys/objects-in-liquid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/objects-in-liquid/</guid><description>Reference trigger data You can trigger campaigns based on changes to objects and relationships, so we made it possible for you to use liquid that targets the trigger object or relationship data. You can reference trigger data for object and relationship-triggered campaigns using {{trigger.&amp;lt;object_type&amp;gt;.&amp;lt;attribute_name&amp;gt;}}.
For instance, if you have an object type of &amp;ldquo;Online Classes&amp;rdquo; and set up a campaign to trigger when you update a class, you could craft an email like the following:</description></item><item><title>Use our docs with AI</title><link>https://docs.customer.io/ai/use-docs-with-ai/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/ai/use-docs-with-ai/</guid><description>How it works Large language models (LLMs) are great at reading markdown because, unlike HTML, there&amp;rsquo;s a lot less noise for them to parse. To make our documentation more accessible to AI, we&amp;rsquo;ve provided markdown-accessible versions of most of our documentation so you can reference it with your own AI tools.
You can access plain-text markdown versions of our docs in a few ways:
(Recommended) Our llms.txt file: This is an emerging standard and acts as a sort of LLM-friendly sitemap.</description></item><item><title>Use your Mailgun Account</title><link>https://docs.customer.io/journeys/triggered-lifecycle-email-with-mailgun/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/triggered-lifecycle-email-with-mailgun/</guid><description>You can use your Mailgun account to send email through Customer.io with no loss in functionality. To take advantage of Mailgun, you need to do two things:
Point Mailgun&amp;rsquo;s webhooks at Customer.io. Configure Mailgun as a custom SMTP server in Customer.io. Point Mailgun&amp;rsquo;s webhooks at Customer.io Go to the Mailgun webhooks page.
Enter the webhook URL that corresponds to your region for the events you want to forward to Customer.io.</description></item><item><title>Using JSON in segments</title><link>https://docs.customer.io/journeys/json-in-segments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/json-in-segments/</guid><description>&amp;nbsp;New to JSON?
JSON is a standard, simple way to organize and structure data. Check out our introduction to JSON and learn how you can take advantage of JSON in Customer.io. How it works Attributes and events can contain nested JSON (JavaScript Object Notation) values, and you can evaluate these values when you build a segmentA group of people who match a series of conditions. People enter and exit the segment automatically when they match or stop matching conditions.</description></item><item><title>Utility Methods and Performance</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/utility-methods/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/utility-methods/</guid><description>How it works Our JavaScript client exposes the following utility methods to help you change how script loads on your page.
Load Ready Debug On (Emitter) Timeout Reset (Logout) Load You can load a buffered version of our JavaScript that requires you call load explicitly before the script initiates any network activity. This is useful if you want to wait for user consent before you load the full compliment of integrations or send buffered events to Customer.</description></item><item><title>What's the Last Visited field, and how do I use it?</title><link>https://docs.customer.io/journeys/last-visited/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/last-visited/</guid><description>You may have noticed that each person in your Customer.io account has a Last Visited field:
If this field is blank in your account, there are several ways to set up and make use of it.
Updating Last Visited with page views By default, the &amp;ldquo;Last Visited&amp;rdquo; attribute is updated based on page view activity. For profiles where page views exist, we will update &amp;ldquo;Last Visited&amp;rdquo; accordingly.
Page views can be tracked using one of two options:</description></item><item><title>Zoho integration</title><link>https://docs.customer.io/integrations/data-in/connections/webhooks/integrating-with-zoho-crm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/webhooks/integrating-with-zoho-crm/</guid><description>Configuring Zoho CRM in Zoho Flow To start, create a new flow from the My Flows page in Zoho Flow
From there you&amp;rsquo;ll be asked to name and describe your new flow, sending you to the Zoho Flow Builder. Select &amp;lsquo;App&amp;rsquo; as the trigger for your flow.
Select Zoho CRM as your App Trigger. Here you are given several option for what action will trigger this workflow. You can find full descriptions for each option in Zoho Flow&amp;rsquo;s documentation.</description></item><item><title>App Groups for push tracking</title><link>https://docs.customer.io/integrations/sdk/expo/push-notifications/app-groups/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/push-notifications/app-groups/</guid><description>App Groups are required for reliable push delivery tracking on iOS. Without this setup, delivery metrics may be lost if iOS terminates the Notification Service Extension before the tracking request completes. With App Groups, the SDK automatically recovers these lost metrics on the next app launch.
Before you begin Before you configure App Groups, make sure you&amp;rsquo;ve completed the following:
Set up push notifications with useRichPush: true enabled Created an App Group identifier in the Apple Developer Portal.</description></item><item><title>App Groups for push tracking</title><link>https://docs.customer.io/integrations/sdk/react-native/push-notifications/app-groups/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/push-notifications/app-groups/</guid><description>App Groups are required for reliable push delivery tracking on iOS. Without this setup, delivery metrics may be lost if iOS terminates the Notification Service Extension before the tracking request completes. With App Groups, the SDK automatically recovers these lost metrics on the next app launch.
Before you begin Before you configure App Groups, make sure you&amp;rsquo;ve completed the following:
Set up push notifications in your React Native app Added a Notification Service Extension as part of the push setup 1.</description></item><item><title>Custom unsubscribe links (RFC 8058)</title><link>https://docs.customer.io/journeys/custom-unsubscribe-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/custom-unsubscribe-links/</guid><description>How it works Google and Yahoo have added new requirements, allowing recipients to unsubscribe from your marketing messages with a single click. If you use our default unsubscribe functionality, you don&amp;rsquo;t need to do anything. But if you use a custom unsubscribe solution, you need to follow the instructions on this page to implement the new requirements before June 1st, 2024.
The new requirement is RFC 8058 List-unsubscribe-post. It defines true one-click unsubscribe through an HTTPS URI POST that triggers an unsubscribe within 48 hours.</description></item><item><title>Deep links</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/push-notifications/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/push-notifications/deep-links/</guid><description>How it works Deep links are the links that directs users to a specific location within a mobile app. When you set up your notification, you can set a &amp;ldquo;deep link.&amp;rdquo; When your audience taps the notification, the SDK will route users to the right place.
Deep links help make your message meaningful, with a call to action that makes it easier, and more likely, for your audience to follow. For example, if you send a push notification about a sale, you can send a deep link that takes your audience directly to the sale page in your app.</description></item><item><title>Deep links</title><link>https://docs.customer.io/integrations/sdk/flutter/push-notifications/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/push-notifications/deep-links/</guid><description>How it works Deep links are the links that directs users to a specific location within a mobile app. When you set up your notification, you can set a &amp;ldquo;deep link.&amp;rdquo; When your audience taps the notification, the SDK will route users to the right place.
Deep links help make your message meaningful, with a call to action that makes it easier, and more likely, for your audience to follow. For example, if you send a push notification about a sale, you can send a deep link that takes your audience directly to the sale page in your app.</description></item><item><title>Deep Links</title><link>https://docs.customer.io/integrations/sdk/expo/1.x/push-notifications/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/1.x/push-notifications/deep-links/</guid><description>How it works Deep links are the links that directs users to a specific location within a mobile app. When you set up your notification, you can set a &amp;ldquo;deep link.&amp;rdquo; When your audience taps the notification, the SDK will route users to the right place.
Deep links help make your message meaningful, with a call to action that makes it easier, and more likely, for your audience to follow. For example, if you send a push notification about a sale, you can send a deep link that takes your audience directly to the sale page in your app.</description></item><item><title>Deep Links</title><link>https://docs.customer.io/integrations/sdk/expo/push-notifications/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/push-notifications/deep-links/</guid><description>How it works Deep links are the links that directs users to a specific location within a mobile app. When you set up your notification, you can set a &amp;ldquo;deep link.&amp;rdquo; When your audience taps the notification, the SDK will route users to the right place.
Deep links help make your message meaningful, with a call to action that makes it easier, and more likely, for your audience to follow. For example, if you send a push notification about a sale, you can send a deep link that takes your audience directly to the sale page in your app.</description></item><item><title>Deep Links</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/push-notifications/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/push-notifications/deep-links/</guid><description>How it works Deep links are the links that directs users to a specific location within a mobile app. When you set up your notification, you can set a &amp;ldquo;deep link.&amp;rdquo; When your audience taps the notification, the SDK will route users to the right place.
Deep links help make your message meaningful, with a call to action that makes it easier, and more likely, for your audience to follow. For example, if you send a push notification about a sale, you can send a deep link that takes your audience directly to the sale page in your app.</description></item><item><title>Deep Links</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/push-notifications/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/push-notifications/deep-links/</guid><description>How it works Deep links are links that send a person from push notifications to pages in your app. When you set up your notification, you can set a &amp;ldquo;deep link.&amp;rdquo; When your audience taps the notification, the SDK will route users to the right place.
Deep links help make your message meaningful, with a call to action that makes it easier, and more likely, for your audience to follow. For example, if you send a push notification about a sale, you can send a deep link that takes your audience directly to the sale page in your app.</description></item><item><title>Deep Links</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/push-notifications/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/push-notifications/deep-links/</guid><description>How it works Deep links are the links that directs users to a specific location within a mobile app. When you set up your notification, you can set a &amp;ldquo;deep link.&amp;rdquo; When your audience taps the notification, the SDK will route users to the right place.
Deep links help make your message meaningful, with a call to action that makes it easier, and more likely, for your audience to follow. For example, if you send a push notification about a sale, you can send a deep link that takes your audience directly to the sale page in your app.</description></item><item><title>Deep Links</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/push-notifications/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/push-notifications/deep-links/</guid><description>How it works Deep links are the links that directs users to a specific location within a mobile app. When you set up your notification, you can set a &amp;ldquo;deep link.&amp;rdquo; When your audience taps the notification, the SDK will route users to the right place.
Deep links help make your message meaningful, with a call to action that makes it easier, and more likely, for your audience to follow. For example, if you send a push notification about a sale, you can send a deep link that takes your audience directly to the sale page in your app.</description></item><item><title>Deep Links</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/push-notifications/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/push-notifications/deep-links/</guid><description>How it works Deep links are the links that directs users to a specific location within a mobile app. When you set up your notification, you can set a &amp;ldquo;deep link.&amp;rdquo; When your audience taps the notification, the SDK will route users to the right place.
Deep links help make your message meaningful, with a call to action that makes it easier, and more likely, for your audience to follow. For example, if you send a push notification about a sale, you can send a deep link that takes your audience directly to the sale page in your app.</description></item><item><title>Deep Links</title><link>https://docs.customer.io/integrations/sdk/react-native/push-notifications/deep-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/push-notifications/deep-links/</guid><description>How it works Deep links are the links that directs users to a specific location within a mobile app. When you set up your notification, you can set a &amp;ldquo;deep link.&amp;rdquo; When your audience taps the notification, the SDK will route users to the right place.
Deep links help make your message meaningful, with a call to action that makes it easier, and more likely, for your audience to follow. For example, if you send a push notification about a sale, you can send a deep link that takes your audience directly to the sale page in your app.</description></item><item><title>Handling multiple push providers</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/push-notifications/multiple-push-providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/push-notifications/multiple-push-providers/</guid><description>How to handle multiple push providers If you use another push service alongside our SDK (like FlutterFire), then that other service takes over push handling by default and prevents your app from receiving rich push notifications from Customer.io.
There are two ways to solve this problem, but we typically recommend the first option, because it&amp;rsquo;s more flexible and lets you process notifications through another service. The second option causes our SDK to take over push handling entirely.</description></item><item><title>Handling multiple push providers</title><link>https://docs.customer.io/integrations/sdk/flutter/push-notifications/multiple-push-providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/push-notifications/multiple-push-providers/</guid><description>How to handle multiple push providers If you use another push service alongside our SDK (like FlutterFire), then that other service takes over push handling by default and prevents your app from receiving rich push notifications from Customer.io.
There are two ways to solve this problem, but we typically recommend the first option, because it&amp;rsquo;s more flexible and lets you process notifications through another service. The second option causes our SDK to take over push handling entirely.</description></item><item><title>Handling Multiple Push Providers</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/push-notifications/multiple-push-providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/push-notifications/multiple-push-providers/</guid><description>How to handle multiple push providers If you use another push service alongside our SDK (like FlutterFire), then that other service takes over push handling by default and prevents your app from receiving rich push notifications from Customer.io.
There are two ways to solve this problem, but we typically recommend the first option, because it&amp;rsquo;s more flexible and lets you process notifications through another service. The second option causes our SDK to take over push handling entirely.</description></item><item><title>Handling Multiple Push Providers</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/push-notifications/multiple-push-providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/push-notifications/multiple-push-providers/</guid><description>How to handle multiple push providers If you use another push service alongside our SDK (like rnfirebase), it will take over push handling by default and prevent your app from receiving rich push notifications from Customer.io.
You can solve this problem using one (and only one) of the methods below, but we typically recommend the first option, because it doesn&amp;rsquo;t require you to write native code!
Option 1 (Recommended): Let Customer.</description></item><item><title>Handling Multiple Push Providers</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/push-notifications/multiple-push-providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/push-notifications/multiple-push-providers/</guid><description>How to handle multiple push providers If you use another module in your app that can display push notifications, like expo-notifications, react-native-push-notification, or rnfirebase, these modules may take over push handling by default and prevent your app from receiving push notifications from Customer.io. If Customer.io is the only SDK that you use in your app to display push notifications, then there is no more work that you need complete in your app.</description></item><item><title>Handling Multiple Push Providers</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/push-notifications/multiple-push-providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/push-notifications/multiple-push-providers/</guid><description>How to handle multiple push providers If Customer.io is the only SDK that you use in your app to display push notifications, then you don&amp;rsquo;t need to do anything special to display push notifications.
But, if you use another module in your app that can display push notifications like expo-notifications, react-native-push-notification, or rnfirebase, these modules can take over push handling by default and prevent your app from receiving push notifications from Customer.</description></item><item><title>Handling Multiple Push Providers</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/push-notifications/multiple-push-providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/push-notifications/multiple-push-providers/</guid><description>How to handle multiple push providers If Customer.io is the only SDK that you use in your app to display push notifications, then you don&amp;rsquo;t need to do anything special to display push notifications.
But, if you use another module in your app that can display push notifications like expo-notifications, react-native-push-notification, or rnfirebase, these modules can take over push handling by default and prevent your app from receiving push notifications from Customer.</description></item><item><title>Handling Multiple Push Providers</title><link>https://docs.customer.io/integrations/sdk/react-native/push-notifications/multiple-push-providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/push-notifications/multiple-push-providers/</guid><description>How to handle multiple push providers If Customer.io is the only SDK that you use in your app to display push notifications, then you don&amp;rsquo;t need to do anything special to display push notifications.
But, if you use another module in your app that can display push notifications like expo-notifications, react-native-push-notification, or rnfirebase, these modules can take over push handling by default and prevent your app from receiving push notifications from Customer.</description></item><item><title>Hubspot integration</title><link>https://docs.customer.io/integrations/data-in/connections/webhooks/integrating-with-hubspot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/webhooks/integrating-with-hubspot/</guid><description>&amp;nbsp;This article covers sending data from Hubspot to Customer.io. Looking to send data to Hubspot? Use our Hubspot destination!
If you need a way to sync Hubspot with Customer.io, this article is for you! While we don&amp;rsquo;t have an out-of-the-box integration for sending data from Hubspot to Customer.io, you can:
create a webhook campaign to retrieve this data or use Zapier to connect Hubspot to Customer.io or check out our partners to see if one of their integrations could suit your needs Some other options include exporting your Hubspot contacts and importing them to Customer.</description></item><item><title>Manage legacy team members</title><link>https://docs.customer.io/accounts-and-workspaces/legacy-permissions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/legacy-permissions/</guid><description>&amp;nbsp;When creating authors or viewers, if you are able to check a box for Hide all attributes, you are using our legacy roles and permission system.
We&amp;rsquo;re in the process of streamlining how you manage sensitive data in Customer.io. In the new system, all authors will have the same functionality regardless of whether sensitive data is hidden and you can control which profile attributes are hidden too. Otherwise, if you see a dropdown for Hide sensitive attributes you&amp;rsquo;re using our latest system and should go to Manage team members for up-to-date info.</description></item><item><title>Authenticating for Apple Private Email Relay</title><link>https://docs.customer.io/journeys/authenticating-for-apple-private-email-relay/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/authenticating-for-apple-private-email-relay/</guid><description>When a customer enables the Hide My Email option, Apple generates a unique and randomized email address at the @privaterelay.appleid.com domain that you can associate with that customer.
After you pass these addresses into your Customer.io workspace, you need to do a few more things to ensure that your messages are delivered to the Apple Private Email Relay. To start, you need to log into your Apple Developer Portal and go to Certificates, Identifiers &amp;amp; Profiles &amp;gt; More &amp;gt; Sign in with Apple for Email Communication &amp;gt; Configure.</description></item><item><title>Capture push metrics</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/push-notifications/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/push-notifications/push-metrics/</guid><description>Automatic push handling Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.
The SDK automatically tracks opened and delivered events for push notifications originating from Customer.io after you configure your app to receive push notifications. You don&amp;rsquo;t have to add any code to track opened push metrics or launch deep links.</description></item><item><title>Capture push metrics</title><link>https://docs.customer.io/integrations/sdk/flutter/push-notifications/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/push-notifications/push-metrics/</guid><description>Automatic push handling Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.
The SDK automatically tracks opened and delivered events for push notifications originating from Customer.io after you configure your app to receive push notifications. You don&amp;rsquo;t have to add any code to track opened push metrics or launch deep links.</description></item><item><title>Capture Push Metrics</title><link>https://docs.customer.io/integrations/sdk/expo/1.x/push-notifications/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/1.x/push-notifications/push-metrics/</guid><description>How it works Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.
As of version 1.0.0-beta.14 of our Expo plugin, we track both opened and delivered metrics automatically for you.
Beginning in version 1.0.0-beta.14 of our Expo plugin, the SDK automatically tracks opened and delivered events for push notifications originating from Customer.</description></item><item><title>Capture Push Metrics</title><link>https://docs.customer.io/integrations/sdk/expo/push-notifications/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/push-notifications/push-metrics/</guid><description>How it works Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.
By default, our SDK automatically tracks opened and delivered events for push notifications originating from Customer.io, but you can add (optional) custom handling to various push events. You might need a custom handler for push notifications that originate outside of Customer.</description></item><item><title>Capture Push Metrics</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/push-notifications/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/push-notifications/push-metrics/</guid><description>&amp;nbsp;Upgrade iOS SDK!
Beginning in version 2.11 of the native iOS SDK, the SDK automatically handles push notifications from Customer.io and tracks opened and delivered metrics for you. We recommend that you upgrade to simplify your code! Automatic push handling Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.</description></item><item><title>Capture Push Metrics</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/push-notifications/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/push-notifications/push-metrics/</guid><description>How it works Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.
&amp;nbsp;Update to version 3 for Javascript functions
The React Native SDK version 3.0 introduced support for tracking push metrics using Javascript methods, eliminating the need for adding any native code. It&amp;rsquo;s recommended you update to the latest version to take advantage of this feature.</description></item><item><title>Capture Push Metrics</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/push-notifications/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/push-notifications/push-metrics/</guid><description>&amp;nbsp;Upgrade to a version after 3.4.0!
If you&amp;rsquo;re on a version of our SDK before 3.4.0, you&amp;rsquo;ll need to manually handle push notifications. Beginning in 3.4.0, the SDK automatically handles push notifications from Customer.io and tracks opened and delivered metrics for you. We recommend that you upgrade to simplify your code! Automatic push handling Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.</description></item><item><title>Capture Push Metrics</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/push-notifications/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/push-notifications/push-metrics/</guid><description>Automatic push handling Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.
The SDK automatically tracks opened and delivered events for push notifications originating from Customer.io after you configure your app to receive push notifications. You don&amp;rsquo;t have to add any code to track opened push metrics or launch deep links.</description></item><item><title>Capture Push Metrics</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/push-notifications/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/push-notifications/push-metrics/</guid><description>Automatic push handling Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.
The SDK automatically tracks opened and delivered events for push notifications originating from Customer.io after you configure your app to receive push notifications. You don&amp;rsquo;t have to add any code to track opened push metrics or launch deep links.</description></item><item><title>Capture Push Metrics</title><link>https://docs.customer.io/integrations/sdk/react-native/push-notifications/push-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/push-notifications/push-metrics/</guid><description>Automatic push handling Customer.io supports device-side metrics that help you determine the efficacy of your push notifications: delivered when a push notification is received by the app and opened when a push notification is clicked.
The SDK automatically tracks opened and delivered events for push notifications originating from Customer.io after you configure your app to receive push notifications. You don&amp;rsquo;t have to add any code to track opened push metrics or launch deep links.</description></item><item><title>Campaigns with transactional messages</title><link>https://docs.customer.io/journeys/transactional-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/transactional-campaign/</guid><description>How it works A transactional message is a message that your audience expects to receive even if they&amp;rsquo;ve opted out of marketing messages—like purchase receipts, password reset requests, shipping updates, etc.
In most cases, we suggest that you use our transactional API to send transactional messages. But, if you need to send a transactional message over a channel other than email, SMS or push notifications, or you want to perform additional actions—like attribute changes, etc—you may need to set up a transactional campaign.</description></item><item><title>Collections</title><link>https://docs.customer.io/journeys/collections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/collections/</guid><description>What&amp;rsquo;s a Collection? A collection is a new type of data in Customer.io that&amp;rsquo;s separate from people or events in your account. They represent any set of &amp;ldquo;things&amp;rdquo; that exist in your business. For instance, a Collection could be a list of upcoming events, promotions/coupons, or available classes.
You should store this data in Customer.io when it&amp;rsquo;s helpful to be able to sort through the Collection to identify a specific set of data that you want to include in a message, tailored to the data you know about each person.</description></item><item><title>Edit live API-triggered broadcasts</title><link>https://docs.customer.io/journeys/apitb-changes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/apitb-changes/</guid><description>Change the recipient segment(s) in the UI Your updated segment(s) will be used the next time the broadcast is triggered.
Keep in mind, if you set the recipients in the UI but end up triggering through an API call, any recipients defined in the API call will override the UI setting.
Make changes while the broadcast is queued to send When a broadcast is triggered via API, it&amp;rsquo;s queued while sending to all recipients.</description></item><item><title>Forms API (backend integrations)</title><link>https://docs.customer.io/integrations/data-in/connections/forms/forms-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/forms-api/</guid><description>How it works When someone submits your form, we&amp;rsquo;ll identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously. the form submitter and assign them attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc.</description></item><item><title>Workspace Performance dashboard</title><link>https://docs.customer.io/journeys/health/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/health/</guid><description>Click &amp;gt; Workspace performance to go to your dashboard.
Start troubleshooting To start troubleshooting, review your Active issues on the Overview tab and dive into data or messaging metrics. Data metrics showcase info for data coming into your workspace. Messaging metrics showcase data for messages leaving your workspace.
Check your Overview tab for Active issues. Review your daily metrics on the Data tab to help diagnose data ingress issues. Review your daily metrics on the Messaging tab to help diagnose messaging output and delivery issues.</description></item><item><title>Verify deliverable email addresses with Kickbox</title><link>https://docs.customer.io/journeys/verify-email-deliverable-kickbox/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/verify-email-deliverable-kickbox/</guid><description>Introduction You don&amp;rsquo;t just want to know that email addresses are valid (i.e. they comply with RFC 5322); you want to know that addresses are deliverable. Sending messages to undeliverable email addresses can increase your bounce rate and impact your deliverability.
If you&amp;rsquo;re not able to verify the deliverability of an email address before you add it to Customer.io, you can always leverage Webhook actions and a third-party verification service like Kickbox.</description></item><item><title>2.x -> 3.x</title><link>https://docs.customer.io/integrations/sdk/ios/whats-new/3.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/whats-new/3.x-upgrade/</guid><description>What changed? This update provides native support for our new integrations framework. While this represents a significant change &amp;ldquo;under the hood,&amp;rdquo; we&amp;rsquo;ve tried to make it as seamless as possible for you; much of your implementation remains the same.
This move also adds two additional features:
Support for anonymous tracking: you can send events and other activity for anonymous users, and we&amp;rsquo;ll reconcile that activity with a person when you identify them.</description></item><item><title>Allowlist our IP addresses</title><link>https://docs.customer.io/accounts-and-workspaces/ip-addresses/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/ip-addresses/</guid><description>If you have a custom SMTP server, use our webhooks, or have an outgoing data warehouse integration, you&amp;rsquo;ll need to allow the appropriate addresses below.
Make sure you allow the appropriate addresses for your region!
Email (Custom SMTP) and Webhook IP Addresses US RegionEU Region 35.188.196.183 34.76.143.229 104.198.177.219 34.78.91.47 104.154.232.87 34.77.94.252 130.211.229.195 35.187.188.242 104.198.221.24 34.78.122.90 104.197.27.15 35.195.137.235 35.194.9.154 130.211.108.156 104.154.144.51 104.199.50.18 104.197.210.12 34.78.44.80 35.225.6.73 35.205.31.154 35.192.215.166 34.170.204.100 Reverse ETL IP Addresses (data-in) 34.</description></item><item><title>Analysis page &amp; reports</title><link>https://docs.customer.io/journeys/run-reports/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/run-reports/</guid><description>Reports let you retrieve data from Campaigns and Broadcasts based on common tags or naming conventions. With reports on the Analysis page, you might:
Locate your top performing marketing campaigns. Analyze deliverability of all your transactional campaigns together. Compare journey volume and performance of two similar campaigns. Each report might take a few seconds to run and will automatically run again when you change the report criteria. After results are returned, however, you can toggle any of the display options you&amp;rsquo;d like without re-running the full report.</description></item><item><title>Android channels</title><link>https://docs.customer.io/integrations/sdk/expo/push-notifications/push-notification-channel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/push-notifications/push-notification-channel/</guid><description>🎉New in v2.4 Starting in Android 8.0, you can set up &amp;ldquo;notification channels,&amp;rdquo; which categorize notifications for your Android app. Every notification now belongs to a channel and the channel determines the behavior of notifications—whether they play sounds, appear as heads-up notifications, and so on. Channels also give users control over which channels they want to see notifications from. For example, if you had a news app, you might have different channels for sports, entertainment, and breaking news, giving users the ability to pick the channels they care about.</description></item><item><title>Android channels</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/push-notifications/push-notification-channel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/push-notifications/push-notification-channel/</guid><description>🎉New in v2.4.0 Starting in Android 8.0, you can set up &amp;ldquo;notification channels,&amp;rdquo; which categorize notifications for your Android app. Every notification now belongs to a channel and the channel determines the behavior of notifications—whether they play sounds, appear as heads-up notifications, and so on. Channels also give users control over which channels they want to see notifications from. For example, if you had a news app, you might have different channels for sports, entertainment, and breaking news, giving users the ability to pick the channels they care about.</description></item><item><title>Android channels</title><link>https://docs.customer.io/integrations/sdk/flutter/push-notifications/push-notification-channel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/push-notifications/push-notification-channel/</guid><description>🎉New in v2.4.0 Starting in Android 8.0, you can set up &amp;ldquo;notification channels,&amp;rdquo; which categorize notifications for your Android app. Every notification now belongs to a channel and the channel determines the behavior of notifications—whether they play sounds, appear as heads-up notifications, and so on. Channels also give users control over which channels they want to see notifications from. For example, if you had a news app, you might have different channels for sports, entertainment, and breaking news, giving users the ability to pick the channels they care about.</description></item><item><title>Android channels</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/push-notifications/push-notification-channel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/push-notifications/push-notification-channel/</guid><description>🎉New in v4.5.0 Starting in Android 8.0, you can set up &amp;ldquo;notification channels,&amp;rdquo; which categorize notifications for your Android app. Every notification now belongs to a channel and the channel determines the behavior of notifications—whether they play sounds, appear as heads-up notifications, and so on. Channels also give users control over which channels they want to see notifications from. For example, if you had a news app, you might have different channels for sports, entertainment, and breaking news, giving users the ability to pick the channels they care about.</description></item><item><title>Android channels</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/push-notifications/push-notification-channel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/push-notifications/push-notification-channel/</guid><description>🎉New in v4.5.0 Starting in Android 8.0, you can set up &amp;ldquo;notification channels,&amp;rdquo; which categorize notifications for your Android app. Every notification now belongs to a channel and the channel determines the behavior of notifications—whether they play sounds, appear as heads-up notifications, and so on. Channels also give users control over which channels they want to see notifications from. For example, if you had a news app, you might have different channels for sports, entertainment, and breaking news, giving users the ability to pick the channels they care about.</description></item><item><title>Android channels</title><link>https://docs.customer.io/integrations/sdk/react-native/push-notifications/push-notification-channel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/push-notifications/push-notification-channel/</guid><description>🎉New in v4.5.0 Starting in Android 8.0, you can set up &amp;ldquo;notification channels,&amp;rdquo; which categorize notifications for your Android app. Every notification now belongs to a channel and the channel determines the behavior of notifications—whether they play sounds, appear as heads-up notifications, and so on. Channels also give users control over which channels they want to see notifications from. For example, if you had a news app, you might have different channels for sports, entertainment, and breaking news, giving users the ability to pick the channels they care about.</description></item><item><title>Anonymous activity</title><link>https://docs.customer.io/integrations/sdk/expo/tracking/anonymous-activity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/tracking/anonymous-activity/</guid><description>In Customer.io, you&amp;rsquo;ll see anonymous activity in the Activity Log, but we don&amp;rsquo;t surface anonymous profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.io. You reference a person&amp;rsquo;s profile attributes in liquid using customer—e.g. {{customer.email}}. in Customer.io. You won&amp;rsquo;t be able to find an &amp;ldquo;anonymous person&amp;rdquo; in your workspace, and an anonymous person can&amp;rsquo;t trigger campaigns or get messages (including push notifications) from Customer.</description></item><item><title>Cart Abandonment</title><link>https://docs.customer.io/journeys/cart-abandonment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/cart-abandonment/</guid><description>How it works For this recipe, we&amp;rsquo;ll send emails to customers who have abandoned their carts after a certain amount of time. We offer two methods through event-triggered or segment-triggered campaignsCampaigns are automated workflows you set up to send people messages and perform other actions when they meet your criteria.. We recommend using event-triggered campaigns when possible as you&amp;rsquo;ll have more flexibility for targeting information related to carts than if the information were stored on a person&amp;rsquo;s profile (segment-triggered campaign).</description></item><item><title>Channel</title><link>https://docs.customer.io/integrations/sdk/android/push/push-notification-channel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/push/push-notification-channel/</guid><description>🎉New in v4.7.0 Starting in Android 8.0, you can set up &amp;ldquo;notification channels,&amp;rdquo; which categorize notifications for your Android app. Every notification now belongs to a channel and the channel determines the behavior of notifications—whether they play sounds, appear as heads-up notifications, and so on. Channels also give users control over which channels they want to see notifications from. For example, if you had a news app, you might have different channels for sports, entertainment, and breaking news, giving users the ability to pick the channels they care about.</description></item><item><title>Common API-Triggered Broadcast errors</title><link>https://docs.customer.io/journeys/api-triggered-errors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/api-triggered-errors/</guid><description>Method Not Allowed You might have misspelled the request URI. The URI should look like the following (with the broadcast/trigger :id):
US region: https://api.customer.io/v1/api/campaigns/:id/triggers EU region: https://api-eu.customer.io/v1/api/campaigns/:id/triggers &amp;ldquo;status&amp;rdquo;:&amp;ldquo;400&amp;rdquo; { &amp;#34;errors&amp;#34;:[ { &amp;#34;detail&amp;#34;:&amp;#34;bad request (reference 01C4MWXZPAR1SHBSZT4ZMZ6KZV)&amp;#34;, &amp;#34;status&amp;#34;:&amp;#34;400&amp;#34; } ] } Reason: Issues with the JSON formatting of the request. This could be mismatched opening or closing brackets, missing commas or quotes, etc.
&amp;ldquo;status&amp;rdquo;:&amp;ldquo;401&amp;rdquo; You&amp;rsquo;ve provided an incorrect or invalid bearer token. Check that your token provides access to the workspace containing your broadcast and has sufficient permissions to trigger a broadcast.</description></item><item><title>Composer errors</title><link>https://docs.customer.io/journeys/composer-errors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/composer-errors/</guid><description>If you click it, the Review Errors modal will let you know what&amp;rsquo;s wrong. Inside this modal, there can be a variety of outputs. This is a run-down of the most common ones, when you see them, and what you can do to fix them!
Variable is missing! &amp;nbsp;Error found in From
Variable &amp;lsquo;customer.eemail&amp;rsquo; is missing And it happens when the variable you&amp;rsquo;re trying to use in your email doesn&amp;rsquo;t exist for the customer whose sample data you&amp;rsquo;re using.</description></item><item><title>CSS pre-processing</title><link>https://docs.customer.io/journeys/css-pre-processing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/css-pre-processing/</guid><description>What&amp;rsquo;s CSS pre-processing? CSS pre-processing converts your CSS styles to inline attributes in your emails. This can make your email more compatible with email clients.
Why disable CSS pre-processing? You may want to disable CSS pre-processing if your HTML has already been processed. For instance, if you copy/pasted a custom email template with styles already inlined, repeating CSS pre-processing may cause issues with your layout. This most frequently happens with responsive email templates on mobile devices.</description></item><item><title>Customer.io, GDPR, and you!</title><link>https://docs.customer.io/accounts-and-workspaces/gdpr-faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/gdpr-faq/</guid><description>&amp;nbsp;Read the text in full!
We’d encourage you to read the text in full and consult with your legal counsel for the most complete understanding of the GDPR. Customer.io helps you use customer data to help send personalized messaging. We understand the power of this capability, and with it the importance of helping you protect that data. We&amp;rsquo;ve stated our public commitment to the regulation and, as part of that, have either built new features for the product, or made them more accessible.</description></item><item><title>Data Compliance and Privacy</title><link>https://docs.customer.io/integrations/getting-started/data-compliance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/getting-started/data-compliance/</guid><description>GDPR and regulatory compliance GDPR is the EU&amp;rsquo;s General Data Protection Regulation, and provides rules for handling customer data within the EU. But, even if you don&amp;rsquo;t have customers in the EU, you may want to abide by these rules—more or less—to prepare for data privacy rules in other locations and to respect your audience&amp;rsquo;s privacy.
To help you maintain GDPR compliance, we:
Store and transfer data securely. Information in our North America data center does not leave North America unless you send it to a service outside the US.</description></item><item><title>Delete people and suppress profile IDs</title><link>https://docs.customer.io/journeys/deleting-users/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/deleting-users/</guid><description>If you are honoring a person&amp;rsquo;s request to be forgotten, or simply want to prevent an identifier from being added to your Customer.io workspace in the future, you can suppress that identifier when deleting people.
Types of suppressions Suppressions can mean a few different things:
In Customer.io, you can suppress a deleted person&amp;rsquo;s identifiers so they can&amp;rsquo;t ever be readded to your workspace (good for GDPR compliance). Email service providers (ESP) suppress an email address to help you maintain good deliverability.</description></item><item><title>Drag-and-Drop Emails: The Basics</title><link>https://docs.customer.io/journeys/drag-and-drop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/drag-and-drop/</guid><description>&amp;nbsp;Check out Design Studio!
Design Studio is our newest, most flexible email editor. Use components to create a block-based email from scratch, and set global styles to create a consistent brand across your messages made in Design Studio. No longer do you have to decide between a visual or code-based editor; you can use both! Settings The Settings tab contains general settings for your whole message: background color, default typeface, link color, etc.</description></item><item><title>Edit or disconnect forms</title><link>https://docs.customer.io/integrations/data-in/connections/forms/edit-disconnect/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/forms/edit-disconnect/</guid><description>How it works You can edit a form at any time to add, remove, or re-map form fields. But changing form fields does not affect form submissions you&amp;rsquo;ve already received. If you want to keep attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc. Use attributes to target people and personalize messages.</description></item><item><title>Email deliverability metrics</title><link>https://docs.customer.io/journeys/deliverability-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/deliverability-metrics/</guid><description>The Deliverability tab in the Analysis section of your workspace shows key email metrics by provider. These metrics represent all outbound emails from your workspace over a timeframe you select. This data can help you identify providers you&amp;rsquo;re performing poorly with so that you can take action to improve deliverability and engagement with your emails.
Metrics The Provider column shows the provider or provider group name: the email services that your recipients use.</description></item><item><title>Exit conditions</title><link>https://docs.customer.io/journeys/campaign-exit-conditions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/campaign-exit-conditions/</guid><description>By default, a person continues through a campaign until they stop matching the campaign filter criteria. (For an attribute or segment-triggered campaign, people will exit when they stop matching the trigger conditions by default.)
To view or modify your exit criteria, click the upper-left menu while editing a campaign. Then click Manage under Exit.
These are your options for exit conditions:
They match the conversion criteria: This setting causes people to exit your campaign after they perform the conversion action (your audience performs an event, enters a segment, or leaves a segment).</description></item><item><title>Feature adoption</title><link>https://docs.customer.io/journeys/web-adoption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/web-adoption/</guid><description>How it works In this recipe, we&amp;rsquo;ll trigger a campaign based on a segment of users who use your product regularly. We&amp;rsquo;ll send them an in-app message about the new feature and how to get started.
We&amp;rsquo;ll also set up our message so that it only appears on relevant pages and in the right spot. For example, we don&amp;rsquo;t want our message to block an Add to Cart button.
Before you begin This recipe assumes you&amp;rsquo;ve already set up your website to identify people and receive in-app messages.</description></item><item><title>HIPAA compliance and privacy regulations</title><link>https://docs.customer.io/journeys/hipaa-standards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/hipaa-standards/</guid><description>HIPAA compliance requirements The Health Insurance Portability and Accountability Act (HIPAA) is a United States law that ensures organizations handling individuals’ digital health information keep it secure and confidential. The information protected under HIPAA is referred to as Protected Health Information (PHI). PHI includes not only medical details, like test outcomes and treatment records, but also personal identifiers connected to those records like a patient’s name, contact details, account numbers, demographic data, and related identifiers.</description></item><item><title>Manage your API credentials</title><link>https://docs.customer.io/accounts-and-workspaces/managing-credentials/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/managing-credentials/</guid><description>&amp;nbsp;To access your credentials, you must be an Account Admin or Member with the account-level permission, &amp;ldquo;Manage API credentials.&amp;rdquo;
Track API Keys vs App API Keys There are two types of API keys in each account.
Track API Keys Track API keys are used to send behavioral tracking activity (/events and attribute updates) into your workspace. API requests using the https://track.customer.io/api/v1/ endpoint use these tracking API keys.
App API Keys App API keys are used to trigger messages and broadcasts, or programmatically retrieve data from your workspace for analysis, troubleshooting, or reporting.</description></item><item><title>Multiple push providers</title><link>https://docs.customer.io/integrations/sdk/expo/push-notifications/multiple-push-providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/push-notifications/multiple-push-providers/</guid><description>Use React Native Firebase with the Customer.io SDK If you use react-native-firebase with the Customer.io SDK, you&amp;rsquo;ll need to make sure that your app.json or app.config.js file doesn&amp;rsquo;t include the ios.pushNotification.googleServicesFile option.
This ensures that you properly capture metrics for push notifications sent through Customer.io and any notifications you receive using react-native-firebase.
{ &amp;#34;expo&amp;#34;: { &amp;#34;ios&amp;#34;: { // include plist file here &amp;#34;googleServicesFile&amp;#34;: &amp;#34;./GoogleService-Info.plist&amp;#34; }, &amp;#34;plugins&amp;#34;: [ [ &amp;#34;customerio-expo-plugin&amp;#34;, { &amp;#34;android&amp;#34;: { &amp;#34;googleServicesFile&amp;#34;: &amp;#34;.</description></item><item><title>Payment Problems</title><link>https://docs.customer.io/accounts-and-workspaces/payment-problems/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/payment-problems/</guid><description>If your payment fails: If your account payment fails repeatedly, our billing team will try to reach out to your team to talk about the issue. It&amp;rsquo;s important you keep your invoice contact up to date so that these messages reach the right person. We&amp;rsquo;ll also display a banner in-app to let you know there&amp;rsquo;s a problem.
If you see this, don&amp;rsquo;t panic! Reach out to our billing team on billing@customer.</description></item><item><title>Provisional Push</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/push/provisional/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/push/provisional/</guid><description>Provisional push support is available for iOS 15 and above. Customer.io doesn&amp;rsquo;t have a specific &amp;ldquo;provisional push&amp;rdquo; feature. This is just something that iOS supports out of the box with iOS 15+. See Apple&amp;rsquo;s provisional authorization documentation to learn more.
When you request authorization for push notifications, you can include the .provisional option in the requestAuthorization call.
class NotificationUtil: NotificationUtility { func showPromptForPushPermission(completionHandler: @escaping (Bool) -&amp;gt; Void) { UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .</description></item><item><title>Provisional Push</title><link>https://docs.customer.io/integrations/sdk/ios/push/provisional/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/push/provisional/</guid><description>Provisional push support is available for iOS 15 and above. Customer.io doesn&amp;rsquo;t have a specific &amp;ldquo;provisional push&amp;rdquo; feature. This is just something that iOS supports out of the box with iOS 15+. See Apple&amp;rsquo;s provisional authorization documentation to learn more.
When you request authorization for push notifications, you can include the .provisional option in the requestAuthorization call.
class NotificationUtil: NotificationUtility { func showPromptForPushPermission(completionHandler: @escaping (Bool) -&amp;gt; Void) { UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .</description></item><item><title>Push service certificates</title><link>https://docs.customer.io/integrations/sdk/android/push/push-certificates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/push/push-certificates/</guid><description>Upload your push certificate If you don&amp;rsquo;t already have your FCM .JSON file, you&amp;rsquo;ll need to get it before you can finish this process and send push notifications.
In Customer.io, go to Settings &amp;gt; Workspace Settings and click Settings next to Push.
For iOS, click Enable, and select the Firebase Cloud Messaging (FCM) option.
Get your .JSON file for FCM Before you can get a push certificate for Firebase Cloud Messaging, make sure that the FCM API is enabled for your project.</description></item><item><title>Push service certificates</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/push/push-certificates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/push/push-certificates/</guid><description>You can send push notifications to iOS devices using either Apple&amp;rsquo;s Push Notification service (APNs) or Google&amp;rsquo;s Firebase Cloud Messaging (FCM) service.
To authorize your Customer.io workspace to send notifications through APNs, you&amp;rsquo;ll need to upload your APNs .p8 certificate and provide your credentials or upload your .JSON to iOS devices over Apple&amp;rsquo;s Push Notification service, you&amp;rsquo;ll need to upload your APNs .p8 certificate and enter your Apple Developer Key ID, Team ID, and Bundle ID.</description></item><item><title>Push service certificates</title><link>https://docs.customer.io/integrations/sdk/ios/push/push-certificates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/push/push-certificates/</guid><description>You can send push notifications to iOS devices using either Apple&amp;rsquo;s Push Notification service (APNs) or Google&amp;rsquo;s Firebase Cloud Messaging (FCM) service.
To authorize your Customer.io workspace to send notifications through APNs, you&amp;rsquo;ll need to upload your APNs .p8 certificate and provide your credentials or upload your .JSON to iOS devices over Apple&amp;rsquo;s Push Notification service, you&amp;rsquo;ll need to upload your APNs .p8 certificate and enter your Apple Developer Key ID, Team ID, and Bundle ID.</description></item><item><title>Rich push notifications</title><link>https://docs.customer.io/integrations/sdk/android/2.x/rich-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/2.x/rich-push/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Rich push notifications</title><link>https://docs.customer.io/integrations/sdk/ios/1.x/rich-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/1.x/rich-push/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Send data from Customer.io to Salesforce, Highrise or another CRM</title><link>https://docs.customer.io/journeys/bcc-salesforce-or-your-crm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/bcc-salesforce-or-your-crm/</guid><description>For each email you want to BCC to your CRM, head into the Composer:
Add your CRM&amp;rsquo;s dropbox address in the BCC field Uncheck the &amp;ldquo;Fake BCC option&amp;rdquo; What does &amp;ldquo;Fake BCC&amp;rdquo; do? If this option is checked, instead of sending a true BCC, we&amp;rsquo;ll send you a separate copy of the email (with a modified subject line containing the user&amp;rsquo;s email address). This allows you to be copied on emails, open them and click links without worrying about affecting the user&amp;rsquo;s history.</description></item><item><title>Set up in-app messages</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/in-app-messages/set-up-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/in-app-messages/set-up-in-app/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/react-native/getting-started/#install" click B href "/integrations/sdk/react-native/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/react-native/identify" click track-events href "/integrations/sdk/react-native/track-events/" click register-token href "</description></item><item><title>Set up in-app messages</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/in-app-messages/set-up-in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/in-app-messages/set-up-in-app/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/react-native/getting-started/#install" click B href "/integrations/sdk/react-native/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/react-native/identify" click track-events href "/integrations/sdk/react-native/track-events/" click register-token href "</description></item><item><title>Smart character encoding</title><link>https://docs.customer.io/journeys/sms-character-encoding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/sms-character-encoding/</guid><description>How it works By default, SMS messages use the GSM 7-bit character set, which supports up to 160 characters. Going over the character limit will cause your message to split into multiple messages—which may not be a great experience for your customers and each message (called a segment or a credit depending on your plan) is counted towards your bill!
While the default character set covers roughly 128 common symbols, it doesn&amp;rsquo;t cover all languages or symbols you might use in text messages.</description></item><item><title>Test your push implementation</title><link>https://docs.customer.io/integrations/sdk/android/push/test-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/push/test-push/</guid><description>This is what the payload looks like on our end. If you&amp;rsquo;ve set up your app to use other data—custom keys outside the scope of our SDK—you can use our Custom Payload Editor; you&amp;rsquo;re welcome to place custom keys inside the message.data object, but you&amp;rsquo;ll need to do additional development to support keys beyond our standard title, body, link, and image.
{ &amp;#34;message&amp;#34;: { &amp;#34;data&amp;#34;: { &amp;#34;title&amp;#34;: &amp;#34;string&amp;#34;, //(optional) The title of the notification.</description></item><item><title>Test your push implementation</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/push/test-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/push/test-push/</guid><description>After you set up push notifications, you should send some test messages. You can send messages through the Customer.io push composer. If your app is set up to send more than the standard title, body, image, and link, you&amp;rsquo;ll need to send a custom payload.
The payloads below represent what your app can expect to receive from Customer.io. If you use a custom payload, you&amp;rsquo;ll need to use the format(s) below to make sure that the SDK receives your message properly.</description></item><item><title>Test your push implementation</title><link>https://docs.customer.io/integrations/sdk/ios/push/test-push/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/push/test-push/</guid><description>After you set up push notifications, you should send some test messages. You can send messages through the Customer.io push composer. If your app is set up to send more than the standard title, body, image, and link, you&amp;rsquo;ll need to send a custom payload.
The payloads below represent what your app can expect to receive from Customer.io. If you use a custom payload, you&amp;rsquo;ll need to use the format(s) below to make sure that the SDK receives your message properly.</description></item><item><title>Timestamp Conditions FAQ</title><link>https://docs.customer.io/journeys/faq-timestamps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/faq-timestamps/</guid><description>Why don&amp;rsquo;t people match my Signed Up segment even after I sent in created_at timestamps? In order for any timestamp rule to work, you need to send the timestamps in unix (seconds since epoch) format. If you are sending timestamps in milliseconds or if you&amp;rsquo;re using a different timestamp format like ISO 8601, your users will not match.
Unsupported timestamp values We support timestamp values in seconds since epoch. We don&amp;rsquo;t support timestamps between 0 and 100000000, values in milliseconds, or negative timestamp values.</description></item><item><title>Troubleshooting and feedback</title><link>https://docs.customer.io/ai/agent/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/ai/agent/troubleshooting/</guid><description>Verify AI-generated results AI suggestions and generated content are designed to help you, but they&amp;rsquo;re not a substitute for your expertise.
AI can make mistakes, potentially leading to unintended consequences. You should not rely on AI-powered features as a singular source of truth, especially when it comes to features that can impact your audience—like segments that trigger campaigns or updating messages in live campaigns.
When you work with AI-powered search results, you should review the cited sources from our documentation to verify the accuracy of the information.</description></item><item><title>Understanding your A/B test results</title><link>https://docs.customer.io/journeys/understanding-ab-results/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/understanding-ab-results/</guid><description>Note: the information in this document only applies to testing campaign messages. See A/B Testing Newsletters for more on testing newsletters.
What does &amp;lsquo;Chance to Beat Original&amp;rsquo; mean? Chance to beat original (CTBO) is the likelihood that the variation will outperform the original.
It determines statistical significance by answering the question:
Is the difference observed between the original and variation greater than a difference due to random chance?
What does a CTBO of 50% mean?</description></item><item><title>Use your Mailjet Account</title><link>https://docs.customer.io/journeys/triggered-lifecycle-email-with-mailjet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/triggered-lifecycle-email-with-mailjet/</guid><description>You can use your Mailjet account to send email through Customer.io with no loss in functionality. To take advantage of Mailjet, you need to do two things:
Point Mailjet&amp;rsquo;s webhooks at Customer.io. Configure Mailjet as a custom SMTP server in Customer.io. Point Mailjet&amp;rsquo;s webhooks at Customer.io Go to the Mailjet event triggers page. Add the webhook URL corresponding to your region for all events except Open and Click. US: https://track.customer.io/mailjet/events EU: https://track-eu.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/in-app-messages/in-app-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/in-app-messages/in-app-actions/</guid><description>How it works In-app messages often have a call to action. Most basic actions are handled automatically by the SDK. For example, if you set a call-to-action button to open a web page, the SDK will open the web page when the user taps the button.
But you can also listen for in-app message events and handle responses yourself. And if you set up custom actions, you&amp;rsquo;ll need to handle the action yourself and dismiss the resulting message when you&amp;rsquo;re done with it.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/in-app-messages/in-app-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/in-app-messages/in-app-actions/</guid><description>How it works In-app messages often have a call to action. Most basic actions are handled automatically by the SDK. For example, if you set a call-to-action button to open a web page, the SDK will open the web page when the user taps the button.
But you can also set up custom actions that require your app to handle the response. If you set up custom actions, you’ll need to handle the action yourself and dismiss the resulting message when you’re done with it.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/in-app-messages/in-app-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/in-app-messages/in-app-actions/</guid><description>How it works In-app messages often have a call to action. Most basic actions are handled automatically by the SDK. For example, if you set a call-to-action button to open a web page, the SDK will open the web page when the user taps the button.
But you can also set up custom actions that require your app to handle the response. If you set up custom actions, you’ll need to handle the action yourself and dismiss the resulting message when you’re done with it.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/in-app-messages/in-app-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/in-app-messages/in-app-actions/</guid><description>How it works In-app messages often have a call to action. Most basic actions are handled automatically by the SDK. For example, if you set a call-to-action button to open a web page, the SDK will open the web page when the user taps the button.
But you can also set up custom actions that require your app to handle the response. If you set up custom actions, you’ll need to handle the action yourself and dismiss the resulting message when you’re done with it.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/react-native/in-app-messages/in-app-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/in-app-messages/in-app-actions/</guid><description>How it works In-app messages often have a call to action. Most basic actions are handled automatically by the SDK. For example, if you set a call-to-action button to open a web page, the SDK will open the web page when the user taps the button.
But you can also set up custom actions that require your app to handle the response. If you set up custom actions, you’ll need to handle the action yourself and dismiss the resulting message when you’re done with it.</description></item><item><title>In-app messages</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/in-app/</guid><description>How it works In-app messages for your website work differently than push notifications would: they require JavaScript, and they don&amp;rsquo;t go through a push notification service (like APNs or FCM).
In most cases, you simply need to identify your web visitors, and they&amp;rsquo;ll become eligible to receive your in-app messages.
sequenceDiagram Participant a as App User Participant b as JavaScript Client Participant c as Customer.io c->>c: Trigger in-app message c-->>b: If app isn't open, hold</description></item><item><title>In-app messages</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/legacy-js/in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/legacy-js/in-app/</guid><description>How it works In-app messages for your website work differently than push notifications would: they require JavaScript, and they don&amp;rsquo;t go through a push notification service (like APNs or FCM).
This means that as long as you identify your web visitors, and those visitors don&amp;rsquo;t disable JavaScript, you can send in-app messages to people.
sequenceDiagram Participant a as App User Participant b as SDK Participant c as Customer.io c->>c: Trigger in-app message c-->>b: If app isn't open, hold</description></item><item><title>In-app messages</title><link>https://docs.customer.io/integrations/sdk/android/3.x/in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/3.x/in-app/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>In-app messages</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/in-app-messages/in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/in-app-messages/in-app/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/flutter/getting-started/#install" click B href "/integrations/sdk/flutter/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/flutter/identify" click track-events href "/integrations/sdk/flutter/track-events/" click register-token href "</description></item><item><title>In-app messages</title><link>https://docs.customer.io/integrations/sdk/ios/1.x/in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/1.x/in-app/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>In-app messages</title><link>https://docs.customer.io/integrations/sdk/ios/2.x/in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/2.x/in-app/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Notification inbox</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/inbox/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/inbox/</guid><description>How it works Unlike other messages, inbox messages don&amp;rsquo;t necessarily appear immediately to users, and they don&amp;rsquo;t disappear when the user dismisses them. Instead, you&amp;rsquo;ll display these messages through a notification inbox that your audience can access at their leisure.
Customer.io also doesn&amp;rsquo;t deliver rendered inbox messages; they&amp;rsquo;re delivered as JSON payloads. The SDK helps you listen for these payloads, but you&amp;rsquo;ll determine how to display them in your own inbox client.</description></item><item><title>Notification inbox</title><link>https://docs.customer.io/integrations/sdk/android/in-app/inbox/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/in-app/inbox/</guid><description>How it works Unlike other messages, inbox messages don&amp;rsquo;t necessarily appear immediately to users, and they don&amp;rsquo;t disappear when the user dismisses them. Instead, you&amp;rsquo;ll display these messages through a notification inbox that your audience can access at their leisure.
Customer.io delivers inbox messages as JSON payloads, not fully-rendered messages. The SDK helps you listen for these payloads, but you&amp;rsquo;ll determine how to display them in your own inbox client.</description></item><item><title>Notification inbox</title><link>https://docs.customer.io/integrations/sdk/expo/in-app-messages/inbox/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/in-app-messages/inbox/</guid><description>How it works Unlike other messages, inbox messages don&amp;rsquo;t necessarily appear immediately to users, and they don&amp;rsquo;t disappear when the user dismisses them. Instead, you&amp;rsquo;ll display these messages through a notification inbox that your audience can access at their leisure.
Customer.io delivers inbox messages as JSON payloads, not fully-rendered messages. The SDK helps you listen for these payloads, but you&amp;rsquo;ll determine how to display them in your own inbox client.</description></item><item><title>Notification inbox</title><link>https://docs.customer.io/integrations/sdk/flutter/in-app-messages/inbox/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/in-app-messages/inbox/</guid><description>How it works Unlike other messages, inbox messages don&amp;rsquo;t necessarily appear immediately to users, and they don&amp;rsquo;t disappear when the user dismisses them. Instead, you&amp;rsquo;ll display these messages through a notification inbox that your audience can access at their leisure.
Customer.io delivers inbox messages as JSON payloads, not fully-rendered messages. The SDK helps you listen for these payloads, but you&amp;rsquo;ll determine how to display them in your own inbox client.</description></item><item><title>Notification inbox</title><link>https://docs.customer.io/integrations/sdk/ios/in-app/inbox/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/in-app/inbox/</guid><description>How it works Unlike other messages, inbox messages don&amp;rsquo;t necessarily appear immediately to users, and they don&amp;rsquo;t disappear when the user dismisses them. Instead, you&amp;rsquo;ll display these messages through a notification inbox that your audience can access at their leisure.
Customer.io delivers inbox messages as JSON payloads, not fully-rendered messages. The SDK helps you listen for these payloads, but you&amp;rsquo;ll determine how to display them in your own inbox client.</description></item><item><title>Notification inbox</title><link>https://docs.customer.io/integrations/sdk/react-native/in-app-messages/inbox/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/in-app-messages/inbox/</guid><description>How it works Unlike other messages, inbox messages don&amp;rsquo;t necessarily appear immediately to users, and they don&amp;rsquo;t disappear when the user dismisses them. Instead, you&amp;rsquo;ll display these messages through a notification inbox that your audience can access at their leisure.
Customer.io delivers inbox messages as JSON payloads, not fully-rendered messages. The SDK helps you listen for these payloads, but you&amp;rsquo;ll determine how to display them in your own inbox client.</description></item><item><title>Opt-out keyword handling</title><link>https://docs.customer.io/journeys/sms-keyword-opt-out/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/sms-keyword-opt-out/</guid><description>How it works While Customer.io doesn&amp;rsquo;t receive SMS replies directly, we capture opt-in and opt-out information from Twilio so that we respect your audience&amp;rsquo;s preferences and show you which numbers people have opted out of.
We show a list of opt-outs in the SMS Opt-outs section of any person&amp;rsquo;s profile. This list updates in near real-time as people opt out or back into SMS messaging for a given phone number.</description></item><item><title>Schedule a campaign</title><link>https://docs.customer.io/journeys/schedule-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/schedule-campaigns/</guid><description>How it works When you schedule a campaign, Customer.io automatically manages it based on your specified times:
Start time: When the campaign starts to trigger and process journeys Stop time: When the campaign stops accepting new people Scheduled campaigns display a &amp;ldquo;Scheduled&amp;rdquo; label next to their status indicator. The &amp;ldquo;Scheduled&amp;rdquo; label shows that a start and/or stop time is set, while the status (like &amp;ldquo;Running&amp;rdquo;, &amp;ldquo;Draft&amp;rdquo;, or &amp;ldquo;Stopped&amp;rdquo;) shows the campaign&amp;rsquo;s current state.</description></item><item><title>Set up in-app messages</title><link>https://docs.customer.io/integrations/sdk/expo/1.x/in-app/in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/1.x/in-app/in-app/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> in-app(Receive in-app) click getting-started href "/integrations/sdk/expo/getting-started/#install" click B href "/integrations/sdk/expo/getting-started/#initialize-the-sdk" click identify href "/integrations/sdk/expo/identify" click track-events href "/integrations/sdk/expo/track-events/" click register-token href "</description></item><item><title>Set up in-app messages</title><link>https://docs.customer.io/integrations/sdk/expo/in-app-messages/in-app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/in-app-messages/in-app/</guid><description>How it works Unlike push notifications, where you need to add settings to your Expo plugins, in-app messaging is enabled automatically. You simply need to add an inApp object with your site_id to your CioConfig to support in-app messages.
An in-app message is a message that people see in your app. If you set an expiry period for your message, and that time elapses before someone opens your app, they won&amp;rsquo;t see your message.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/in-app-messages/in-app-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/in-app-messages/in-app-actions/</guid><description>How it works In-app messages often have a call to action. Most basic actions are handled automatically by the SDK. For example, if you set a call-to-action button to open a web page, the SDK will open the web page when the user taps the button.
But you can also set up custom actions that require your app to handle the response. If you set up custom actions, you&amp;rsquo;ll need to handle the action yourself and dismiss the resulting message when you&amp;rsquo;re done with it.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/in-app-messages/in-app-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/in-app-messages/in-app-actions/</guid><description>How it works In-app messages often have a call to action. Most basic actions are handled automatically by the SDK. For example, if you set a call-to-action button to open a web page, the SDK will open the web page when the user taps the button.
But you can also set up custom actions that require your app to handle the response. If you set up custom actions, you’ll need to handle the action yourself and dismiss the resulting message when you’re done with it.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/flutter/in-app-messages/in-app-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/in-app-messages/in-app-actions/</guid><description>How it works In-app messages often have a call to action. Most basic actions are handled automatically by the SDK. For example, if you set a call-to-action button to open a web page, the SDK will open the web page when the user taps the button.
But you can also set up custom actions that require your app to handle the response. If you set up custom actions, you’ll need to handle the action yourself and dismiss the resulting message when you’re done with it.</description></item><item><title>3.x -> 3.4</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/whats-new/update-to-3.4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/whats-new/update-to-3.4/</guid><description>Upgrade from 3.3 to 3.4+ As of version 3.4, the Customer.io SDK automatically registers push device tokens to identified people and handles push clicks. These features simplify your SDK integration while improving compatibility with apps that use multiple push SDKs.
After you install a version of the SDK that is 3.4 or higher, follow these steps to upgrade.
&amp;nbsp;Do you have a swift app? Skip ahead!
If you&amp;rsquo;ve got a Swift app containing the AppDelegate.</description></item><item><title>3.x -> 3.4</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/update-to-3.4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/update-to-3.4/</guid><description>Upgrade from 3.3 to 3.4+ As of version 3.4, the Customer.io SDK automatically registers push device tokens to identified people and handles push clicks. These features simplify your SDK integration while improving compatibility with apps that use multiple push SDKs.
After you install a version of the SDK that is 3.4 or higher, follow these steps to upgrade.
&amp;nbsp;Do you have a swift app? Skip ahead!
If you&amp;rsquo;ve got a Swift app containing the AppDelegate.</description></item><item><title>3.x -> 3.4</title><link>https://docs.customer.io/integrations/sdk/react-native/whats-new/update-to-3.4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/whats-new/update-to-3.4/</guid><description>Upgrade from 3.3 to 3.4+ As of version 3.4, the Customer.io SDK automatically registers push device tokens to identified people and handles push clicks. These features simplify your SDK integration while improving compatibility with apps that use multiple push SDKs.
After you install a version of the SDK that is 3.4 or higher, follow these steps to upgrade.
&amp;nbsp;Do you have a swift app? Skip ahead!
If you&amp;rsquo;ve got a Swift app containing the AppDelegate.</description></item><item><title>API Call Calculator</title><link>https://docs.customer.io/integrations/data-in/connections/salesforce/api-calls-simulator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/salesforce/api-calls-simulator/</guid><description>Number of records for initial sync: Number of new/updated records per sync: Sync interval: Minutes Hours Days Weeks Use Bulk API: Bulk API REST API We require one REST call at the start of each sync, to fetch the record's fields configuration. Number of API calls for initial sync For the initial sync, we fetch all data going back to the epoch (Jan 1st 1970). We break that data down into 30-day increments, and that's how we get to such a specific (and static) number here.</description></item><item><title>Canceling Your Account</title><link>https://docs.customer.io/accounts-and-workspaces/canceling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/canceling/</guid><description>We really hate to see you go, but we understand sometimes things change.
Before you part, though, we&amp;rsquo;d love it if you&amp;rsquo;d get in touch with our team and let us know if there is something we can do better. If something isn&amp;rsquo;t working right or you&amp;rsquo;re finding a feature difficult to use, we want to make it better!
How to cancel How you cancel depends on your plan type.</description></item><item><title>Change the state of a campaign</title><link>https://docs.customer.io/journeys/campaign-statuses/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/campaign-statuses/</guid><description>Campaigns can have one of four statuses:
running - active draft - inactive; all campaigns start in a draft state. stopped - inactive archived - inactive Running is the only active status. This means customers can enter your campaign and move through your workflow, which could include messages, update actions, and more. You can edit these campaigns while they&amp;rsquo;re live, but make sure you understand how live edits impact your customers.</description></item><item><title>Code editor: send Trustpilot reviews</title><link>https://docs.customer.io/journeys/bcc-trustpilot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/bcc-trustpilot/</guid><description>If you want to send Trustpilot reviews through Customer.io, you can either integrate with Zapier or follow the steps below. In this guide, you BCC Trustpilot in an email and include certain metadata, no formal integration required.
&amp;nbsp;Use the code editor
You must create the email with our code editor to ensure the metadata is not stripped from the email. Obtain your unique BCC address from Trustpilot. In Customer.io, drag an email block onto your campaign or API-triggered broadcast.</description></item><item><title>Conditions</title><link>https://docs.customer.io/journeys/action-conditions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/action-conditions/</guid><description>Click an action to edit conditions:
Hover over the condition on the action to see the details:
How they work Conditions are optional checks you can add to any message, data block, or delay in your campaign. We check the conditions before initiating the block&amp;rsquo;s action (sending a message, starting a delay timer, or sending a webhook, for instance).
If people don&amp;rsquo;t meet the conditions, they skip the action and continue through the campaign.</description></item><item><title>Double Opt-In</title><link>https://docs.customer.io/journeys/double-opt-in/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/double-opt-in/</guid><description>Introduction This document will guide you through the basics of setting up double opt-in functionality for your users. A double opt-in is a good practice to follow in order to improve your deliverability and/or comply with local laws like CASL in Canada.
Ingredients A double_optin attribute to track each person&amp;rsquo;s status A data-driven segment, either for people without the double_optin attribute or for new users depending on your strategy A segment-triggered campaign where we&amp;rsquo;ll send an email with a link people can click to opt in Another data-driven segment for people who have clicked the opt-in link link Method Create a segment to trigger the campaign First and foremost, we&amp;rsquo;ll need an attribute for each person that tracks whether or not they&amp;rsquo;ve been through the double-opt in process, and what they&amp;rsquo;ve chosen.</description></item><item><title>Drag-and-Drop Editor FAQ</title><link>https://docs.customer.io/journeys/drag-and-drop-faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/drag-and-drop-faq/</guid><description>We&amp;rsquo;ve built and tested this editor as much as we can to pick out scenarios you may want help with, but this definitely isn&amp;rsquo;t an exhaustive list! If you have a question that isn&amp;rsquo;t addressed here, please reach out and we&amp;rsquo;ll do our best to help.
Can I edit the HTML of drag-and-drop emails? This editor is built specifically to assemble emails quickly without knowledge of HTML or CSS. You can add blocks of HTML to your email, but there is no way to view all body HTML like there is with the code editor.</description></item><item><title>Getting conclusive results from A/B tests</title><link>https://docs.customer.io/journeys/conclusive-ab-results/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/conclusive-ab-results/</guid><description>For instance, how do you know that your most engaged users didn’t happen to end up getting the same variation by random chance? Calculating statistical significance is a way of determining how confident you can be that the results of a test are because one variation is more effective than the other.
Let’s take an example: If I want to test whether one email subject line causes more opens than another, and variation A has a 60% open rate and variation B has a 40% open rate, then variation A is the more successful subject line, right?</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/expo/1.x/in-app/handling-and-dismissing-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/1.x/in-app/handling-and-dismissing-actions/</guid><description>How it works In-app messages often have a call to action. Most basic actions are handled automatically by the SDK. For example, if you set a call-to-action button to open a web page, the SDK will open the web page when the user taps the button.
But you can also set up custom actions that require your app to handle the response. If you set up custom actions, you’ll need to handle the action yourself and dismiss the resulting message when you’re done with it.</description></item><item><title>In-app event listeners</title><link>https://docs.customer.io/integrations/sdk/expo/in-app-messages/handling-and-dismissing-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/in-app-messages/handling-and-dismissing-actions/</guid><description>How it works In-app messages often have a call to action. Most basic actions are handled automatically by the SDK. For example, if you set a call-to-action button to open a web page, the SDK will open the web page when the user taps the button.
But you can also set up custom actions that require your app to handle the response. If you set up custom actions, you’ll need to handle the action yourself and dismiss the resulting message when you’re done with it.</description></item><item><title>Location tracking</title><link>https://docs.customer.io/integrations/sdk/android/tracking/location/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/tracking/location/</guid><description>How it works The Location module captures location (with user consent) from your app and attaches it to a person&amp;rsquo;s profile in Customer.io. You can use this data for geo-aware messaging and audience segmentation with more accuracy than IP-based geolocation.
When you identify a person, the SDK includes the latest location in the identify call. The SDK also sends a Location Update event to the person&amp;rsquo;s activity timeline, which you can use in journeys and segments.</description></item><item><title>Location tracking</title><link>https://docs.customer.io/integrations/sdk/expo/tracking/location/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/tracking/location/</guid><description>How it works The Location module captures location (with user consent) from your app and attaches it to a person&amp;rsquo;s profile in Customer.io. You can use this data for geo-aware messaging and audience segmentation with more accuracy than IP-based geolocation.
When you identify a person, the SDK includes the latest location in the identify call. The SDK also sends a Location Update event to the person&amp;rsquo;s activity timeline, which you can use in journeys and segments.</description></item><item><title>Location tracking</title><link>https://docs.customer.io/integrations/sdk/flutter/tracking/location/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/tracking/location/</guid><description>How it works The Location module captures location (with user consent) from your app and attaches it to a person&amp;rsquo;s profile in Customer.io. You can use this data for geo-aware messaging and audience segmentation with more accuracy than IP-based geolocation.
When you identify a person, the SDK includes the latest location in the identify call. The SDK also sends a Location Update event to the person&amp;rsquo;s activity timeline, which you can use in journeys and segments.</description></item><item><title>Location tracking</title><link>https://docs.customer.io/integrations/sdk/ios/tracking/location/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/tracking/location/</guid><description>How it works The Location module captures location (with user consent) from your app and attaches it to a person&amp;rsquo;s profile in Customer.io. You can use this data for geo-aware messaging and audience segmentation with more accuracy than IP-based geolocation.
When you identify a person, the SDK includes the latest location in the identify call. The SDK also sends a Location Update event to the person&amp;rsquo;s activity timeline, which you can use in journeys and segments.</description></item><item><title>Location tracking</title><link>https://docs.customer.io/integrations/sdk/react-native/tracking/location/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/tracking/location/</guid><description>How it works The Location module captures location (with user consent) from your app and attaches it to a person&amp;rsquo;s profile in Customer.io. You can use this data for geo-aware messaging and audience segmentation with more accuracy than IP-based geolocation.
When you identify a person, the SDK includes the latest location in the identify call. The SDK also sends a Location Update event to the person&amp;rsquo;s activity timeline, which you can use in journeys and segments.</description></item><item><title>Security</title><link>https://docs.customer.io/accounts-and-workspaces/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/security/</guid><description>&amp;nbsp;See our full security policy
You can read more about our security practices on our website and download our compliance documents. Login sessions are managed via secure HTTP cookie We manage your session in Customer.io with a secure HTTP cookie. The cookie can only be read by the browser, protecting your session from unauthorized access and malicious cross-site scripting (XSS) attacks.
If you&amp;rsquo;re an admin you can set the expiration time for sessions between 1 hour and 14 days depending on your security policy.</description></item><item><title>Security Best Practices</title><link>https://docs.customer.io/accounts-and-workspaces/security-best-practices/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/security-best-practices/</guid><description>1. Do not share login credentials Add named accounts for all of the people in your team who will be collaborating on your messaging content and strategy. Customer.io allows you to add as many team members as you need - with different levels of access.
2. Limit your team to the access level they need When you add team members, you can set their permissions at the account and workspace levels.</description></item><item><title>Test push notifications</title><link>https://docs.customer.io/journeys/push-qa-testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/push-qa-testing/</guid><description>For example, if you have an iOS app, you may have a sandbox environment set up to test your push notifications before you start your campaigns. This often has the same certification credentials as your production environment. We still recommend setting up a separate test workspace with the &amp;ldquo;Send to sandbox&amp;rdquo; option turned on:
To send any type of test message, you&amp;rsquo;ll need a device token. Here&amp;rsquo;s how to find one.</description></item><item><title>Test support</title><link>https://docs.customer.io/integrations/sdk/android/2.x/test-support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/2.x/test-support/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Test support</title><link>https://docs.customer.io/integrations/sdk/android/3.x/test-support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/3.x/test-support/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> push(Receive push) identify -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Test support</title><link>https://docs.customer.io/integrations/sdk/ios/1.x/test-support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/1.x/test-support/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Test support</title><link>https://docs.customer.io/integrations/sdk/ios/2.x/test-support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/2.x/test-support/</guid><description>This page is part of a setup flow for the SDK. Before you continue, make sure you've implemented previous features—i.e. you can't receive in-app notifications before you identify people!
graph LR getting-started(Install SDK) -->B(Initialize SDK) B --> identify(identify people) identify -.-> track-events(Send events) identify -.-> register-token(Register
Device Token) register-token -.-> push(Receive push) register-token -.-> rich-push(Receive Rich Push) track-events --> test-support(Write tests) push --> test-support rich-push --> test-support identify -.-> in-app(Receive in-app) in-app --> test-support click getting-started href "</description></item><item><title>Timestamp Rules for Building Segments</title><link>https://docs.customer.io/journeys/timestamp-rules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/timestamp-rules/</guid><description>Introduction Timestamp rules aren&amp;rsquo;t always easy. You want to make sure you send opportune messages and campaigns to your users, using timestamp rules in your segments. But this process may require some deep thinking around when things happen, not just for one person but for a lot of people, and when you want your campaign to go out in relation.
To help you get going, we’ve put together a couple of quick timestamp segment recipes and explanations here, with common use cases in mind.</description></item><item><title>Use your Mandrill Account</title><link>https://docs.customer.io/journeys/triggered-lifecycle-email-with-mandrill/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/triggered-lifecycle-email-with-mandrill/</guid><description>&amp;nbsp;Mandrill is designed for transactional messages only
Mailchimp&amp;rsquo;s acceptable use policy prohibits the sending of bulk emails—emails directed to multiple individuals with the same content—through Mandrill.
You can use your Mandrill account to send email through Customer.io with no loss in functionality. To take advantage of Mandrill, you need to do two things:
Point Mandrill&amp;rsquo;s webhooks at Customer.io. Configure Mandrill as a custom SMTP server in Customer.io. Point Mandrill&amp;rsquo;s webhooks at Customer.</description></item><item><title>Use your Postmark Account</title><link>https://docs.customer.io/journeys/triggered-lifecycle-email-with-postmark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/triggered-lifecycle-email-with-postmark/</guid><description>You can use your Postmark account to send email through Customer.io with no loss in functionality. To take advantage of Postmark, you need to do two things:
Point Postmark&amp;rsquo;s webhooks at Customer.io. Configure Postmark as a custom SMTP server in Customer.io. Point Postmark&amp;rsquo;s webhooks at Customer.io Log into Postmark.
Select your server, the Message Stream you’ll be sending emails from, and then the Webhooks tab.
Click Add webhook and enter the webhook URL that corresponds to your region in the Webhook URL field.</description></item><item><title>Content Security Policy (CSP)</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/content-security-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/content-security-policy/</guid><description>A Content Security Policy (CSP) is a standard that helps you control the resources that a web browser can load on your page. If you enforce a CSP on your website, you need to allow the domains that our JavaScript client communicates with.
&amp;nbsp;If you&amp;rsquo;re using our legacy JavaScript snippet, where calls use the _cio prefix, see the legacy CSP page instead.
Standard directives US data center US data center script-src cdp.</description></item><item><title>Push metrics and message statuses</title><link>https://docs.customer.io/journeys/push-notifications-tracking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/push-notifications-tracking/</guid><description>How it works While we track the status of each individual message as it goes through Customer.io, push notifications can be trickier to track than other message channels for two main reasons:
A person can have multiple devices, and you can send a message to all of a person&amp;rsquo;s devices. When you send to All Devices, we aggregate metrics across all of a person&amp;rsquo;s devices because we (and you!) monitor engagement at a personal level, not a device level.</description></item><item><title>Update from 2.10 to 2.11</title><link>https://docs.customer.io/integrations/sdk/ios/2.x/update-210-to-211/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/2.x/update-210-to-211/</guid><description>Upgrade from 2.10 to 2.11+ As of version 2.11, the Customer.io SDK automatically registers push device tokens to identified people and automatically handles push clicks. These features let you simplify your SDK integration while also improving the reliability of device tokens and opened metrics.
After you install version 2.11 or later:
Open your AppDelegate file and review the highlighted code in the sample below. You can remove all of the highlighted code from your app.</description></item><item><title>1x -> 2.x</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/whats-new/2.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/whats-new/2.x-upgrade/</guid><description>Versioning We try to limit breaking or significant changes to major version increments. The three digits in our versioning scheme represent major, minor, and patch increments respectively.
Major: may include breaking changes, and generally introduces significant feature updates. Minor: may include new features and fixes, but won&amp;rsquo;t include breaking changes. You may still need to do some development to use new features in your app. Patch: Increments represent minor fixes that should not require development effort.</description></item><item><title>1x -> 2.x</title><link>https://docs.customer.io/integrations/sdk/ios/whats-new/2.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/whats-new/2.x-upgrade/</guid><description>Versioning We try to limit breaking or significant changes to major version increments. The three digits in our versioning scheme represent major, minor, and patch increments respectively.
Major: may include breaking changes, and generally introduces significant feature updates. Minor: may include new features and fixes, but won&amp;rsquo;t include breaking changes. You may still need to do some development to use new features in your app. Patch: Increments represent minor fixes that should not require development effort.</description></item><item><title>2.x -> 3.x</title><link>https://docs.customer.io/integrations/sdk/android/whats-new/3.x-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/whats-new/3.x-upgrade/</guid><description>Versioning We try to limit breaking or significant changes to major version increments. The three digits in our versioning scheme represent major, minor, and patch increments respectively.
Major: may include breaking changes, and generally introduces significant feature updates. Minor: may include new features and fixes, but won&amp;rsquo;t include breaking changes. You may still need to do some development to use new features in your app. Patch: Increments represent minor fixes that should not require development effort.</description></item><item><title>2.x -> 3.x</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/whats-new/update-to-3x/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/whats-new/update-to-3x/</guid><description>Versioning We try to limit breaking or significant changes to major version increments. The three digits in our versioning scheme represent major, minor, and patch increments respectively.
Major: may include breaking changes, and generally introduces significant feature updates. Minor: may include new features and fixes, but won&amp;rsquo;t include breaking changes. You may still need to do some development to use new features in your app. Patch: Increments represent minor fixes that should not require development effort.</description></item><item><title>2.x -> 3.x</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/update-to-3x/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/update-to-3x/</guid><description>Versioning We try to limit breaking or significant changes to major version increments. The three digits in our versioning scheme represent major, minor, and patch increments respectively.
Major: may include breaking changes, and generally introduces significant feature updates. Minor: may include new features and fixes, but won&amp;rsquo;t include breaking changes. You may still need to do some development to use new features in your app. Patch: Increments represent minor fixes that should not require development effort.</description></item><item><title>2.x -> 3.x</title><link>https://docs.customer.io/integrations/sdk/react-native/whats-new/update-to-3x/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/whats-new/update-to-3x/</guid><description>Versioning We try to limit breaking or significant changes to major version increments. The three digits in our versioning scheme represent major, minor, and patch increments respectively.
Major: may include breaking changes, and generally introduces significant feature updates. Minor: may include new features and fixes, but won&amp;rsquo;t include breaking changes. You may still need to do some development to use new features in your app. Patch: Increments represent minor fixes that should not require development effort.</description></item><item><title>Best practices for push notifications</title><link>https://docs.customer.io/journeys/push-best-practices/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/push-best-practices/</guid><description>1. Keep the Customer.io SDK up to date Mobile operating systems regularly change and we&amp;rsquo;re constantly improving our SDKs—both to account for changes in mobile ecosystems and to better support Customer.io features. You&amp;rsquo;ll have the best mobile experience if you keep your SDK up to date.
You can subscribe to SDKs to find out when we release new versions. Or check for updates here. Our SDKs use three version numbers in the format major.</description></item><item><title>Common fields</title><link>https://docs.customer.io/integrations/data-in/source-spec/common-fields/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/source-spec/common-fields/</guid><description>How it works When you send a call to Customer.io, we capture additional information from our libraries and information implicit in each call, like:
context for the source of your calls the ip and locale of the person the call represents timestamps that help you understand the chronology of your data The added context these common fields provide can help you debug issues with your data or add special handling in actionsThe source event and data that triggers an API call to your destination.</description></item><item><title>Content Security Policy (CSP)</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/legacy-js/content-security-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/legacy-js/content-security-policy/</guid><description>Required CSP Directives for Accounts on the US Data Center script-src assets.customer.io code.gist.build customerioforms.com &amp;#39;unsafe-inline&amp;#39; &amp;#39;unsafe-eval&amp;#39;; connect-src track.customer.io customerioforms.com *.api.gist.build *.cloud.gist.build; frame-src renderer.gist.build code.gist.build; style-src code.gist.build &amp;#39;unsafe-inline&amp;#39;; img-src track.customer.io; Required CSP Directives for Accounts on the EU Data Center script-src assets.customer.io code.gist.build eu.customerioforms.com &amp;#39;unsafe-inline&amp;#39; &amp;#39;unsafe-eval&amp;#39;; connect-src track-eu.customer.io eu.customerioforms.com *.api.gist.build *.cloud.gist.build; frame-src renderer.gist.build code.gist.build; style-src code.gist.build &amp;#39;unsafe-inline&amp;#39;; img-src track-eu.customer.io; Glossary of Directives Directive: script-src Host Description assets.customer.io Location of the Customer.io javascript file, referenced in the installation snippet.</description></item><item><title>Frequently Asked Questions</title><link>https://docs.customer.io/journeys/push-faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/push-faq/</guid><description>How do conversions work with push notifications? Conversions are attributed to the last email or message sent, opened, or clicked before the person performs an event or enters/leaves a segment defined in your conversion criteria. If you track users performing an action or entering a segment after receiving a push, then the message will be marked as converted, regardless of the device we reached them on.
What Firebase permissions does Customer.</description></item><item><title>Holdout tests</title><link>https://docs.customer.io/journeys/holdout-test/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/holdout-test/</guid><description>How it works A holdout is a type of A/B or random cohort test for email messages. But, rather than testing how your audience responds to variations of a message, some members of your audience will receive a message, and some won&amp;rsquo;t—they&amp;rsquo;re purposely &amp;ldquo;held out&amp;rdquo; of the test. This helps you determine whether a message is useful or not.
When you setup a holdout test in your campaign, you&amp;rsquo;ll determine the percentage of your audience you want to prevent from receiving a message.</description></item><item><title>Localize messages</title><link>https://docs.customer.io/journeys/localize-in-app-message/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/localize-in-app-message/</guid><description>How it works Customer.io has built-in localization features to help you deliver messages in the language your audience uses. You can send your audience translated versions of a message based on a specific attribute in Customer.io. This means that you&amp;rsquo;ll need to store language information in Customer.io.
When a customer&amp;rsquo;s language attribute matches a localized version of your message, we&amp;rsquo;ll deliver that message to them. If we don&amp;rsquo;t have a localized version of your message for a customer&amp;rsquo;s language, we&amp;rsquo;ll deliver a &amp;ldquo;default&amp;rdquo; message.</description></item><item><title>Migrate from an earlier version</title><link>https://docs.customer.io/integrations/sdk/android/2.x/migrate-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/2.x/migrate-upgrade/</guid><description>Versioning We try to limit breaking or significant changes to major version increments. The three digits in our versioning scheme represent major, minor, and patch increments respectively.
Major: may include breaking changes, and generally introduces significant feature updates. Minor: may include new features and fixes, but won&amp;rsquo;t include breaking changes. You may still need to do some development to use new features in your app. Patch: Increments represent minor fixes that should not require development effort.</description></item><item><title>Migrate from an earlier version</title><link>https://docs.customer.io/integrations/sdk/android/3.x/migrate-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/3.x/migrate-upgrade/</guid><description>Versioning We try to limit breaking or significant changes to major version increments. The three digits in our versioning scheme represent major, minor, and patch increments respectively.
Major: may include breaking changes, and generally introduces significant feature updates. Minor: may include new features and fixes, but won&amp;rsquo;t include breaking changes. You may still need to do some development to use new features in your app. Patch: Increments represent minor fixes that should not require development effort.</description></item><item><title>Migrate from an earlier version</title><link>https://docs.customer.io/integrations/sdk/ios/2.x/migrate-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/2.x/migrate-upgrade/</guid><description>Versioning We try to limit breaking or significant changes to major version increments. The three digits in our versioning scheme represent major, minor, and patch increments respectively.
Major: may include breaking changes, and generally introduces significant feature updates. Minor: may include new features and fixes, but won&amp;rsquo;t include breaking changes. You may still need to do some development to use new features in your app. Patch: Increments represent minor fixes that should not require development effort.</description></item><item><title>Migrate from an earlier version</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/updates-and-troubleshooting/migrate-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/updates-and-troubleshooting/migrate-upgrade/</guid><description>Versioning We try to limit breaking or significant changes to major version increments. The three digits in our versioning scheme represent major, minor, and patch increments respectively.
Major: may include breaking changes, and generally introduces significant feature updates. Minor: may include new features and fixes, but won&amp;rsquo;t include breaking changes. You may still need to do some development to use new features in your app. Patch: Increments represent minor fixes that should not require development effort.</description></item><item><title>Migrate from an earlier version</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/updates-and-troubleshooting/migrate-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/updates-and-troubleshooting/migrate-upgrade/</guid><description>Versioning We try to limit breaking or significant changes to major version increments. The three digits in our versioning scheme represent major, minor, and patch increments respectively.
Major: may include breaking changes, and generally introduces significant feature updates. Minor: may include new features and fixes, but won&amp;rsquo;t include breaking changes. You may still need to do some development to use new features in your app. Patch: Increments represent minor fixes that should not require development effort.</description></item><item><title>Mobile and App Store Privacy</title><link>https://docs.customer.io/accounts-and-workspaces/mobile-privacy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/mobile-privacy/</guid><description>Take immediate action before May 1, 2024 Beginning May 1, 2024, Apple&amp;rsquo;s App store requires SDKs to include a privacy manifest describing the data they collect and use. This includes Customer.io&amp;rsquo;s SDKs!
To ensure that your app meets Apple&amp;rsquo;s requirements, you must update the Customer.io SDK to a version that includes the privacy manifest. If you don&amp;rsquo;t, your app may be rejected from the App Store. Update to the following versions (or later):</description></item><item><title>Onboarding Campaign</title><link>https://docs.customer.io/journeys/onboarding-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/onboarding-campaign/</guid><description>Introduction After someone signs up for your app, the task of onboarding them begins! Show how they can get value from your app and improve your user activation and retention rates. Thoughtful onboarding email campaigns are a win for everyone.
This recipe will show you how to set up targeted drip series using segment triggered campaigns in Customer.io to keep people interested, learning, and making progress.
Ingredients Choose a specific behavioral goal that is key to your onboarding process Optional: basic knowledge of Liquid Method While you can have several onboarding campaigns for your customers, each campaign should be focused on nudging them towards a particular goal.</description></item><item><title>Privacy</title><link>https://docs.customer.io/accounts-and-workspaces/privacy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/privacy/</guid><description>Account privacy settings You&amp;rsquo;ll find information about our privacy policy and some settings related to your privacy under Settings &amp;gt; Privacy, Data, &amp;amp; AI.
Cookie settings The Performance and troubleshooting setting is enabled by default and lets us use cookies within fly.customer.io that help us track activity that we can use to troubleshoot issues in your account and workspaces. You can disable these cookies, but it may hamper our ability to troubleshoot problems you might have.</description></item><item><title>Proxying the JavaScript client</title><link>https://docs.customer.io/integrations/data-in/connections/javascript/js-source-proxy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/javascript/js-source-proxy/</guid><description>How it works When you load Analytics.js on your site, the script makes requests to Customer.io to load the library and to send calls. You can proxy these requests through your own domain, making all Customer.io requests look like first-party requests to your own domain. This can help you avoid problems with ad blockers or firewalls that don&amp;rsquo;t play nicely with third-party domains or requests.
This page shows how to set up a custom domain that proxies to cdp.</description></item><item><title>Respecting your users' privacy</title><link>https://docs.customer.io/accounts-and-workspaces/user-privacy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/user-privacy/</guid><description>Cookies (when using our JavaScript libraries) Our two client-side JavaScript libraries both use cookies that make it easier to recognize your audience and use them across calls to Customer.io.
Journeys JavaScript SDK The Journeys Web SDK sets cookies to determine whether someone is anonymous or identified. These cookies do not contain any personally identifiable information (PII).
_cioanonid: contains an anonymous ID that the tracking snippet sets automatically on a person who has not been identified yet.</description></item><item><title>Searching and filtering people</title><link>https://docs.customer.io/journeys/filter-search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/filter-search/</guid><description>By email If you&amp;rsquo;d like to find a person by their email address, you can do so via the input box at the top of the page:
If you remember what the user&amp;rsquo;s email starts with, enter it here and then click to search. Searching for tweety, for example, would return results like:
tweety@acmecorp.com tweety.bird@acmecorp.com tweety@acme.com tweetyandsylvester@gmail.com &amp;nbsp;This will not return email addresses that contain your search term somewhere in the middle.</description></item><item><title>Troubleshooting mobile issues</title><link>https://docs.customer.io/journeys/troubleshooting-mobile/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/troubleshooting-mobile/</guid><description>&amp;nbsp;This page is focused on our SDKs
If you&amp;rsquo;ve written your own mobile integration with Customer.io, we may not be able to troubleshoot your app. Before you contact Customer.io Support If you&amp;rsquo;re having trouble with push notifications and in-app messages, there are a few things you can do to troubleshoot the problem before you contact Customer.io Support. These are common troubleshooting tips that are likely to fix your problem—and are the starting point for most of our SDK-related support conversations.</description></item><item><title>Troubleshooting Your Drag-and-Drop Emails</title><link>https://docs.customer.io/journeys/troubleshooting-email-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/troubleshooting-email-design/</guid><description>Errors in email content We&amp;rsquo;ll let you know of any errors in your email content in the buttons at the top of the editor. If there are none, the buttons look like this.
If there are problems, though, the button will change to &amp;ldquo;Review Errors&amp;rdquo; and animate to get your attention!
Click Review Errors to see a pop-up window describing the error(s):
Learn more about errors you could encounter while composing an email.</description></item><item><title>Two-Factor Authentication</title><link>https://docs.customer.io/accounts-and-workspaces/two-factor-auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/two-factor-auth/</guid><description>What is two-factor authentication? Two-Factor Authentication (2FA) is an additional layer of security on your Customer.io account. By default, we require you verify your login attempt through a magic link sent to your email. You can alternatively enable 2FA through an authentication app.
Why do you need it? If your regular password is ever compromised or stolen, 2FA ensures that only you can log into your account because only you have the magic link or authentication code.</description></item><item><title>Update iOS</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/updates-and-troubleshooting/migrate-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/updates-and-troubleshooting/migrate-upgrade/</guid><description>Upgrade native iOS SDK to 2.11+ As of version 2.11, the native iOS Customer.io SDK automatically handles push clicks. These features simplify your SDK integration while improving the reliability of opened metrics tracking and increasing compatibility with other push modules you may have installed in your app.
Follow our native iOS update guide to update the Flutter and iOS SDK to use the latest version.
Open your AppDelegate file and review all of the highlighted code below in this sample.</description></item><item><title>Update to version 3.4</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/updates-and-troubleshooting/update-to-3.4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/updates-and-troubleshooting/update-to-3.4/</guid><description>Upgrade from 3.3 to 3.4+ As of version 3.4, the Customer.io SDK automatically registers push device tokens to identified people and handles push clicks. These features simplify your SDK integration while improving compatibility with apps that use multiple push SDKs.
After you install a version of the SDK that is 3.4 or higher, follow these steps to upgrade.
&amp;nbsp;Do you have a swift app? Skip ahead!
If you&amp;rsquo;ve got a Swift app containing the AppDelegate.</description></item><item><title>Use your SendGrid Account</title><link>https://docs.customer.io/journeys/triggered-lifecycle-email-with-sendgrid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/triggered-lifecycle-email-with-sendgrid/</guid><description>You can use your SendGrid account to send email through Customer.io with no loss in functionality. To take advantage of SendGrid, you need to do two things:
Point SendGrid&amp;rsquo;s webhooks at Customer.io. Configure SendGrid as a custom SMTP server in Customer.io. Point SendGrid&amp;rsquo;s event API at Customer.io Now you&amp;rsquo;ll need to adjust some settings to make sure your SendGrid account (or subuser) sends Customer.io the right data.
Go to Sendgrid. If you have a subuser for sends through Customer.</description></item><item><title>Why don't people match 'within the past X days' conditions?</title><link>https://docs.customer.io/journeys/past-x-days-help/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/past-x-days-help/</guid><description>Using “within the past X days” to check whether people have or haven&amp;rsquo;t done certain actions within a certain time can sometimes be tricky, due to how we store data in Customer.io.
An example Check out this segment, which aims to identify people who have not made a purchase in the last seven days:
What you need to know To match, people must have existed in Customer.io for at least seven days.</description></item><item><title>A/B tests</title><link>https://docs.customer.io/journeys/a-b-test-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/a-b-test-campaigns/</guid><description>You can test multiple messages in every triggered campaign, though we do recommend sticking to making just one change in your variation. This allows you to get an accurate picture of how that change measures up against the original without being confused by other data points.
How do I set up an A/B test? For either email, Push, or SMS messages, this process is the same. First things first, you&amp;rsquo;ll want to head to the campaign where you want to run your test, and create the type of message you want to test—email or push notification.</description></item><item><title>Copy workflow items</title><link>https://docs.customer.io/journeys/copying-workflow-items/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/copying-workflow-items/</guid><description>&amp;nbsp;To copy a workflow AND campaign settings, copy the campaign instead!
You can duplicate a campaign from the campaigns page or an individual campaign. Copy items from another workflow When you copy items from another workflow, not all of the copied items&amp;rsquo; settings carry over to the destination workflow. For instance, if you copy a Create or Update Person action that references trigger data from another campaign, the same logic might not work in the current campaign depending on its trigger.</description></item><item><title>In-App FAQ</title><link>https://docs.customer.io/journeys/in-app-faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/in-app-faq/</guid><description>Can I stop an in-app message after it&amp;rsquo;s sent? In most cases, you can&amp;rsquo;t stop messages after they&amp;rsquo;re Sent. You&amp;rsquo;ll want to set an Expiration period for your messages to make sure that your messages expire when they&amp;rsquo;re no longer useful.
However, if you&amp;rsquo;re willing to stop a campaign, you can use the Exit Immediately option to cancel in-app messages that have been sent but not opened. Note that stopping messages in this way only works for in-app messages.</description></item><item><title>Date and Time Data in Customer.io</title><link>https://docs.customer.io/accounts-and-workspaces/datetime-displays/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/datetime-displays/</guid><description>Overview Throughout Customer.io, we try to give you as much insight as we can into what happens and when. We know that timing of messages is critical, so we want to make sure you know exactly when your messages are sent or drafted, for example, or when a particular user was created.
We use your computer&amp;rsquo;s current time zone for all times, with a few exceptions:
In exports, we use Coordinated Universal Time (UTC) timestamps.</description></item><item><title>Email code editor</title><link>https://docs.customer.io/journeys/email-code-editor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/email-code-editor/</guid><description>&amp;nbsp;Check out Design Studio!
Design Studio is our newest, most flexible email editor. Use components to create a block-based email from scratch, and set global styles to create a consistent brand across your messages made in Design Studio. No longer do you have to decide between a visual or code-based editor; you can use both! How it works When you create an email, you can pick the Code option to write your own HTML.</description></item><item><title>Export a person's data</title><link>https://docs.customer.io/journeys/single-user-export/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/single-user-export/</guid><description>Need to export all data associated with a single person? No problem!
&amp;nbsp;Exports will include all attribute and event data for the selected profiles. If this includes sensitive data, you must purge that data before passing it to customers. Export data for a person Head to the individual Person page for the end-user whose data you need to export, and select the &amp;lsquo;Export Profile Data’ option in the dropdown:
This will export all of the data that we have for a specific end-user.</description></item><item><title>Optimize emails with Just Words</title><link>https://docs.customer.io/journeys/just-words/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/just-words/</guid><description>How it works Just Words lets you test many variations in one experiment and auto-refresh underperforming content automatically. You&amp;rsquo;ll create a campaign with an email in Customer.io and connect it to a template in Just Words. Then Just Words will automatically ingest data from Customer.io and update the template with the best performing variation(s).
As a part of this process, you&amp;rsquo;ll add a random cohort branch to a campaign with two paths.</description></item><item><title>Single Sign-on (SSO)</title><link>https://docs.customer.io/accounts-and-workspaces/login-with-sso/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/login-with-sso/</guid><description>&amp;nbsp;To enable/disable SSO for your account, you must be an Account Admin.
How to set up SSO The process for configuring SSO will depend on your specific identity provider (IdP). Customer.io has dedicated integrations with the following providers and protocols:
SSO with Google for organizations SSO with Google for consumers SSO with Okta—see SSO with SAML 2.0 for another option SSO with Microsoft Entra SSO with OpenID SSO—works with a variety of providers SSO with SAML 2.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/android/3.x/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/3.x/troubleshooting/</guid><description>Basic troubleshooting steps Make sure your app meets our prerequisites: Attempting to use our SDK in an environment that doesn&amp;rsquo;t match our supported versions may result in build errors. Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/android/getting-started/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/getting-started/troubleshooting/</guid><description>Basic troubleshooting steps Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with troubleshooting your implementation, including problems with push and in-app notifications. See Use our MCP server to troubleshoot your implementation below.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/expo/1.x/updates-and-troubleshooting/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/1.x/updates-and-troubleshooting/troubleshooting/</guid><description>Basic troubleshooting steps Make sure your app meets our prerequisites: Attempting to use our SDK in an environment that doesn&amp;rsquo;t match our supported versions may result in build errors. Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/expo/getting-started/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/getting-started/troubleshooting/</guid><description>Basic troubleshooting steps Make sure your app meets our prerequisites: Attempting to use our SDK in an environment that doesn&amp;rsquo;t match our supported versions may result in build errors. Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/updates-and-troubleshooting/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/updates-and-troubleshooting/troubleshooting/</guid><description>Basic troubleshooting steps Make sure your app meets our prerequisites: Attempting to use our SDK in an environment that doesn&amp;rsquo;t match our supported versions may result in build errors. Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/getting-started/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/getting-started/troubleshooting/</guid><description>Basic troubleshooting steps Make sure your app meets our prerequisites: Attempting to use our SDK in an environment that doesn&amp;rsquo;t match our supported versions may result in build errors. Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/flutter/getting-started/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/getting-started/troubleshooting/</guid><description>Basic troubleshooting steps Make sure your app meets our prerequisites: Attempting to use our SDK in an environment that doesn&amp;rsquo;t match our supported versions may result in build errors. Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/ios/2.x/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/2.x/troubleshooting/</guid><description>Basic troubleshooting steps Make sure your app meets our prerequisites: Attempting to use our SDK in an environment that doesn&amp;rsquo;t match our supported versions may result in build errors. Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/getting-started/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/getting-started/troubleshooting/</guid><description>Basic troubleshooting steps Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications. See Use our MCP server to troubleshoot your implementation below.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/ios/getting-started/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/getting-started/troubleshooting/</guid><description>Basic troubleshooting steps Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications. See Use our MCP server to troubleshoot your implementation below.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/updates-and-troubleshooting/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/updates-and-troubleshooting/troubleshooting/</guid><description>Basic troubleshooting steps Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications. See Use our MCP server to troubleshoot your implementation below.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/updates-and-troubleshooting/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/updates-and-troubleshooting/troubleshooting/</guid><description>Basic troubleshooting steps Make sure your app meets our prerequisites: Attempting to use our SDK in an environment that doesn&amp;rsquo;t match our supported versions may result in build errors. Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/getting-started/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/getting-started/troubleshooting/</guid><description>Basic troubleshooting steps Make sure your app meets our prerequisites: Attempting to use our SDK in an environment that doesn&amp;rsquo;t match our supported versions may result in build errors. Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/getting-started/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/getting-started/troubleshooting/</guid><description>Basic troubleshooting steps Make sure your app meets our prerequisites: Attempting to use our SDK in an environment that doesn&amp;rsquo;t match our supported versions may result in build errors. Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications.</description></item><item><title>Troubleshooting</title><link>https://docs.customer.io/integrations/sdk/react-native/getting-started/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/getting-started/troubleshooting/</guid><description>Basic troubleshooting steps Make sure your app meets our prerequisites: Attempting to use our SDK in an environment that doesn&amp;rsquo;t match our supported versions may result in build errors. Update to the latest version: When troubleshooting problems with our SDKs, we generally recommend that you try updating to the latest version. That helps us weed out issues that might have been seen in previous versions of the SDK. Try running our MCP server: Our MCP server includes an integration tool that can provide immediate help with your implementation, including problems with push and in-app notifications.</description></item><item><title>Use your Sparkpost Account</title><link>https://docs.customer.io/journeys/triggered-lifecycle-email-with-sparkpost/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/triggered-lifecycle-email-with-sparkpost/</guid><description>You can use your Sparkpost account to send email through Customer.io with no loss in functionality. To take advantage of Sparkpost, you need to do two things:
Point Sparkpost&amp;rsquo;s webhooks at Customer.io. Configure Sparkpost as a custom SMTP server in Customer.io. Point Sparkpost&amp;rsquo;s webhooks at Customer.io Go to Sparkpost&amp;rsquo;s webhooks page.
Enter the webhook URL corresponding to your Customer.io account region for every domain you want to send email from in Customer.</description></item><item><title>Validate Mobile Phone Numbers</title><link>https://docs.customer.io/journeys/validate-mobile-phone-numbers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/validate-mobile-phone-numbers/</guid><description>You can solve this problem using Twilio&amp;rsquo;s lookup API, to people&amp;rsquo;s phone numbers, carriers, and line types (like mobile, landline, or VoIP) and make sure that you only send SMS and WhatsApp messages to valid recipients! This can help you prevent bounces, and filter out undeliverable messages.
As a part of this recipe, you&amp;rsquo;ll:
Create a segment to capture all people with a phone attribute. Send people in this segment through a campaign that calls Twilio&amp;rsquo;s lookup API.</description></item><item><title>AMP for email</title><link>https://docs.customer.io/journeys/amp-for-email/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/amp-for-email/</guid><description>You can craft AMP components directly in the code editor of Design Studio or in the advanced code editor. Send test emails to ensure those with the ability to view dynamic content, and those without, will see what you expect. You also have the option to send AMP content through our App API.
Requirements for sending and receiving AMP content To send an AMP message, you need to send from a domain that:</description></item><item><title>Account Regions (US and EU)</title><link>https://docs.customer.io/accounts-and-workspaces/data-centers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/data-centers/</guid><description>We ensure that all of your customers&amp;rsquo; data is stored in the region that you choose. So, if you select the EU region, all of the information about your customers, known as People, is stored exclusively in data centers within EU member countries.
You cannot have workspaces in different regions. All customer data in your account—all of your workspaces—resides within the region you select when you set up your account.</description></item><item><title>Case sensitivity and your data</title><link>https://docs.customer.io/accounts-and-workspaces/case-sensitivity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/case-sensitivity/</guid><description>When is data case sensitive? AttributeA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc. Use attributes to target people and personalize messages. names are always case sensitive. You can save both first_name and First_Name to a profile; those fields will not merge together. This is also the case for reserved attributes like timezone and unsubscribed.</description></item><item><title>Enable experimental features</title><link>https://docs.customer.io/accounts-and-workspaces/beta-experimental-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/beta-experimental-features/</guid><description>How it works We aim to release features early and often. Sometimes when we release new features, we&amp;rsquo;ll mark them as beta or experimental. In both cases, we think the features are stable and ready to use (though we can&amp;rsquo;t say that they&amp;rsquo;re bug-free), but we want your feedback!
Beta features are early releases of a features we&amp;rsquo;re actively working on. In general, we think beta releases are stable but they may not solve all the problems we want them to, or—in the case of our SDKs—may need scaled testing.</description></item><item><title>Export data for multiple people</title><link>https://docs.customer.io/journeys/exporting-users/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/exporting-users/</guid><description>There are a few ways for you to export people data from the People page in Customer.io. You can&amp;hellip;
Export all your users and all their data Export all your users, but only with specific attributes Export a set of users who meet certain conditions — with all of their attributes, or a specific set &amp;nbsp;Exports will include all attribute data for the selected profiles. If this includes sensitive data, you must purge that data before passing it to customers.</description></item><item><title>Grace periods</title><link>https://docs.customer.io/journeys/grace-periods/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/grace-periods/</guid><description>Overview You may notice a grace period when viewing a person&amp;rsquo;s journey. A grace period is a period of time people may wait to enter a campaign.
Historically, a grace period was also a period of time people might wait to exit your campaign. Grace periods were available across multiple campaign types and could impact people entering or exiting a campaign.
Now, they only impact people who enter campaigns with our legacy segment trigger.</description></item><item><title>Trial expiration reminders</title><link>https://docs.customer.io/journeys/trial-expiration-reminders/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/trial-expiration-reminders/</guid><description>Introduction Sending emails to remind people that their trial is ending is simply good customer service. Don’t put the burden on them to remember. The benefit is that it brings you back to front of mind as the clock starts ticking and can help nudge upgrades to happen sooner rather than later.
In this recipe, you’ll learn how to use a trial expiry date to trigger a campaign with 3 emails.</description></item><item><title>Use your Oracle Dyn Account</title><link>https://docs.customer.io/journeys/triggered-lifecycle-email-with-oracle-dyn/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/triggered-lifecycle-email-with-oracle-dyn/</guid><description>You can use your Oracle Dyn account to send email through Customer.io with no loss in functionality. To take advantage of Oracle Dyn, you need to do two things:
Point Oracle Dyn&amp;rsquo;s webhooks at Customer.io. Configure Oracle Dyn as a custom SMTP server in Customer.io. Point Oracle Dyn&amp;rsquo;s webhooks at Customer.io Go to the Oracle Dyn Integrations page.
Add the following webhook URLs for every domain you want to send mail from in Customer.</description></item><item><title>Search your workspace</title><link>https://docs.customer.io/accounts-and-workspaces/workspace-search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/workspace-search/</guid><description>Press ⌘K on Mac or CtrlK on Windows and Linux to open the search dialog from anywhere in your workspace.
&amp;nbsp;Universal search is independent of the Customer.io AI toggle in your Privacy, Data, &amp;amp; AI settings. Disabling Customer.io AI doesn&amp;rsquo;t affect universal search.
What you can search for The universal search feature cannot search for people or their data. It only searches workspace configuration—the names and content of things you&amp;rsquo;ve built in Customer.</description></item><item><title>Customer.io Security Qualifications</title><link>https://docs.customer.io/accounts-and-workspaces/security-certifications/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/security-certifications/</guid><description>The certifications we&amp;rsquo;ve earned are the result of independent, third-party audits that verify our compliance with (and commitment to) industry standards and best practices.
&amp;nbsp;See our full security policy
You can read more about our security practices on our website and download our compliance documents. ISO 27001 certification Customer.io is certified for ISO 27001 compliance as of September 24, 2024. Our certification expires September 24, 2027. See our certificate.
ISO 27001 is an international standard for information security management systems (ISMS).</description></item><item><title>JavaScript integration demo</title><link>https://docs.customer.io/integrations/getting-started/demo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/getting-started/demo/</guid><description>Add your API Key (found in your integration&amp;rsquo;s Settings tab). Then you can tailor and send calls to Customer.io. Requests that you make before you identify someone are anonymous. After you send an identify call with a userId, future requests are associated with the identified person. See our JavaScript and API docs for a complete payload reference.
&amp;nbsp;Clear your cookies and local storage to start fresh
Our JavaScript snippet stores data in cookies and falls back to local storage.</description></item><item><title>Plan Features</title><link>https://docs.customer.io/accounts-and-workspaces/plan-features/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/accounts-and-workspaces/plan-features/</guid><description>How it works Customer.io offers 3 plans: Essentials, Premium, and Enterprise.
You&amp;rsquo;ll find a detailed list of the differences between plans on our pricing page, but your plan determines whether or not you can use some features in the system. These are typically advanced features that take more resources to support (in terms of storage, processing, and people).
General features Feature Essentials Premium Enterprise Description Extra workspaces2 Unlimited UnlimitedWorkspaces hold your people, campaigns, etc.</description></item><item><title>Send from a personal support rep</title><link>https://docs.customer.io/journeys/assign-a-personal-support-rep/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/assign-a-personal-support-rep/</guid><description>Introduction Onboarding is hard to get right. You want to show off the benefits of your app at a large scale while creating a personal touchpoint.
Many of our customers introduce a dedicated customer support person to their end user as soon as they sign up. The new user can then reach out directly with any concerns or questions. This way, end users know that they’re getting one-to-one attention from the start, and that someone will be there to help them as they discover the app.</description></item><item><title>Adding a view in browser link</title><link>https://docs.customer.io/journeys/view-in-browser/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/view-in-browser/</guid><description>&amp;ldquo;View in browser&amp;rdquo; links let your audience view a web-hosted version of your email in their browser. If you have an image-heavy email, worry about display issues in specific email clients, or simply want to give your audience the option to view your email outside of their inbox, you can add a link that generates a web version of the email personalized for each recipient.
&amp;nbsp;Email only — and public</description></item><item><title>Filter Activity Logs</title><link>https://docs.customer.io/journeys/filtering-logs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/filtering-logs/</guid><description>In the Activity Log, you can track which activities people and objectsAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course. have performed. This can help you ensure you&amp;rsquo;re receiving certain events, troubleshoot people across a similar activity, and more.
&amp;nbsp;The Activity Log shows activities processed within the last 30 days.
This article is about your workspace-wide activity logs. You can also find activity logs for each of your customers within their profile page.</description></item><item><title>Find messages using the Message Library</title><link>https://docs.customer.io/journeys/message-library/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/message-library/</guid><description>Go to Content &amp;gt; Message Library to see a list of all the messages in your workspace and their current status. You can search for messages by name, subject, content, or from address. You can sort messages based on when they were last updated. Click to switch between ascending and descending sorting.
Click any message in the list to go directly to the message. From here, you can edit your message or edit settings in the campaign or broadcast containing the message.</description></item><item><title>Setting Up Segments for Specific Purposes</title><link>https://docs.customer.io/journeys/creating-segments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/creating-segments/</guid><description>Ingredients Integration with Customer.io A knowledge of the attributes you’re sending to us We’ll start with a basic segment, just to get you familiar with creating a segment in Customer.io, and then ramp up the complexity. So head on to the Segments builder and let’s get started!
Basic: target users who clicked a link You can use data-driven segments to track users who clicked a specific link in your messages. First, check to see if URL parameters are enabled in your workspace.</description></item><item><title>Assets library: store files</title><link>https://docs.customer.io/journeys/asset-library/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/asset-library/</guid><description>How it works Any images you upload are stored in your Assets page.
You can upload images in bmp, jpeg, png, and gif formats. You can store PDFs that you then link to from a message. File size limits You can upload images and PDFs to your Assets library, but limits apply:
Maximum image width and height: 4096 px Files must be smaller than 2 MB. For optimal loading times, we recommend that you upload images smaller than 1 MB.</description></item><item><title>How do I add an avatar/logo to my emails?</title><link>https://docs.customer.io/journeys/adding-sender-image/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/adding-sender-image/</guid><description>By default, that image people see next to your email in their inbox will be the first character of your company&amp;rsquo;s name.
Occasionally we get asked how to add a logo so that it will appear next to your email messages in the end-user&amp;rsquo;s inbox instead. Unfortunately, this is not something you (or we) control exclusively as part of the email sending process but rather it is determined by the recipient&amp;rsquo;s inbox provider or email client.</description></item><item><title>Image requirements</title><link>https://docs.customer.io/journeys/image-support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/image-support/</guid><description>General image and media guidelines This page provides some guidance about the maximum file sizes and types supported by our Assets library and various platforms. However, you generally want to limit the size of your images to the smallest possible file sizes.
While some messages support larger file sizes, it&amp;rsquo;s best to limit file size to reduce load time. A person viewing your message on their phone using cell service, for instance, might have trouble loading messages with large images or attachments.</description></item><item><title>Cohort tests</title><link>https://docs.customer.io/journeys/cohort-testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/cohort-testing/</guid><description>Cohort testing is great for things like:
Testing timing: different delay times before sending a message Single vs multi-touch: sending a user one email vs. several emails Blackhole/holdout testing: where you want to send a message or no message at all. Check out our recipe specifically for holdout tests. Ingredients You&amp;rsquo;ll need:
A basic understanding of liquid The ability to create campaigns If you decide to assign cohorts via API, you&amp;rsquo;ll also need:</description></item><item><title>Using your Data Index</title><link>https://docs.customer.io/journeys/using-data-index/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/using-data-index/</guid><description>Why use the Data Index The Data Index is useful for things like:
Troubleshooting: Are your campaigns behaving strangely? Check the Data Index to see if a particular event is being sent multiple times or if it&amp;rsquo;s being used by multiple campaigns. Data clean-up: Data gets messy sometimes. Check if your attributes or events are similarly named or near-duplicates and clean your data accordingly. Visibility and clarity: Determine if a piece of data you need for a campaign is already being sent to Customer.</description></item><item><title>How do I know what data I have available?</title><link>https://docs.customer.io/journeys/data-availability/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/data-availability/</guid><description>Here, you&amp;rsquo;ll find all of the attributes and events flowing into your Customer.io account via your chosen integration method. You can see:
All of the events and attributes you have Where they&amp;rsquo;re being used (segments, campaigns) How they&amp;rsquo;re being used (as a trigger, filter, or Action Condition) For events, the data associated with each and when it was last seen For attributes, we list all of the attributes you have for your users, and when each was last changed or added Head over to the Data Index introduction for more details on how to navigate; otherwise, feel free to explore!</description></item><item><title>Queue Draft for Campaign QA</title><link>https://docs.customer.io/journeys/queue-as-draft/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/queue-as-draft/</guid><description>In most ESPs you’re either &amp;ldquo;building&amp;rdquo; your email campaign or &amp;ldquo;sending&amp;rdquo; it. This means that once you hit &amp;ldquo;Start campaign&amp;rdquo;, your messages go live and you can only catch errors afterwards.
Customer.io takes a different approach with a feature called Queue Draft, which enables you to start campaigns and generate drafts of messages without sending them. Think of this as a dry-run for your campaigns. You get to see who would have received what message when before actually going live.</description></item><item><title>How do I create multiple subscription types?</title><link>https://docs.customer.io/journeys/multiple-subscription-types/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/multiple-subscription-types/</guid><description>&amp;nbsp;Customer.io now has a subscription center!
Our subscription center lets you manage multiple subscription topics and set subscription-based audiences for campaigns and broadcasts. If, however, the options in this article better serve your use case, please let us know so we can continue to improve our product. Here are three tracking subscription preferences:
Use our subscription center! Custom unsubscribe links: This method lets you segment based on people who have clicked a link that represents unsubscribing.</description></item><item><title>Set Custom Email Headers</title><link>https://docs.customer.io/journeys/custom-mail-headers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/custom-mail-headers/</guid><description>For example:
Set the X-Mailgun-Tag header if you&amp;rsquo;re using Mailgun&amp;rsquo;s &amp;ldquo;Topic&amp;rdquo; subscription functionality Set your own List-Unsubscribe header for specific emails (if you use our unsubscribe link, we add this header automatically) Stop emails from being shown as a thread by Gmail with the X-Entity-Ref-ID header Use X-Auto-Response-Suppress:OOF to suppress auto-replies from Exchange servers Adding, editing, and removing custom headers You&amp;rsquo;ll find the custom headers option in the email composer. Add them by clicking the Add Custom link to the right of the Headers:</description></item><item><title>Shortcuts to external services</title><link>https://docs.customer.io/journeys/people-shortcuts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/people-shortcuts/</guid><description>You&amp;rsquo;ll find the Shortcuts button on the upper-right corner of any person&amp;rsquo;s page in your workspace. Go to People and select a person to add or use shortcuts.
Add a shortcut &amp;nbsp;Customize links with liquid
Though you add a shortcut from an individual person&amp;rsquo;s page in Customer.io, your shortcut will appear on every person&amp;rsquo;s page in your workspace. You should use liquidA syntax that supports variables, letting you personalize messages for your audience.</description></item><item><title>Trigger campaigns based on Roles</title><link>https://docs.customer.io/journeys/role-based-messaging-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/role-based-messaging-campaign/</guid><description>Method Determine how you&amp;rsquo;re storing data in Customer.io. This will determine the type of campaign you should make.
Are you storing role information on people as profile attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc. Use attributes to target people and personalize messages.? Or are you storing role information on people&amp;rsquo;s relationshipsThe connection between an object and a person in your workspace.</description></item><item><title>RSS Feed Email Campaign</title><link>https://docs.customer.io/journeys/rss-feed-email-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/rss-feed-email-campaign/</guid><description>Introduction With an RSS Feed Email Campaign, you can send new posts to your audience whenever you publish content. This makes use of our API Triggered Broadcast campaigns and a Zapier workflow.
Ingredients Zapier account publicly accessible RSS Feed URL Method Create an API Triggered Broadcast Campaign Learn how in our guide for API Triggered Broadcasts.
Set up Zapier Workflow For those of you new to Zapier, it&amp;rsquo;s a handy tool that helps you connect your apps and automate workflows.</description></item><item><title>Set custom preheader/preview text</title><link>https://docs.customer.io/journeys/custom-preheader-text/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/custom-preheader-text/</guid><description>Normally, this preview is pulled from the first text in your email. This is OK if your content starts right away, and is short enough for a summary. However, if that isn&amp;rsquo;t the case, you might have text like &amp;lsquo;Is this email not displaying correctly?&amp;rsquo; taking up valuable inbox real estate that could be used to incentivise opens instead!
In Customer.io, you can control exactly what text will appear in this preview for an email— to avoid situations like the one mentioned above.</description></item><item><title>mParticle (Legacy)</title><link>https://docs.customer.io/integrations/data-in/connections/cdps/integrating-with-mparticle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/cdps/integrating-with-mparticle/</guid><description>Send Events to Customer.io Send event data to Customer.io by setting up Customer.io as an Event Output in mParticle. From the mParticle activity overview screen select Setup &amp;gt; Outputs &amp;gt; Event &amp;gt; Add Event Output and select or search for Customer.io from the dropdown list.
Next navigate to the Customer.io workspace you’d like to send your data to. From the main dashboard select &amp;gt; Integrations &amp;gt; Customer.io API (Settings). Here you will find your Site ID and API Key.</description></item><item><title>HTTPS Link Tracking</title><link>https://docs.customer.io/journeys/track-https-links/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/track-https-links/</guid><description>How it works We generated a unique URL for any link you track. This link proxies through our link tracking domain and then to the ultimate destination. That&amp;rsquo;s how we track clicks!
But for HTTPS link tracking, we need to use a valid SSL certificate to prove that the proxy is secure—so that your audience, browsers, and any security software understands that the link is safe.
In this case, we&amp;rsquo;ll generate a record you can add to your DNS provider that points to our link tracking domain and we&amp;rsquo;ll generate a valid SSL certificate for you.</description></item><item><title>Invalid Track API Requests</title><link>https://docs.customer.io/integrations/data-in/connections/classic-api/invalid-api-requests/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/data-in/connections/classic-api/invalid-api-requests/</guid><description>{ &amp;#34;meta&amp;#34;: { &amp;#34;error&amp;#34;: &amp;#34;name cannot be blank&amp;#34; } } &amp;nbsp;We strongly encourage you to implement some logging on your end to capture our responses to any invalid API requests your integration may send by mistake. This will give you something to look back on when you get notifications from our team about such errors. Common Error Messages What you see below is the list of error messages shown when API calls are rejected due to limits mentioned in our API documentation.</description></item><item><title>What does the Fake BCC option do?</title><link>https://docs.customer.io/journeys/fake-bcc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/fake-bcc/</guid><description>&amp;ldquo;Fake Bcc&amp;rdquo; is an option available when you&amp;rsquo;re adding a Bcc address to your campaigns. It&amp;rsquo;s checked by default.
If this option is checked, rather than sending a true Bcc, we&amp;rsquo;ll send you a separate copy of the email (with a slightly modified subject line containing the user’s email address). This allows you to be copied on emails and open them and click links without worrying about affecting the user’s history.</description></item><item><title>Create multiple from addresses</title><link>https://docs.customer.io/journeys/multiple-from-addresses/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/multiple-from-addresses/</guid><description>Add multiple from addresses To add a new from address:
Go to Settings &amp;gt; Workspace Settings and select Email. Find the sending domain you want to add the new address to and click Add from address. Enter the sender name and email address. After you add a new from address and the domain is verified, you can pick your new address using the drop-down next to the From label when creating an email.</description></item><item><title>Message Statuses</title><link>https://docs.customer.io/journeys/message-statuses/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/message-statuses/</guid><description>We also aggregate these statuses as metrics, so you know not only how well a message performed with an individual person, but how well it was received by your audience at large.
This page is designed to help you understand the various states your messages progress through, and how we display those states in different areas of Customer.io.
Status vs. Metric A Message Status explains the state of an individual delivery (the instance of a message intended for an individual) or journey (the instance of a campaign that a person travels through).</description></item><item><title>Legacy in-app editor</title><link>https://docs.customer.io/journeys/legacy-in-app-editor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/legacy-in-app-editor/</guid><description>&amp;nbsp;The legacy in-app editor is deprecated
You will not be able to create new messages in the legacy editor after October 1, 2025. We&amp;rsquo;re sunsetting the legacy in-app editor January 31, 2026. If you haven&amp;rsquo;t made the switch yet, now&amp;rsquo;s the perfect time to start using the new in-app editor, designed to help you build better in-app experiences.
How it works In-app message templates built in our older template editor include all of your message content, including the text areas you can customize when you create a message in Customer.</description></item><item><title>Messages in multiple languages</title><link>https://docs.customer.io/journeys/localization-i18n/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/localization-i18n/</guid><description>&amp;nbsp;Try our new Language Settings instead!
These instructions predate our new localizationA process of setting up messages with two or more languages, and using your workspace’s Language Settings to make sure that people in your audience receive messages in their preferred language. feature, which helps you send messages in multiple languages without complicated conditions or 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.</description></item><item><title>Deliveries &amp; Drafts data</title><link>https://docs.customer.io/journeys/deliveries-drafts-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/deliveries-drafts-data/</guid><description>To view deliveries or drafts over a specific time period:
Select Deliveries &amp;amp; Drafts from the left hand menu. Select either the Deliveries or Drafts tab. Filter for messages across any and all channels (email, in-app, etc). For delivered messages, you can search by status (sent, failed, attempted, etc), too. Click a message to view the message body and supporting data, such as the campaign it belongs to. Export to CSV To export deliveries or drafts over time:</description></item><item><title>Geolocation and time zone data</title><link>https://docs.customer.io/journeys/geolocation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/geolocation/</guid><description>How it works Customer.io determines a person&amp;rsquo;s location from two possible sources:
IP-based geolocation: We infer location from IP addresses. This happens automatically when you identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.</description></item><item><title>Recommended send time</title><link>https://docs.customer.io/journeys/recommended-send-time/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/recommended-send-time/</guid><description>&amp;nbsp;Is Customer.io AI enabled?
You need to enable Customer.io AI in your Data &amp;amp; Privacy settings to use this feature—if you haven&amp;rsquo;t already. See our AI overview to learn more about how you can use AI in Customer.io. How it works When you set up a newsletter or an email in a campaign, you can click Recommend send time to schedule the email to send at the best time for your audience.</description></item><item><title>Send messages in users' time zones</title><link>https://docs.customer.io/journeys/timezone-match/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/timezone-match/</guid><description>How it works You can schedule messages for your users in their time local timezones, so you engage customers at the right times, wherever they are. This feature relies on a timezone attribute you set yourself or the cio_timezone attribute, which is set by our automatic geolocation data collection.
If the timezone attribute exists, we&amp;rsquo;ll use it to send the message in the customer&amp;rsquo;s time zone. If it doesn&amp;rsquo;t exist, we&amp;rsquo;ll use the cio_timezone attribute as a fallback.</description></item><item><title>Supported time zone formats</title><link>https://docs.customer.io/journeys/example-timezones/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/example-timezones/</guid><description>These are the values we support when you use the timezone attribute in your emails and attributes. Note that we support automatic geolocation data collection as well. If you use automatic geolocation data collection, we&amp;rsquo;ll set a cio_timezone attribute that you can use with our time zone-related features, so you don&amp;rsquo;t need to set the timezone attribute.
Region Format - Supported in our emails and attributes as well as the Time Zone Match feature.</description></item><item><title>Failed and attempted messages</title><link>https://docs.customer.io/journeys/message-failed/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/message-failed/</guid><description>If you see &amp;lsquo;Attempted&amp;rsquo; or &amp;lsquo;Failed&amp;rsquo; as a status on your message, there are a few reasons why that might be the case.
Attempted means that your message has been created and we&amp;rsquo;ve tried to send it to the delivery provider, which then would send to your end user. If you&amp;rsquo;re sending an email, for example, that means that your email has been put together in Customer.io, and we&amp;rsquo;ve tried to send it to an ESP such as SendGrid.</description></item><item><title>Reminders for multiple upcoming trips</title><link>https://docs.customer.io/journeys/reminders-for-multiple-upcoming-trips/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/reminders-for-multiple-upcoming-trips/</guid><description>Introduction This recipe is useful for multiple upcoming trips but you can also adapt it for these use cases:
Encourage a shopper to purchase their abandoned cart even when it&amp;rsquo;s possible for the user to have multiple carts. Let a customer know that one of their many saved coupons is expiring soon. Notify users when one job of many they&amp;rsquo;ve applied for is closed. The idea is that sometimes people can have multiples of one thing - trips, carts, coupons, and job applications - and you may want to target a specific trip, cart, etc during a campaign.</description></item><item><title>Message Limits</title><link>https://docs.customer.io/journeys/message-limits/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/message-limits/</guid><description>How it works You can set a message limit at the workspace level, and then you can determine which campaigns, broadcasts, and messages count towards the limit. For example, you might have marketing campaigns that you want to count towards limits but a broadcast about changes to your terms and conditions that you need to send to everyone, whether or not they&amp;rsquo;ve reached their message limit.
When a message encounters a limit, it&amp;rsquo;s marked as Undeliverable.</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/android/2.x/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/2.x/changelog/</guid><description>show</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/android/3.x/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/3.x/changelog/</guid><description>show</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/android/whats-new/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/android/whats-new/changelog/</guid><description>show</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/expo/1.x/updates-and-troubleshooting/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/1.x/updates-and-troubleshooting/changelog/</guid><description>test</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/expo/whats-new/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/expo/whats-new/changelog/</guid><description>test</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/flutter/1.x/updates-and-troubleshooting/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/1.x/updates-and-troubleshooting/changelog/</guid><description>show</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/flutter/2.x/whats-new/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/2.x/whats-new/changelog/</guid><description>show</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/flutter/whats-new/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/flutter/whats-new/changelog/</guid><description>show</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/ios/1.x/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/1.x/changelog/</guid><description>show</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/ios/2.x/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/2.x/changelog/</guid><description>show</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/ios/3.x/whats-new/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/3.x/whats-new/changelog/</guid><description>show</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/ios/whats-new/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/ios/whats-new/changelog/</guid><description>show</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/react-native/2.x/updates-and-troubleshooting/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/2.x/updates-and-troubleshooting/changelog/</guid><description>test</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/react-native/3.x/updates-and-troubleshooting/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/3.x/updates-and-troubleshooting/changelog/</guid><description>test</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/react-native/4.x/whats-new/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/4.x/whats-new/changelog/</guid><description>content</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/5.x/whats-new/changelog/</guid><description>test</description></item><item><title>Changelog</title><link>https://docs.customer.io/integrations/sdk/react-native/whats-new/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/integrations/sdk/react-native/whats-new/changelog/</guid><description>test</description></item><item><title>Resources for templates, code, and best practices</title><link>https://docs.customer.io/journeys/4-email-design-resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/4-email-design-resources/</guid><description>Adapt-a-template guides These guides are meant to show you the process of adapting a basic template from another service into a Customer.io Layout.
Foundation - Basic Mailchimp - Two-Column Layout creation and templates Pre-built templates Mailchimp&amp;rsquo;s Blueprints Litmus community Foundation for Emails Inkbrush, an email layout builder A really simple responsive HTML email template Frameworks to build your own HTML Email Boilerplate MJML.io, a markup language that lets you code your own responsive emails emailframe.</description></item><item><title>Adapting Foundation's Basic template</title><link>https://docs.customer.io/journeys/5-adapt-foundation-basic/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/5-adapt-foundation-basic/</guid><description>This template looks something like this (depending on your client):
To adapt it into a Customer.io layout, remember that you have to split it into two parts:
Layout - what is consistent across emails? how will it look? what is its structure? Content - what do you want to edit on a per-email basis? For this, I&amp;rsquo;ve decided that everything in the yellow box, I want to edit on a per-email basis:</description></item><item><title>Adapting MailChimp's Two-Column template</title><link>https://docs.customer.io/journeys/6-adapt-mc-twocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/journeys/6-adapt-mc-twocol/</guid><description>If you use MailChimp, you&amp;rsquo;ll be familiar with their pre-built templates, and this is one of the more straightforward ones! It looks something like this when you start, (depending on your client):
To adapt it into a Customer.io layout, remember that you have to split it into two parts:
Layout - what is consistent across emails? how will it look? what is its structure? Content - what do you want to edit on a per-email basis?</description></item><item><title>Customer.io's biggest product release: AI Agent, WhatsApp, LINE, and more!</title><link>https://docs.customer.io/release-notes/2026-04-08-q2-launch/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-04-08-q2-launch/</guid><description/></item><item><title>Generate data &amp; decisions with LLM actions in campaigns</title><link>https://docs.customer.io/release-notes/2026-04-08-llm-actions/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-04-08-llm-actions/</guid><description>You can use LLM actions to personalize messages, enrich data, and create conditions to help you reach the right audience.
Each time an LLM action runs, it uses AI credits. Learn more in Billing.</description></item><item><title>Goals: measure success across workflows</title><link>https://docs.customer.io/release-notes/2026-04-08-goals/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-04-08-goals/</guid><description>Unlike campaign-specific conversion goals, you can now track outcomes that span multiple workflows to help you more holistically strategize around your messaging and data.</description></item><item><title>New dashboard: track the health of your workspace &amp; troubleshoot issues</title><link>https://docs.customer.io/release-notes/2026-04-08-health-dashboard/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-04-08-health-dashboard/</guid><description>You can also use this dashboard to optimize your workspace before issues arise! Go to &amp;gt; Workspace performance to get started.</description></item><item><title>Search your workspace with ⌘K</title><link>https://docs.customer.io/release-notes/2026-04-08-universal-search/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-04-08-universal-search/</guid><description>Note that this feature does not search for people, objects, or their data. To find people, you&amp;rsquo;ll continue to use the activity log, people page, or segments.</description></item><item><title>The agent: your personal assistant in Customer.io</title><link>https://docs.customer.io/release-notes/2026-04-08-agent-rebrand/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-04-08-agent-rebrand/</guid><description>In the past, our AI Assistant was limited to specific tools. But the new agent can do just about anything you can do in Customer.io. It can create campaigns, draft emails, analyze campaign performance, and more. It can even learn from you and get better over time!
You can also set up Routines to automate recurring tasks—things like checking your deliverability, auditing segments, and more.
And while we&amp;rsquo;ve expanded the agent&amp;rsquo;s capabilities, we&amp;rsquo;ve also given it guardrails to make sure it works safely.</description></item><item><title>UI refresh: your new Home dashboard</title><link>https://docs.customer.io/release-notes/2026-04-08-ui-refresh/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-04-08-ui-refresh/</guid><description>From the Home dashboard, you can see message performance at a glance and take action on your workspace. Pick up where you last left off or select a suggested action to get started.</description></item><item><title>Channel-based subscription preferences</title><link>https://docs.customer.io/release-notes/2026-04-02-channel-preferences/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-04-02-channel-preferences/</guid><description>Channel preferences add a new layer of subscription control to your subscription center. Where topic preferences let people choose what they hear about, channel preferences let them choose how they receive messages.
You can set up channel-based subscription preferences for any messaging channel you have enabled in your workspace.</description></item><item><title>Automate domain warming with Daily ramp for newsletters</title><link>https://docs.customer.io/release-notes/2026-03-30-daily-ramp-newsletters/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-30-daily-ramp-newsletters/</guid><description>Previously, you could only set a fixed send rate for newsletters—a consistent number of messages per minute, hour, or day. If you needed to warm up a domain, you had to manually create separate newsletters for each period of your warm-up schedule. Now, domain warming is less manual and easier to set up!
We&amp;rsquo;ve also increased the maximum newsletter send time to 60 days to give you more room for gradual warming and large sends.</description></item><item><title>Live preview for in-app messages</title><link>https://docs.customer.io/release-notes/2026-03-30-in-app-live-preview/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-30-in-app-live-preview/</guid><description>Click Live Preview when working on your in-app message to get started. We&amp;rsquo;ll open your website in a new window where you can see and adjust your message in real time.</description></item><item><title>Send in-app tooltips to educate your audience</title><link>https://docs.customer.io/release-notes/2026-03-30-in-app-tooltips/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-30-in-app-tooltips/</guid><description>When you set up a tooltip, you&amp;rsquo;ll set a Target element, which is the element you want to anchor your tooltip to. You can use our new Live Preview feature or click Select Target in your message settings to open a preview window and select the target element that you want to anchor your tooltip—so you don&amp;rsquo;t have to manually enter a complicated CSS selector to find the right element.</description></item><item><title>Domain setup made easy</title><link>https://docs.customer.io/release-notes/2026-03-29-automatic-domain-setup/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-29-automatic-domain-setup/</guid><description>Entri supports over 50 DNS providers, including GoDaddy, Namecheap, Cloudflare, and Amazon Route 53.</description></item><item><title>Multiple custom short link domains</title><link>https://docs.customer.io/release-notes/2026-03-23-multiple-short-link-domains/</link><pubDate>Mon, 23 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-23-multiple-short-link-domains/</guid><description>This is especially useful if you manage multiple brands, want to rotate domains, or want to separate domains by message type.</description></item><item><title>Rate limiting now available for multi-language newsletters</title><link>https://docs.customer.io/release-notes/2026-03-19-limit-rate-newsletters/</link><pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-19-limit-rate-newsletters/</guid><description>Rate limiting lets you control how quickly your newsletters go out, which can help reduce the load on your downstream systems and maintain deliverability, so we want to make sure you can limit sends when it makes sense for your business.
On the Review step of a newsletter, you can now turn on the toggle Limit send rate when your newsletter has multiple language variants.</description></item><item><title>Import content into Design Studio using our new API endpoints</title><link>https://docs.customer.io/release-notes/2026-03-18-ds-apis/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-18-ds-apis/</guid><description>You&amp;rsquo;ll use our latest endpoints to manage content in Design Studio; you can&amp;rsquo;t update Design Studio content using other message-related endpoints.
You&amp;rsquo;ll also see new Assets endpoints, which you can use to create, update, or delete images and PDFs in your Asset library for use across message channels.
Keep these best practices in mind as you migrate your HTML to Design Studio!</description></item><item><title>Add guardrails to the content AI creates</title><link>https://docs.customer.io/release-notes/2026-03-13-gemini-safety-settings/</link><pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-13-gemini-safety-settings/</guid><description>Customer.io&amp;rsquo;s AI tools use Gemini models, so you&amp;rsquo;ll see Gemini Safety Settings on your Privacy page. You can filter content by four categories—Harassment, Hate Speech, Sexually Explicit, and Dangerous Content—with options ranging from Off (no filtering) to Block low and above (strictest filtering). By default, there is no filtering applied to your account.
You can also include a compliance prompt to help ensure generated content aligns with other regulatory and policy guidelines.</description></item><item><title>Forced dark mode: more preview options so you can be confident in your design</title><link>https://docs.customer.io/release-notes/2026-03-12-forced-dark-options/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-12-forced-dark-options/</guid><description>Learn more about these preview settings and how to make your design more consistent in email clients that don&amp;rsquo;t support dark mode styles.
These preview settings are available in our latest email editor, Design Studio, and our Code-only editor.</description></item><item><title>Location tracking for mobile SDKs</title><link>https://docs.customer.io/release-notes/2026-03-12-mobile-sdk-location-tracking/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-12-mobile-sdk-location-tracking/</guid><description>Customer.io already gives you the option to enrich locations from IP addresses, but VPNs, carrier routing, and shared Wi-Fi can reduce accuracy for mobile apps. With the new location module, our SDKs can capture device coordinates and Customer.io reverse-geocodes them into cio_city, cio_state, and cio_country profile attributes. The SDK also sends Location Update events that you can use to trigger journeys and build segments.
To minimize battery usage, our SDKs limit location updates to once per day at most and only when the person has moved a meaningful distance.</description></item><item><title>Design Studio: Edit your content without leaving your workflow</title><link>https://docs.customer.io/release-notes/2026-03-09-ds-seamless-editing/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-09-ds-seamless-editing/</guid><description>Whether you edit the email from Design Studio or your campaign, you can now directly update your content from either place.
You&amp;rsquo;ll also see a few other enhancements:
Publish status so you know whether all changes are live The ability to validate links from any preview in Design Studio A confirmation modal when navigating away from a draft so you don&amp;rsquo;t accidentally lose your changes</description></item><item><title>LINE messaging</title><link>https://docs.customer.io/release-notes/2026-03-09-line-messaging/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-09-line-messaging/</guid><description>LINE is the dominant messaging app in key Asian markets, with over 90 million monthly active users in Japan alone and market penetration of 70-95% in its core regions. In these markets, LINE isn&amp;rsquo;t just another channel—it&amp;rsquo;s how people communicate daily.
Now you can send LINE messages as a part of your campaigns and broadcasts. Send text and image messages to your LINE audience, track delivery and engagement metrics, and manage your LINE contacts alongside all your other channels.</description></item><item><title>Greater control over relationship conditions in Wait Until blocks</title><link>https://docs.customer.io/release-notes/2026-03-03-any-rel-wait-until/</link><pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-03-any-rel-wait-until/</guid><description>For instance, if you have Account and Subscription objects, you can now trigger a campaign when an account is created and wait to message someone until they&amp;rsquo;ve activated a subscription.</description></item><item><title>New campaign action: Set journey attributes</title><link>https://docs.customer.io/release-notes/2026-03-02-set-journey-attributes-action/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-02-set-journey-attributes-action/</guid><description>You might use this to set static data, like a discount code, that only applies while your customers are in the campaign.
This means you can now set journey attributes based on webhook data, collection queries, and a workflow action designed specifically for journey attributes.</description></item><item><title>Translate messages in Design Studio</title><link>https://docs.customer.io/release-notes/2026-03-02-ds-ai-translation/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-03-02-ds-ai-translation/</guid><description>Multi-lingual messaging is essential for global markets, and now Design Studio can help you reach them without cumbersome branching in campaigns. Reduce time spent copying content between tools, and scale personalized messaging with less overhead.</description></item><item><title>Notification inbox: messages your audience can revisit</title><link>https://docs.customer.io/release-notes/2026-02-19-notification-inbox/</link><pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-02-19-notification-inbox/</guid><description>With inbox messages, you can send important updates like announcements, order confirmations, or reminders to a notification inbox that people can check whenever they want.
For now, you&amp;rsquo;ll build your notification inbox yourself and invoke inbox methods to fetch and manage messages. Your messages are delivered as JSON payloads that you can render however you want, making it easy to align with your brand and app design.
But we recognize that this takes a bit of work.</description></item><item><title>Native WhatsApp support</title><link>https://docs.customer.io/release-notes/2026-02-17-native-whatsapp/</link><pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-02-17-native-whatsapp/</guid><description>WhatsApp messages are based on templates approved by Meta. You&amp;rsquo;ll create templates in your Facebook/WhatsApp Business Account and then use them to send messages from Customer.io.</description></item><item><title>Set global styles for in-app messages</title><link>https://docs.customer.io/release-notes/2026-01-28-in-app-styles/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-01-28-in-app-styles/</guid><description>Moving forward, new in-app messages will automatically pull from your global styles, and you can choose to sync existing messages to align them with your current branding.
This release also introduces the concept of publishing to in-app messages. When you publish styles, you decide which emails and/or in-app messages to update. This pushes changes to your workflows (campaigns, broadcasts, etc) so that whether you send a test message or the campaign is actively sending to people, your messages will use the current styles.</description></item><item><title>Send forms with text inputs</title><link>https://docs.customer.io/release-notes/2026-01-26-in-app-forms/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-01-26-in-app-forms/</guid><description>We capture form submissions with your users&amp;rsquo; input as a part of campaigns, broadcasts, or newsletters. You can also trigger downstream campaigns when someone submits your forms to thank them for their feedback, request a follow-up meeting, or offer a discount!</description></item><item><title>Design Studio: optimize images for faster loading</title><link>https://docs.customer.io/release-notes/2026-01-23-ds-optimize-images/</link><pubDate>Fri, 23 Jan 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-01-23-ds-optimize-images/</guid><description>Large assets cause emails to load slowly, impacting success of your campaigns. With optimization, you can ensure graphics appear quickly (even on poor mobile connections) to prevent drop-off from blank screens and protect click-through rates.</description></item><item><title>Design Studio: Save &amp; edit components from the visual editor</title><link>https://docs.customer.io/release-notes/2026-01-21-visual-component-saving/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-01-21-visual-component-saving/</guid><description>Build a block using components in the visual editor, and then click to save it as a new custom component file. It&amp;rsquo;s immediately accessible in the Insert menu of the visual editor for reuse across your emails.
You can also detach components from the source file if you want to make changes unique to that email.</description></item><item><title>Store collection data as journey attributes</title><link>https://docs.customer.io/release-notes/2026-01-21-journey-attributes-collection-queries/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-01-21-journey-attributes-collection-queries/</guid><description>This means you can now temporarily store data from both collections and webhooks to keep your customers&amp;rsquo; profiles as lean as possible.</description></item><item><title>AI-generated subject lines for emails</title><link>https://docs.customer.io/release-notes/2026-01-16-ai-subject-lines/</link><pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-01-16-ai-subject-lines/</guid><description>For best results, generate subject lines after your email content is complete!
This feature only applies to subject lines, not preheader/preview text.</description></item><item><title>Create reusable webhook configurations</title><link>https://docs.customer.io/release-notes/2026-01-14-resuable-webhooks/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-01-14-resuable-webhooks/</guid><description>Why it matters:
Less repetitive work &amp;amp; fewer errors. Define your webhook URL, headers, and auth details once, and reference them in any campaign. Updates at scale. When an API endpoint or auth header changes, update the configuration in one place and all referencing campaigns pick up the change automatically. Tighter security. Team members can select pre-configured webhooks without ever seeing sensitive data like API keys, auth tokens, or headers. Only Account and Workspace admins can configure reusable webhooks.</description></item><item><title>Edit multiple components at once</title><link>https://docs.customer.io/release-notes/2026-01-14-design-studio-multi-select/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2026-01-14-design-studio-multi-select/</guid><description>While message creation requires fine-tuning, it shouldn&amp;rsquo;t interrupt your creative flow. Previously, refining Design Studio emails or in-apps—like the padding on four different buttons—required you to go through a cycle of repetitive, manual adjustments. Now you can do this in a single, fluid motion: click, drag, and change your styles.
To make edits across multiple components, click and drag your cursor on the canvas to select multiple components.
Learn more about editing multiple components in Design Studio and in-app messages.</description></item><item><title>Wait to send messages until objects and relationships meet conditions</title><link>https://docs.customer.io/release-notes/2025-12-24-wait-until-custom-objects/</link><pubDate>Wed, 24 Dec 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-12-24-wait-until-custom-objects/</guid><description>For example, you can:
Send a message when an order&amp;rsquo;s status is equal to delivered Send reminders based on important dates and times like Appointment.starts_at Provision an account or user when they activate a subscription</description></item><item><title>Introducing journey attributes: an easier way to use webhook data</title><link>https://docs.customer.io/release-notes/2025-12-22-journey-attributes/</link><pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-12-22-journey-attributes/</guid><description>This means you no longer have to store webhook data important to a person&amp;rsquo;s journey on their profile, which doesn&amp;rsquo;t expire and could clutter up your workspace.</description></item><item><title>It's easier to get help with Customer.io</title><link>https://docs.customer.io/release-notes/2025-12-22-improved-help/</link><pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-12-22-improved-help/</guid><description>Help &amp;amp; Support now available everywhere: The Need Help? option was missing on some pages. Now it&amp;rsquo;s available on every page. Simplified support form: We&amp;rsquo;ve made the Get Help form easier to find and use—now it&amp;rsquo;s a single screen rather than four separate pages. You can even generate the form&amp;rsquo;s subject line with AI! Featured videos: We&amp;rsquo;ve added videos to help you learn more about Customer.io. Better organization: Resources, education, and support options are grouped into clear categories.</description></item><item><title>Answer 'who did what when' with Audit Logs</title><link>https://docs.customer.io/release-notes/2025-12-19-audit-logs/</link><pubDate>Fri, 19 Dec 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-12-19-audit-logs/</guid><description>You must be an Account Admin to access Audit Logs.</description></item><item><title>In-app display and position settings moved</title><link>https://docs.customer.io/release-notes/2025-12-16-in-app-move-settings/</link><pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-12-16-in-app-move-settings/</guid><description/></item><item><title>Set push priority in the push composer</title><link>https://docs.customer.io/release-notes/2025-12-15-push-message-priority/</link><pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-12-15-push-message-priority/</guid><description>Under normal priority, Android devices in standby mode might not wake up long enough to send delivery metrics back to Customer.io, so you might not see messages as delivered until your users open your app. Setting High priority tells the recipient&amp;rsquo;s device to wake up to properly report delivery metrics!</description></item><item><title>Remember the way you last logged in</title><link>https://docs.customer.io/release-notes/2025-12-12-last-used-login/</link><pubDate>Fri, 12 Dec 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-12-12-last-used-login/</guid><description/></item><item><title>Manage access to your workspace with custom roles</title><link>https://docs.customer.io/release-notes/2025-12-09-custom-access/</link><pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-12-09-custom-access/</guid><description>Create roles in Account Settings to give external partners, developers, or marketers just the access they need, nothing more.
You must be an Account Admin to create and assign custom roles.</description></item><item><title>Throttle webhook actions with random delays</title><link>https://docs.customer.io/release-notes/2025-12-05-random-delay/</link><pubDate>Fri, 05 Dec 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-12-05-random-delay/</guid><description>This can help you greatly simplify workflows if you&amp;rsquo;ve added branches with a variety of time delays to achieve the same effect.</description></item><item><title>Add notes to workflow items</title><link>https://docs.customer.io/release-notes/2025-11-18-sticky-notes-linking/</link><pubDate>Tue, 18 Nov 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-11-18-sticky-notes-linking/</guid><description>To link sticky notes to workflow items: Click the icon on the note and drag it to the workflow item you want to attach it to.</description></item><item><title>Get details about segments and campaigns with AI</title><link>https://docs.customer.io/release-notes/2025-11-13-ai-get-features/</link><pubDate>Thu, 13 Nov 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-11-13-ai-get-features/</guid><description>You can ask our assistant about:
Segment conditions: &amp;ldquo;When do people enter my Onboarding segment?&amp;rdquo; Campaign performance: &amp;ldquo;What&amp;rsquo;s the click-to-open rate for my Onboarding campaign and how does that compare to my Welcome campaign?&amp;rdquo; Email template/content analysis: &amp;ldquo;Are there any issues with my email template that might affect performance with my audience?&amp;rdquo; You can combine these things as well. For example, you might request information about a campaign and then ask the assistant to analyze the emails in the campaign for issues that might affect performance or deliverability.</description></item><item><title>Random cohorts by account, company, or other objects</title><link>https://docs.customer.io/release-notes/2025-11-06-random-cohorts-objects/</link><pubDate>Thu, 06 Nov 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-11-06-random-cohorts-objects/</guid><description/></item><item><title>Get recommended send times for your messages</title><link>https://docs.customer.io/release-notes/2025-10-30-recommended-send-time/</link><pubDate>Thu, 30 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-30-recommended-send-time/</guid><description>This feature works great with our other new feature: Automatic Geolocation Data Collection. This helps you gather your audience&amp;rsquo;s time zone data, which you can use to produce better send time recommendations!</description></item><item><title>Automatically collect geolocation and time zone data for your audience</title><link>https://docs.customer.io/release-notes/2025-10-24-automatic-geolocation/</link><pubDate>Fri, 24 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-24-automatic-geolocation/</guid><description>Our JavaScript client and mobile SDKs automatically capture IP addresses for you, making geolocation easy.
If you use our backend libraries (like our Node.JS or Go SDKs) or our Pipelines API, you&amp;rsquo;ll need to:
Go to your integration&amp;rsquo;s Settings tab and turn on the Enable Geolocation setting. Capture the IP address yourself and pass it in the context.ip field in your identify requests. This setting is on by default for workspaces in our US data center and off by default for workspaces in our EU data center.</description></item><item><title>Filter incoming Salesforce data</title><link>https://docs.customer.io/release-notes/2025-10-22-salesforce-filter/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-22-salesforce-filter/</guid><description>While Salesforce filters typically require a SQL syntax, we&amp;rsquo;ve included a handy AI box, where you can describe the data you want to bring into Customer.io and we&amp;rsquo;ll generate a filter for you.</description></item><item><title>Collections have moved to Data &amp; Integrations</title><link>https://docs.customer.io/release-notes/2025-10-16-collections-moved/</link><pubDate>Thu, 16 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-16-collections-moved/</guid><description>If you haven&amp;rsquo;t used collections before, now&amp;rsquo;s a great time to start! Collections let you store data that you want to use in campaigns but isn&amp;rsquo;t necessarily associated with people or objectsAn object is a non-person entity that you can associate with one or more people—like a company, account, or online course.. These could be things like available promotions/coupons or upcoming events your audience might be interested in.</description></item><item><title>Upload images as context for the Assistant</title><link>https://docs.customer.io/release-notes/2025-10-16-assistant-upload-image/</link><pubDate>Thu, 16 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-16-assistant-upload-image/</guid><description>Here are some examples of how you could use this feature:
Upload an image for your emails and request the Assistant generate alt text. Upload charts from a third-party analytics tool and request it come up with recommendations based on the data.</description></item><item><title>Anonymous in-app messages for mobile apps</title><link>https://docs.customer.io/release-notes/2025-10-08-anonymous-for-mobile/</link><pubDate>Wed, 08 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-08-anonymous-for-mobile/</guid><description>You can even use inline content to populate your app for users who haven&amp;rsquo;t signed up or logged in. This helps you show default content to people who use your app but aren&amp;rsquo;t identified yet.
Update to one of the following versions of our SDKs to get started. You don&amp;rsquo;t have to make any changes to your app code—just update the SDK.
SDK Minimum required version for anonymous in-app messages iOS 3.</description></item><item><title>Retrieve metrics with the Assistant</title><link>https://docs.customer.io/release-notes/2025-10-07-assistant-metrics/</link><pubDate>Tue, 07 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-07-assistant-metrics/</guid><description>Ask it questions like &amp;ldquo;Which campaign had the lowest deliverability this month?&amp;rdquo; or &amp;ldquo;What’s the average click-to-open rate for my campaigns?&amp;rdquo; and it will search our docs and your workspace to give you a relevant answer.
Click at the top of your workspace to get started!</description></item><item><title>Simplified link tracking setup</title><link>https://docs.customer.io/release-notes/2025-10-07-simplified-link-tracking/</link><pubDate>Tue, 07 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-07-simplified-link-tracking/</guid><description/></item><item><title>Capture leads from anonymous messages</title><link>https://docs.customer.io/release-notes/2025-10-06-in-app-lead-forms/</link><pubDate>Mon, 06 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-06-in-app-lead-forms/</guid><description>This is our first release of a component that captures form data like this, but we&amp;rsquo;re working to expand support for more complex surveys and forms in the future.</description></item><item><title>Translate messages with AI</title><link>https://docs.customer.io/release-notes/2025-10-03-ai-translation/</link><pubDate>Fri, 03 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-03-ai-translation/</guid><description>You can auto-translate across all message channels, but it&amp;rsquo;s not yet available for emails made in Design Studio.
Not seeing this option? Check that Customer.io AI is enabled in Privacy, Data, &amp;amp; AI settings.</description></item><item><title>AI-powered email content analysis</title><link>https://docs.customer.io/release-notes/2025-10-02-email-content-analysis/</link><pubDate>Thu, 02 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-02-email-content-analysis/</guid><description/></item><item><title>Introducing your AI business context</title><link>https://docs.customer.io/release-notes/2025-10-01-ai-business-profile/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-10-01-ai-business-profile/</guid><description/></item><item><title>Ask our AI Assistant</title><link>https://docs.customer.io/release-notes/2025-09-25-assistant/</link><pubDate>Thu, 25 Sep 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-09-25-assistant/</guid><description>You can also create segments from the Assistant. Describe your criteria, and it will build a segment you can use to trigger campaigns or group members of your audience.
At the top of your workspace, click the message bubble to get started. Make sure Customer.io AI is enabled in Privacy, Data, &amp;amp; AI settings to access the full experience!</description></item><item><title>Schedule a start or stop time for campaigns</title><link>https://docs.customer.io/release-notes/2025-09-15-schedule-campaigns/</link><pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-09-15-schedule-campaigns/</guid><description>Any campaign with a scheduled start or stop time will show a label &amp;ldquo;Scheduled&amp;rdquo; alongside the status (Draft, Running, or Stopped).</description></item><item><title>Handle SMS replies from your audience</title><link>https://docs.customer.io/release-notes/2025-09-04-inbound-sms-support/</link><pubDate>Thu, 04 Sep 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-09-04-inbound-sms-support/</guid><description>With this release, you can automatically handle opt-out keywords like STOP and UNSUBSCRIBE without setting up a complicated webhook-based workflow. Now we handle these for you.
You can also use SMS replies from your audience as campaign triggers. Now when people respond to messages, you can add them to segments, send them follow-up messages and so on.</description></item><item><title>Rate limit newsletters sent in users' timezones</title><link>https://docs.customer.io/release-notes/2025-09-04-send-newsletters-timezone-rate-limit/</link><pubDate>Thu, 04 Sep 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-09-04-send-newsletters-timezone-rate-limit/</guid><description/></item><item><title>Custom domains for shortened links</title><link>https://docs.customer.io/release-notes/2025-09-03-custom-short-link/</link><pubDate>Wed, 03 Sep 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-09-03-custom-short-link/</guid><description>Say goodbye to unbranded, spammy-looking links. Now you can send links your customers recognize and trust. Go to your &amp;gt; workspace settings &amp;gt; SMS and turn on Link shortening. Then click Add custom domain to add your own custom domain.</description></item><item><title>Generate descriptions for your data with AI</title><link>https://docs.customer.io/release-notes/2025-09-03-ai-generated-descriptions/</link><pubDate>Wed, 03 Sep 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-09-03-ai-generated-descriptions/</guid><description>Go to your Data Index, select an attribute or event, and click in the description field to generate a description.</description></item><item><title>Get AI-powered insights from your in-app surveys</title><link>https://docs.customer.io/release-notes/2025-07-23-in-app-survey-analysis/</link><pubDate>Wed, 23 Jul 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-07-23-in-app-survey-analysis/</guid><description/></item><item><title>Sunsetting the legacy in-app editor</title><link>https://docs.customer.io/release-notes/2025-07-22-sunset-legacy-in-app/</link><pubDate>Tue, 22 Jul 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-07-22-sunset-legacy-in-app/</guid><description>We&amp;rsquo;re phasing out the legacy editor in two stages:
On October 1, 2025, the legacy editor becomes edit-only. You can continue editing messages in the legacy editor, but you won&amp;rsquo;t be able to create new ones.
On January 31, 2026, the legacy editor becomes read-only. You&amp;rsquo;ll still be able to see messages in the legacy editor, and they&amp;rsquo;ll continue working—but you won&amp;rsquo;t be able to edit them.
We won&amp;rsquo;t delete your existing in-app messages!</description></item><item><title>Embed dynamic content in your app with inline messages</title><link>https://docs.customer.io/release-notes/2025-06-30-inline-in-app/</link><pubDate>Mon, 30 Jun 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-06-30-inline-in-app/</guid><description>When you send an inline message, you&amp;rsquo;ll specify the inline position and provide the ID of a view in your app that you want to populate with personalized content. You don&amp;rsquo;t have to push an app update or anything—just instant, relevant experiences for your users.
Inline messages are great for:
Contextual onboarding: Guide users step-by-step without overwhelming them Feature discovery: Highlight new features exactly where users will use them Targeted promotions: Show relevant offers based on user behavior Just-in-time help: Provide tips and guidance when users need it most Update your SDK to the latest version to get started.</description></item><item><title>Use human opens and clicks in your workflows</title><link>https://docs.customer.io/release-notes/2025-06-30-human-metrics-segments-conditions/</link><pubDate>Mon, 30 Jun 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-06-30-human-metrics-segments-conditions/</guid><description/></item><item><title>See real deliverability metrics for your audience</title><link>https://docs.customer.io/release-notes/2025-06-19-human-metrics/</link><pubDate>Thu, 19 Jun 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-06-19-human-metrics/</guid><description>That&amp;rsquo;s all in the past.
Our new Deliverability Analytics Dashboard—available on premium and enterprise plans—gives you detailed insights into your subscribers across inbox providers, all in one place. See your audience weight, bounce rates, and engagement metrics for Gmail, Outlook, Yahoo, and more. Just click Analysis in the left navigation area, and you&amp;rsquo;ll have the visibility you need to fix deliverability issues before they hurt your campaigns.</description></item><item><title>Send critical text messages with transactional SMS/WhatsApp</title><link>https://docs.customer.io/release-notes/2025-06-18-transactional-sms/</link><pubDate>Wed, 18 Jun 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-06-18-transactional-sms/</guid><description/></item><item><title>Official release: build segments with AI</title><link>https://docs.customer.io/release-notes/2025-06-11-segment-builder-official/</link><pubDate>Wed, 11 Jun 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-06-11-segment-builder-official/</guid><description>Pro tip: add descriptions to your attributes and events to improve segment generation! Providing additional context on your data helps our segment builder better understand your data and provide more relevant results.</description></item><item><title>Send in-app messages to the right pages with exclusion rules</title><link>https://docs.customer.io/release-notes/2025-06-04-in-app-page-exclusions/</link><pubDate>Wed, 04 Jun 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-06-04-in-app-page-exclusions/</guid><description>We also added a Test page rules feature, so you can make sure that your message will appear on the right pages before you send it.</description></item><item><title>It's easier to set up in-app messaging than ever before</title><link>https://docs.customer.io/release-notes/2025-05-29-simple-web-in-app-setup/</link><pubDate>Thu, 29 May 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-05-29-simple-web-in-app-setup/</guid><description>Now, that’s all in the past.
In-app messaging works automatically with our JavaScript integration. You just turn it on in your workspace settings and you&amp;rsquo;re ready to send messages to your website visitors—no extra code, no developer help needed.</description></item><item><title>Multi-step in-app messages: onboarding, survey-responses, and more</title><link>https://docs.customer.io/release-notes/2025-05-28-in-app-multi-step/</link><pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-05-28-in-app-multi-step/</guid><description>As people click or tap buttons and links in a multi-step message, you can move them along to subsequent steps in your message. This helps you to show users the right content at the right time based on how they interact with your messages—all without complicated code or logic!</description></item><item><title>Beta release: Design Studio, our new email editor</title><link>https://docs.customer.io/release-notes/2025-05-27-design-studio-beta/</link><pubDate>Tue, 27 May 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-05-27-design-studio-beta/</guid><description>We&amp;rsquo;re rolling this out to everyone! The level of functionality you have access to depends on your workspace-level role: Workspace Admins and Authors have full access, Viewers can only view.</description></item><item><title>Simplified link tracking in SMS and WhatsApp messages</title><link>https://docs.customer.io/release-notes/2025-05-16-sms-tracked-clicks/</link><pubDate>Fri, 16 May 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-05-16-sms-tracked-clicks/</guid><description/></item><item><title>Automatically detect A/B test winners for SMS and push notifications</title><link>https://docs.customer.io/release-notes/2025-05-15-a-b-test-winner/</link><pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-05-15-a-b-test-winner/</guid><description/></item><item><title>Better understand email engagement with Human opened and clicked metrics</title><link>https://docs.customer.io/release-notes/2025-05-14-human-metrics/</link><pubDate>Wed, 14 May 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-05-14-human-metrics/</guid><description>Hover over email metrics to compare human + machine metrics to human-only metrics. Human opened data is reliable as of March 20, 2025 and Human clicked data as of April 20, 2025.
&amp;nbsp;We&amp;rsquo;re in the process of rolling this out
Not seeing human metrics? We&amp;rsquo;re in the process of rolling this out to all customers; you&amp;rsquo;ll see them soon! Need to send these metrics to another platform or service? This data is now available through our reporting webhooks, APIs, and integrations.</description></item><item><title>Specify data you want to keep private from your team members</title><link>https://docs.customer.io/release-notes/2025-05-09-hide-sensitive-data/</link><pubDate>Fri, 09 May 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-05-09-hide-sensitive-data/</guid><description>Authors with sensitive data hidden have the same functionality as authors who can view all data, with one exception: they can’t edit people.
If you currently use our legacy &amp;ldquo;Hide all attributes&amp;rdquo; setting, your teammates will experience no change to the data and functionality they have access to.</description></item><item><title>Set up campaigns quicker with our new attribute or segment trigger</title><link>https://docs.customer.io/release-notes/2025-04-21-attribute-or-segment-trigger/</link><pubDate>Mon, 21 Apr 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-04-21-attribute-or-segment-trigger/</guid><description>All campaigns that use our legacy segment trigger will continue to work as expected and you&amp;rsquo;ll be able to duplicate them. For new campaigns, you&amp;rsquo;ll use the new trigger.
Note, the new trigger behaves differently than the legacy segment trigger in a few ways: filter conditions are now part of the trigger conditions, and you may need to add time-based conditions to ensure the right group of people trigger your campaigns at the correct time.</description></item><item><title>Official release: anonymous in-app messages</title><link>https://docs.customer.io/release-notes/2025-04-16-anon-in-app-official/</link><pubDate>Wed, 16 Apr 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-04-16-anon-in-app-official/</guid><description/></item><item><title>Beta release: build segments with AI</title><link>https://docs.customer.io/release-notes/2025-03-26-segment-builder-beta/</link><pubDate>Wed, 26 Mar 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-03-26-segment-builder-beta/</guid><description>You can opt out of this builder and revert to our standard experience through the toggle in the bottom right of segment creation.</description></item><item><title>First official Expo release</title><link>https://docs.customer.io/release-notes/2025-03-25-official-expo-release/</link><pubDate>Tue, 25 Mar 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-03-25-official-expo-release/</guid><description>If you&amp;rsquo;ve used a beta version of the plugin, you&amp;rsquo;ll notice that the official release includes support for Firebase Cloud Messaging (FCM) to iOS devices, and we&amp;rsquo;ve tried to slim down the workflow to make integrating even easier. Check out the changelog to see the complete list of Expo updates.</description></item><item><title>Send WhatsApp messages with Twilio content templates</title><link>https://docs.customer.io/release-notes/2025-03-20-whatsapp-content-templates/</link><pubDate>Thu, 20 Mar 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-03-20-whatsapp-content-templates/</guid><description>Before this release, you had to copy/paste content from Twilio into Customer.io before you could send a WhatsApp message. Now, when you add a WhatsApp message to a campaign or broadcast, you can simply select your Twilio content template. We fetch the template and expose the fields you can fill in so you don&amp;rsquo;t have to leave Customer.io.</description></item><item><title>Link shortening for SMS and WhatsApp messages</title><link>https://docs.customer.io/release-notes/2025-03-19-sms-link-shortening/</link><pubDate>Wed, 19 Mar 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-03-19-sms-link-shortening/</guid><description>Go to Workspace settings &amp;gt; SMS and turn on Shorten links. Shortened links use the format https://a.cx.io/lnk.abc123 (or https://e.cx.io/lnk.abc123 if you&amp;rsquo;re in our EU region), consuming between 28 and 38 characters so you have plenty of room to talk to your audience.</description></item><item><title>Define attributes to clarify what your data means</title><link>https://docs.customer.io/release-notes/2025-03-10-attribute-descriptions/</link><pubDate>Mon, 10 Mar 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-03-10-attribute-descriptions/</guid><description/></item><item><title>Dismiss web-based in-app messages without a Close button</title><link>https://docs.customer.io/release-notes/2025-03-06-web-in-app-click-dismiss/</link><pubDate>Thu, 06 Mar 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-03-06-web-in-app-click-dismiss/</guid><description/></item><item><title>Trigger object campaigns for people who already match your criteria</title><link>https://docs.customer.io/release-notes/2025-02-10-object-campaigns-current-matches/</link><pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-02-10-object-campaigns-current-matches/</guid><description/></item><item><title>Use Customer.io and Segment.com together in your website</title><link>https://docs.customer.io/release-notes/2025-02-03-cioanalytics-js/</link><pubDate>Mon, 03 Feb 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-02-03-cioanalytics-js/</guid><description/></item><item><title>Mobile inline in-app messages for iOS SDK</title><link>https://docs.customer.io/release-notes/2025-01-30-inline-in-app-ios/</link><pubDate>Thu, 30 Jan 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-01-30-inline-in-app-ios/</guid><description>This feature is in early access and is available only to customers who are using our iOS Native SDK. Interested in joining our early release program? Fill out this form to request access. If you have questions, please let us know.</description></item><item><title>Auto-provision team member access with SCIM 2.0</title><link>https://docs.customer.io/release-notes/2025-01-23-auto-provision-access/</link><pubDate>Thu, 23 Jan 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-01-23-auto-provision-access/</guid><description/></item><item><title>Build campaigns faster with our redesigned experience!</title><link>https://docs.customer.io/release-notes/2025-01-16-new-campaign-builder/</link><pubDate>Thu, 16 Jan 2025 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2025-01-16-new-campaign-builder/</guid><description/></item><item><title>Expo plugin 2.0 release</title><link>https://docs.customer.io/release-notes/2024-12-24-expo-2-release/</link><pubDate>Tue, 24 Dec 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-12-24-expo-2-release/</guid><description>Where previous releases were mostly limited to sending message-related events (like the Push Opened event) to other platforms, this new release makes it much easier to send any data from your React Native app to the rest of your martech stack—the people you identify, the events you track, the screens people visit, and so on. And, unlike traditional CDPs (Segment, Rudderstack, and so on), you don&amp;rsquo;t have to pay for this feature.</description></item><item><title>Duplicate campaigns within a workspace</title><link>https://docs.customer.io/release-notes/2024-12-19-duplicate-campaigns/</link><pubDate>Thu, 19 Dec 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-12-19-duplicate-campaigns/</guid><description/></item><item><title>Send records to your Attio workspace</title><link>https://docs.customer.io/release-notes/2024-12-13-attio-destination-integration/</link><pubDate>Fri, 13 Dec 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-12-13-attio-destination-integration/</guid><description/></item><item><title>Create branches based on object and relationship conditions across campaign types</title><link>https://docs.customer.io/release-notes/2024-12-12-branching-with-objects-2/</link><pubDate>Thu, 12 Dec 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-12-12-branching-with-objects-2/</guid><description/></item><item><title>Flutter 2.0 release</title><link>https://docs.customer.io/release-notes/2024-12-10-flutter-2-release/</link><pubDate>Tue, 10 Dec 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-12-10-flutter-2-release/</guid><description>Where previous releases were mostly limited to sending message-related events (like the Push Opened event) to other platforms, this new release makes it much easier to send any data from your Flutter app to the rest of your martech stack—the people you identify, the events you track, the screens people visit, and so on. And, unlike traditional CDPs (Segment, Rudderstack, and so on), you don&amp;rsquo;t have to pay for this feature.</description></item><item><title>Data warehouse outputs for objects and campaign names</title><link>https://docs.customer.io/release-notes/2024-10-17-new-data-warehouse-outputs/</link><pubDate>Thu, 17 Oct 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-10-17-new-data-warehouse-outputs/</guid><description>To use these new exports, simply go to your data warehouse integration and turn on the Campaign Metadata, Objects, and Object Attributes outputs.</description></item><item><title>React Native 4.0 release</title><link>https://docs.customer.io/release-notes/2024-10-16-react-native-4-release/</link><pubDate>Wed, 16 Oct 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-10-16-react-native-4-release/</guid><description>Where previous releases were mostly limited to sending message-related events (like the Push Opened event) to other platforms, this new release makes it much easier to send any data from your React Native app to the rest of your martech stack—the people you identify, the events you track, the screens people visit, and so on. And, unlike traditional CDPs (Segment, Rudderstack, and so on), you don&amp;rsquo;t have to pay for this feature.</description></item><item><title>Our SDKs support Firebase v11</title><link>https://docs.customer.io/release-notes/2024-10-15-firebase-11-support/</link><pubDate>Tue, 15 Oct 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-10-15-firebase-11-support/</guid><description> iOS SDK 3.4.1 or 2.14.2 React Native SDK 3.9.1 Flutter: follow our instructions to update your iOS Native dependency version 2.14.2.</description></item><item><title>Sync data between Salesforce and Customer.io</title><link>https://docs.customer.io/release-notes/2024-09-17-salesforce-source/</link><pubDate>Tue, 17 Sep 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-09-17-salesforce-source/</guid><description>To get started, you&amp;rsquo;ll simply map your Salesforce data to its Customer.io equivalent. You determine which data you want to send into Customer.io—contacts, leads, opportunities, accounts, and whatever else you need to send messages that engage your customers and increase conversions.
Once your data is in Customer.io, you can send people messages and even feed data from Salesforce back into your Salesforce environment!</description></item><item><title>Sending in-app messages just got easier</title><link>https://docs.customer.io/release-notes/2024-08-29-in-app-easy-audience/</link><pubDate>Thu, 29 Aug 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-08-29-in-app-easy-audience/</guid><description>If you already set them up with the To field, you have nothing to worry about. We&amp;rsquo;ve taken care of things for you. Your messages will go to the right person, whether you identify them by ID or email address.</description></item><item><title>Pause and resume newsletters</title><link>https://docs.customer.io/release-notes/2024-08-28-pause-newsletter/</link><pubDate>Wed, 28 Aug 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-08-28-pause-newsletter/</guid><description/></item><item><title>Android 4.0 release</title><link>https://docs.customer.io/release-notes/2024-07-24-android-data-pipelines/</link><pubDate>Wed, 24 Jul 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-07-24-android-data-pipelines/</guid><description>This latest version of the SDK supports the following new features:
Anonymous tracking: You can send anonymous events, and we&amp;rsquo;ll reconcile anonymous activity with your users when you identify them. Data Pipelines Support: Sending your mobile data into our customer data platform (CDP) helps you support both Journeys and the rest of your martech stack—analytics, data warehouses, CRMs and more.* Built-in lifecycle events: the SDK now automatically captures events like &amp;ldquo;Application Installed&amp;rdquo; and &amp;ldquo;Application Updated&amp;rdquo; for you, so you better understand your users&amp;rsquo; behaviors in your app.</description></item><item><title>Build in-app messages the easy way with our new drag-and-drop editor</title><link>https://docs.customer.io/release-notes/2024-07-15-in-app-visual-editor/</link><pubDate>Mon, 15 Jul 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-07-15-in-app-visual-editor/</guid><description>Where our old editor&amp;rsquo;s code view had its own confusing structure, the new editor lets you switch to a full HTML-code view. If you&amp;rsquo;re a savvy developer, you&amp;rsquo;ll be able to edit HTML tags and classes directly; when you switch to the in-app code view, it&amp;rsquo;ll look and feel just like you&amp;rsquo;re editing code on your own website!
New editor Old editor We&amp;rsquo;ve even included a number of new templates to help you get started.</description></item><item><title>Test emails before verifying your domain</title><link>https://docs.customer.io/release-notes/2024-07-10-test-delivery-mode/</link><pubDate>Wed, 10 Jul 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-07-10-test-delivery-mode/</guid><description/></item><item><title>Export attributes and events from your Data Index</title><link>https://docs.customer.io/release-notes/2024-06-27-data-index-export/</link><pubDate>Thu, 27 Jun 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-06-27-data-index-export/</guid><description/></item><item><title>Assign different roles for each workspace a team member has access to</title><link>https://docs.customer.io/release-notes/2024-06-20-role-per-workspace/</link><pubDate>Thu, 20 Jun 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-06-20-role-per-workspace/</guid><description/></item><item><title>Grant read-only access to account settings with the new Member role</title><link>https://docs.customer.io/release-notes/2024-06-20-partial-account-access/</link><pubDate>Thu, 20 Jun 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-06-20-partial-account-access/</guid><description/></item><item><title>Enable SSO with SAML</title><link>https://docs.customer.io/release-notes/2024-05-29-generic-saml/</link><pubDate>Wed, 29 May 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-05-29-generic-saml/</guid><description/></item><item><title>Capture data from Salesforce (now in Early Access)</title><link>https://docs.customer.io/release-notes/2024-05-22-salesforce-source-ea/</link><pubDate>Wed, 22 May 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-05-22-salesforce-source-ea/</guid><description>To get started, all you need to do is map your Salesforce data to its Customer.io equivalent. You determine which data you want to send into Customer.io—contacts, leads, opportunities, accounts, and whatever else you need to send messages that engage your customers and increase conversions.
If you&amp;rsquo;re on an essentials plan, you can request access to our Salesforce integration in your Customer.io dashboard.
This feature is in early access. You&amp;rsquo;re welcome to use it, but we&amp;rsquo;re still adding features (like real-time streams) and smoothing out some rough edges.</description></item><item><title>Apple Vision Pro Support</title><link>https://docs.customer.io/release-notes/2024-05-02-apple-vision-pro/</link><pubDate>Thu, 02 May 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-05-02-apple-vision-pro/</guid><description>We&amp;rsquo;ve added a handy sample app to our iOS SDK, so you can see what Customer.io looks like in VR. But, if you&amp;rsquo;ve developed an app with our mobile SDK already, our visionOS support should come naturally to you.</description></item><item><title>Disable CSS pre-processing for your workspace</title><link>https://docs.customer.io/release-notes/2024-04-26-css-preprocess-workspace/</link><pubDate>Fri, 26 Apr 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-04-26-css-preprocess-workspace/</guid><description/></item><item><title>Meeting Apple's App Store Privacy Requirements</title><link>https://docs.customer.io/release-notes/2024-04-10-app-store-privacy/</link><pubDate>Wed, 10 Apr 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-04-10-app-store-privacy/</guid><description> iOS: ≥ 3.1.0 or ≥ 2.13.0 React Native: ≥ 3.6.0 Flutter: requires iOS ≥ 2.13.0. Follow our update instructions to update the iOS native package in Flutter. Expo: requires React Native ≥ 3.6.0. Install the latest React Native SDK and run expo prebuild --clean.</description></item><item><title>Add/remove an individual from a manual segment</title><link>https://docs.customer.io/release-notes/2024-03-28-individual-add-remove-manual-segment/</link><pubDate>Thu, 28 Mar 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-03-28-individual-add-remove-manual-segment/</guid><description/></item><item><title>iOS 3.0 release</title><link>https://docs.customer.io/release-notes/2024-03-20-ios-data-pipelines/</link><pubDate>Wed, 20 Mar 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-03-20-ios-data-pipelines/</guid><description>This latest version of the SDK supports the following new features:
Data Pipelines Support: Send your mobile data to Data Pipelines (our customer data platform) to route it to Journeys, and the rest of your martech stack—analytics, data warehouses, CRMs and more.* Anonymous tracking: You can send anonymous events, and we&amp;rsquo;ll reconcile anonymous activity with the user when you identify them. Built-in lifecycle events: the SDK now automatically captures events like &amp;ldquo;Application Installed&amp;rdquo; and &amp;ldquo;Application Updated&amp;rdquo; for you, so you better understand your users&amp;rsquo; behaviors in your app.</description></item><item><title>Upgrade your liquid version for new messages in Workspace Settings</title><link>https://docs.customer.io/release-notes/2024-03-08-workspace-setting-liquid-version/</link><pubDate>Fri, 08 Mar 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-03-08-workspace-setting-liquid-version/</guid><description/></item><item><title>Download your billing invoice</title><link>https://docs.customer.io/release-notes/2024-02-23-download-invoice/</link><pubDate>Fri, 23 Feb 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-02-23-download-invoice/</guid><description/></item><item><title>Check your DMARC policy</title><link>https://docs.customer.io/release-notes/2024-02-21-dmarc-policy/</link><pubDate>Wed, 21 Feb 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-02-21-dmarc-policy/</guid><description/></item><item><title>Upgrade to the latest liquid version</title><link>https://docs.customer.io/release-notes/2024-02-20-latest-liquid/</link><pubDate>Tue, 20 Feb 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-02-20-latest-liquid/</guid><description/></item><item><title>We support images up to 3MB again</title><link>https://docs.customer.io/release-notes/2024-02-02-3mb-image-size/</link><pubDate>Tue, 13 Feb 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-02-02-3mb-image-size/</guid><description>We appreciate your feedback and are always looking for ways to improve our product—whether by adding new features or fixing recent changes! If you have feedback on this or any other feature, please let us know.</description></item><item><title>Simplified push messaging setup for iOS</title><link>https://docs.customer.io/release-notes/2024-02-12-ios-automatic-push-handling/</link><pubDate>Mon, 12 Feb 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-02-12-ios-automatic-push-handling/</guid><description>This release updates the platforms below. We&amp;rsquo;ve linked to upgrade documentation for each SDK, highlighting the code you can remove from your app when you upgrade:
iOS 2.11 React Native 3.4 Flutter (affects iOS native SDK) Expo: Upgrade to 1.0.0-beta.14 and run expo prebuild --clean.</description></item><item><title>Reverse ETL: updates to sync interval calculation and suppressed profiles</title><link>https://docs.customer.io/release-notes/2024-02-09-rev-etl-updates/</link><pubDate>Fri, 09 Feb 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-02-09-rev-etl-updates/</guid><description/></item><item><title>Upload images smaller than 1MB</title><link>https://docs.customer.io/release-notes/2024-02-02-image-size/</link><pubDate>Fri, 02 Feb 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-02-02-image-size/</guid><description/></item><item><title>New and improved setup for campaign triggers</title><link>https://docs.customer.io/release-notes/2024-01-29-new-campaign-ux/</link><pubDate>Mon, 29 Jan 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-01-29-new-campaign-ux/</guid><description/></item><item><title>Trigger campaigns by objects and relationships</title><link>https://docs.customer.io/release-notes/2024-01-29-object-campaigns/</link><pubDate>Mon, 29 Jan 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-01-29-object-campaigns/</guid><description/></item><item><title>Import objects via CSV</title><link>https://docs.customer.io/release-notes/2024-01-26-import-objects/</link><pubDate>Fri, 26 Jan 2024 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2024-01-26-import-objects/</guid><description/></item><item><title>Retrieve and update language variants for messages through our API</title><link>https://docs.customer.io/release-notes/2023-12-13-lang-variants/</link><pubDate>Wed, 13 Dec 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-12-13-lang-variants/</guid><description/></item><item><title>Export object and relationship data</title><link>https://docs.customer.io/release-notes/2023-11-14-object-export/</link><pubDate>Tue, 14 Nov 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-11-14-object-export/</guid><description/></item><item><title>Customize the overlay color of modal in-app messages</title><link>https://docs.customer.io/release-notes/2023-11-13-in-app-overlay-color/</link><pubDate>Mon, 13 Nov 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-11-13-in-app-overlay-color/</guid><description/></item><item><title>Set custom widths for in-app messages</title><link>https://docs.customer.io/release-notes/2023-11-13-in-app-max-width/</link><pubDate>Mon, 13 Nov 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-11-13-in-app-max-width/</guid><description/></item><item><title>Hide sensitive data for Authors</title><link>https://docs.customer.io/release-notes/2023-11-07-hide-data-authors/</link><pubDate>Tue, 07 Nov 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-11-07-hide-data-authors/</guid><description/></item><item><title>Multiple page rules for in-app messages</title><link>https://docs.customer.io/release-notes/2023-11-02-multi-page-rules/</link><pubDate>Thu, 02 Nov 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-11-02-multi-page-rules/</guid><description/></item><item><title>Data Pipelines Zendesk destination</title><link>https://docs.customer.io/release-notes/2023-10-31-data-pipelines-zendesk/</link><pubDate>Tue, 31 Oct 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-10-31-data-pipelines-zendesk/</guid><description/></item><item><title>Set up in-app messages that persist across pages and sessions</title><link>https://docs.customer.io/release-notes/2023-10-25-in-app-persist-messages.md/</link><pubDate>Wed, 25 Oct 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-10-25-in-app-persist-messages.md/</guid><description>If you use our Web SDK, you can start sending persistent in-app messages today. If you use our Mobile SDKs, you&amp;rsquo;ll need to update to the latest version to take advantage of this feature. Persistent messages are available starting in:
Android 3.7.0 iOS 2.8.4 React Native 3.2.0 Flutter 1.3.0</description></item><item><title>Pass delivery metrics from third-party providers</title><link>https://docs.customer.io/release-notes/2023-10-17-third-party-delivery-metrics/</link><pubDate>Tue, 17 Oct 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-10-17-third-party-delivery-metrics/</guid><description/></item><item><title>Retrieve a list of all workspaces</title><link>https://docs.customer.io/release-notes/2023-10-11-get-workspaces/</link><pubDate>Wed, 11 Oct 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-10-11-get-workspaces/</guid><description/></item><item><title>Hide sensitive data for Viewers</title><link>https://docs.customer.io/release-notes/2023-10-05-hide-data-viewers/</link><pubDate>Thu, 05 Oct 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-10-05-hide-data-viewers/</guid><description/></item><item><title>Google Tag Manager (GTM) destination</title><link>https://docs.customer.io/release-notes/2023-09-29-data-pipelines-gtm/</link><pubDate>Fri, 29 Sep 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-09-29-data-pipelines-gtm/</guid><description/></item><item><title>Reorganize in-app messages with drag-and-drop</title><link>https://docs.customer.io/release-notes/2023-09-11-in-app-drag-and-drop/</link><pubDate>Mon, 11 Sep 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-09-11-in-app-drag-and-drop/</guid><description/></item><item><title>Assign subscription topics in bulk to live campaigns and broadcasts</title><link>https://docs.customer.io/release-notes/2023-08-09-bulk-topic-assignment/</link><pubDate>Wed, 09 Aug 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-08-09-bulk-topic-assignment/</guid><description/></item><item><title>Jump to components in your in-app messages</title><link>https://docs.customer.io/release-notes/2023-08-09-in-app-message-outline/</link><pubDate>Wed, 09 Aug 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-08-09-in-app-message-outline/</guid><description>With the new message navigation panel, you can:
See the structure of your message at a glance Click to a component to go directly to it in your message Hide and show components, making it easier to focus on what matters</description></item><item><title>In-App Microsurveys</title><link>https://docs.customer.io/release-notes/2023-07-17-microsurveys/</link><pubDate>Mon, 17 Jul 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-07-17-microsurveys/</guid><description>In the past, setting up button components likely meant adding a series of parent and child components—grids, padding, etc—to your message that wasn&amp;rsquo;t always intuitive. The new Rating Scale and Survey components are preconfigured groups of components that you can add to your message, and they&amp;rsquo;re ready to use out of the box. But you can also customize these components to set button names, images, and action names that make sense to you and your audience.</description></item><item><title>Track metrics for subscription center topics</title><link>https://docs.customer.io/release-notes/2023-07-11-sub-center-metrics/</link><pubDate>Tue, 11 Jul 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-07-11-sub-center-metrics/</guid><description/></item><item><title>React Native SDK 3.0</title><link>https://docs.customer.io/release-notes/2023-07-05-react-native-3/</link><pubDate>Wed, 05 Jul 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-07-05-react-native-3/</guid><description/></item><item><title>Pre-built blocks for in-app messages</title><link>https://docs.customer.io/release-notes/2023-06-30-in-app-components/</link><pubDate>Fri, 30 Jun 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-06-30-in-app-components/</guid><description/></item><item><title>Override a subscription topic for a message</title><link>https://docs.customer.io/release-notes/2023-06-23-override-topic/</link><pubDate>Fri, 23 Jun 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-06-23-override-topic/</guid><description/></item><item><title>We've made our in-app editor more intuitive</title><link>https://docs.customer.io/release-notes/2023-06-14-in-app-editor-improvements/</link><pubDate>Wed, 14 Jun 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-06-14-in-app-editor-improvements/</guid><description>Sticky preview: The preview stays in view, so you can see your message as you edit it. Expanded editing space: We increased the size of the in-app message editor and reduced the impact of other UI elements, making more room for you to work on your messages. Expand and collapse elements: The hierarchy of elements in your message are clearer, and elements aren&amp;rsquo;t hidden by default when you start a new message from a template.</description></item><item><title>Create a custom subscription preferences page</title><link>https://docs.customer.io/release-notes/2023-06-06-custom-sub-pref-page/</link><pubDate>Tue, 06 Jun 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-06-06-custom-sub-pref-page/</guid><description/></item><item><title>Increased support for SSO providers</title><link>https://docs.customer.io/release-notes/2023-06-05-generic-sso/</link><pubDate>Mon, 05 Jun 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-06-05-generic-sso/</guid><description/></item><item><title>Customize the order of subscription center topics</title><link>https://docs.customer.io/release-notes/2023-06-01-customize-sub-center-topic-order/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-06-01-customize-sub-center-topic-order/</guid><description/></item><item><title>Dismiss in-app messages at the right time</title><link>https://docs.customer.io/release-notes/2023-06-01-in-app-dismiss-custom-action/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-06-01-in-app-dismiss-custom-action/</guid><description/></item><item><title>Relate objects to people in the UI</title><link>https://docs.customer.io/release-notes/2023-05-25-relate-objects-via-ui/</link><pubDate>Thu, 25 May 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-05-25-relate-objects-via-ui/</guid><description/></item><item><title>Multi-language support for the subscription center</title><link>https://docs.customer.io/release-notes/2023-05-17-translate-your-sub-center/</link><pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-05-17-translate-your-sub-center/</guid><description/></item><item><title>Securely verify requests for webhook actions</title><link>https://docs.customer.io/release-notes/2023-05-17-verify-webhook-actions/</link><pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-05-17-verify-webhook-actions/</guid><description/></item><item><title>SSO with Microsoft Azure Active Directory</title><link>https://docs.customer.io/release-notes/2023-05-12-azure-sso/</link><pubDate>Fri, 12 May 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-05-12-azure-sso/</guid><description/></item><item><title>Create multiple object types</title><link>https://docs.customer.io/release-notes/2023-05-11-multiple-object-types/</link><pubDate>Thu, 11 May 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-05-11-multiple-object-types/</guid><description>To create object types, go to Settings &amp;gt; Workspace Settings &amp;gt; Custom Objects. After creating a new type, you can access it under People in the left hand nav. Your plan determines the number of object types you can enable at a time. All of our self-service plans (Basic, Startup) follow the count for Essentials, whereas Startup+ has the same count as Premium and Enterprise plans. On July 1, we will start charging for objects (not types) that surpass the count included in your plan.</description></item><item><title>Brand your global unsubscribe page</title><link>https://docs.customer.io/release-notes/2023-05-10-global-unsubscribe-branding/</link><pubDate>Wed, 10 May 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-05-10-global-unsubscribe-branding/</guid><description/></item><item><title>Send transactional push notifications</title><link>https://docs.customer.io/release-notes/2023-05-08-transactional-api-for-push-notifications/</link><pubDate>Mon, 08 May 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-05-08-transactional-api-for-push-notifications/</guid><description/></item><item><title>Protecting your account via 2FA</title><link>https://docs.customer.io/release-notes/2023-05-01-2fa-via-email/</link><pubDate>Mon, 01 May 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-05-01-2fa-via-email/</guid><description/></item><item><title>Add dynamic expiration dates to in-app messages</title><link>https://docs.customer.io/release-notes/2023-04-29-add-dynamic-expiration-dates-to-in-app-messages/</link><pubDate>Fri, 28 Apr 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-04-29-add-dynamic-expiration-dates-to-in-app-messages/</guid><description>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 {{event.class_start_date}}.</description></item><item><title>Allow partial updates to subscription preferences</title><link>https://docs.customer.io/release-notes/2023-04-18-partial-update-preferences/</link><pubDate>Tue, 18 Apr 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-04-18-partial-update-preferences/</guid><description>With this update, you can also import each subscription topic preference as its own attribute via CSV.</description></item><item><title>Official Flutter SDK release</title><link>https://docs.customer.io/release-notes/2023-04-03-flutter-official-release/</link><pubDate>Mon, 03 Apr 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-04-03-flutter-official-release/</guid><description>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&amp;rsquo;s devices. As an officially-supported SDK, we&amp;rsquo;ll continue updating our Flutter library to support both OS updates and new features that we expose in Customer.io.</description></item><item><title>Send pushes to iOS devices with the default sound</title><link>https://docs.customer.io/release-notes/2023-03-30-push-with-default-sound/</link><pubDate>Thu, 30 Mar 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-03-30-push-with-default-sound/</guid><description>This only adds support for the default system sound. Our SDKs do not yet support custom sounds.</description></item><item><title>AMP for email</title><link>https://docs.customer.io/release-notes/2023-03-29-amp-for-email/</link><pubDate>Wed, 29 Mar 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-03-29-amp-for-email/</guid><description>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.</description></item><item><title>Import Objects and Relationships in Reverse ETL integrations</title><link>https://docs.customer.io/release-notes/2023-03-07-objects-reverse-etl/</link><pubDate>Tue, 07 Mar 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-03-07-objects-reverse-etl/</guid><description/></item><item><title>Official In-App Messaging Release</title><link>https://docs.customer.io/release-notes/2023-03-03-in-app-official-release/</link><pubDate>Fri, 03 Mar 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-03-03-in-app-official-release/</guid><description>While in beta, we&amp;rsquo;ve made some major improvements to our in-app solution:
We&amp;rsquo;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&amp;rsquo;re most relevant. Removed the need for an organization_id in integrations, so it&amp;rsquo;s easier to get started with in-app messages.</description></item><item><title>In-app settings: moved and improved</title><link>https://docs.customer.io/release-notes/2023-02-23-in-app-improvements/</link><pubDate>Thu, 23 Feb 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-02-23-in-app-improvements/</guid><description>In the improved editor, you can:
See all the settings in a block without having to &amp;ldquo;reveal&amp;rdquo; or &amp;ldquo;hide&amp;rdquo; 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&amp;rsquo;s easier to explain what each block or group of blocks does.</description></item><item><title>Rename your in-app messages</title><link>https://docs.customer.io/release-notes/2023-02-22-rename-in-app-messages/</link><pubDate>Wed, 22 Feb 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-02-22-rename-in-app-messages/</guid><description/></item><item><title>Customize your subscription center</title><link>https://docs.customer.io/release-notes/2023-02-21-subscription-center-branding/</link><pubDate>Tue, 21 Feb 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-02-21-subscription-center-branding/</guid><description/></item><item><title>Support for object-based segments in campaigns</title><link>https://docs.customer.io/release-notes/2023-02-16-segments-with-objects-in-campaigns/</link><pubDate>Thu, 16 Feb 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-02-16-segments-with-objects-in-campaigns/</guid><description>We&amp;rsquo;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!</description></item><item><title>Message limits with automatic retries</title><link>https://docs.customer.io/release-notes/2022-02-02-message-limit-auto-retry/</link><pubDate>Thu, 02 Feb 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-02-02-message-limit-auto-retry/</guid><description/></item><item><title>Objects: a new way to group people together</title><link>https://docs.customer.io/release-notes/2022-01-23-objects-beta/</link><pubDate>Mon, 23 Jan 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-01-23-objects-beta/</guid><description>To create objects, you&amp;rsquo;ll define their type—like companies, accounts, and so on. Then you&amp;rsquo;ll create them—this process is a bit like identifying people. You&amp;rsquo;ll identify an object, set its attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc. Use attributes to target people and personalize messages., and then add relationships to people.</description></item><item><title>Build a subscription center the easy way</title><link>https://docs.customer.io/release-notes/2023-01-20-subscription-center-beta/</link><pubDate>Fri, 20 Jan 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-01-20-subscription-center-beta/</guid><description>In the past, if you wanted to manage your audience&amp;rsquo;s subscription preferences, you would have had to set up attributes representing people&amp;rsquo;s preferences and apply preferences to messages with complicated segments or campaign filters. It was a confusing, error-prone process.
The new subscription center feature lets you set topics for your campaigns, broadcasts, and newsletters, and automates preference logic. When people click the Unsubscribe link in your messages, our default unsubscribe page now lets people pick their subscription preferences—providing an easy way for people to update their preferences and creating a way to retain subscribers who might not like all of your messages.</description></item><item><title>Automatic device cleanup</title><link>https://docs.customer.io/release-notes/2023-01-17-auto-delete-devices/</link><pubDate>Tue, 17 Jan 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-01-17-auto-delete-devices/</guid><description>This helps you maintain a better understanding of your audience&amp;rsquo;s devices, so you know which devices are relevant and can get a real device count—without having to clean up old devices yourself.</description></item><item><title>Send batch requests with our v2 API</title><link>https://docs.customer.io/release-notes/2023-01-10-track-v2-api/</link><pubDate>Tue, 10 Jan 2023 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2023-01-10-track-v2-api/</guid><description/></item><item><title>New Flutter SDK in Alpha</title><link>https://docs.customer.io/release-notes/2022-12-26-flutter-alpha/</link><pubDate>Mon, 26 Dec 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-12-26-flutter-alpha/</guid><description>We&amp;rsquo;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.</description></item><item><title>Send in-app messages to mobile or web channels with in-app page rules</title><link>https://docs.customer.io/release-notes/2022-12-07-target-platform-with-page-rules/</link><pubDate>Wed, 07 Dec 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-12-07-target-platform-with-page-rules/</guid><description/></item><item><title>True holdout tests</title><link>https://docs.customer.io/release-notes/2022-12-05-holdout-test/</link><pubDate>Mon, 05 Dec 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-12-05-holdout-test/</guid><description>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&amp;rsquo;t ideal. Now you can set up holdout tests with a simple checkbox!</description></item><item><title>Send transactional messages by Trigger Name</title><link>https://docs.customer.io/release-notes/2022-11-24-transactional-message-name/</link><pubDate>Wed, 30 Nov 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-11-24-transactional-message-name/</guid><description/></item><item><title>More predictable database-sync intervals</title><link>https://docs.customer.io/release-notes/2022-11-24-database-sync-intervals/</link><pubDate>Thu, 24 Nov 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-11-24-database-sync-intervals/</guid><description>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&amp;rsquo;re still importing from your database on a sync interval, we&amp;rsquo;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&amp;rsquo;ll always know when you can expect to see your data in Customer.</description></item><item><title>Amplitude and Mixpanel Integrations</title><link>https://docs.customer.io/release-notes/2022-11-17-amplitude-and-mixpanel-integrations/</link><pubDate>Thu, 17 Nov 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-11-17-amplitude-and-mixpanel-integrations/</guid><description>See our Amplitude and Mixpanel pages for more information about these integrations.</description></item><item><title>Multi-language transactional messages</title><link>https://docs.customer.io/release-notes/2022-11-17-multi-language-transactional/</link><pubDate>Thu, 17 Nov 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-11-17-multi-language-transactional/</guid><description/></item><item><title>Store and reuse images with the Asset Library</title><link>https://docs.customer.io/release-notes/2022-11-15-asset-library/</link><pubDate>Tue, 15 Nov 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-11-15-asset-library/</guid><description/></item><item><title>Set wildcards for in-app page rules</title><link>https://docs.customer.io/release-notes/2022-11-09-wildcard-page-rules/</link><pubDate>Wed, 09 Nov 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-11-09-wildcard-page-rules/</guid><description>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 (https//example.com/*/billing).</description></item><item><title>Expire in-app messages in hours or minutes</title><link>https://docs.customer.io/release-notes/2022-11-02-in-app-expiration-hours/</link><pubDate>Wed, 02 Nov 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-11-02-in-app-expiration-hours/</guid><description>As a part of this release, we&amp;rsquo;ve also changed the default expiration period from 365 days to 30 days.</description></item><item><title>Official React Native SDK release</title><link>https://docs.customer.io/release-notes/2022-10-26-official-react-native/</link><pubDate>Wed, 26 Oct 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-10-26-official-react-native/</guid><description/></item><item><title>Compare conversion events to your trigger events</title><link>https://docs.customer.io/release-notes/2022-10-24-compare-conversion-to-trigger/</link><pubDate>Mon, 24 Oct 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-10-24-compare-conversion-to-trigger/</guid><description>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&amp;rsquo;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!</description></item><item><title>Export delivery content to your data warehouse</title><link>https://docs.customer.io/release-notes/2022-10-21-dws-v4-content-schema/</link><pubDate>Fri, 21 Oct 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-10-21-dws-v4-content-schema/</guid><description>See the Delivery Content schema for information about the new table in v4. Go to the documentation link below for help updating to v4.
&amp;nbsp;Upgrade to v4 to use subjects and outputs
We&amp;rsquo;ve made some minor changes to subjects and outputs a part of our v4 release. If you&amp;rsquo;re using a previous schema version, we disabled your subjects and outputs on October 31st, 2022. You need to upgrade to schema version 4 or later, to continue syncing outputs and subjects data.</description></item><item><title>Copy newsletters across workspaces</title><link>https://docs.customer.io/release-notes/2022-10-17-copy-newsletters-broadcasts/</link><pubDate>Mon, 17 Oct 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-10-17-copy-newsletters-broadcasts/</guid><description/></item><item><title>We've updated our campaign trigger page</title><link>https://docs.customer.io/release-notes/2022-10-13-campaign-trigger-update/</link><pubDate>Thu, 13 Oct 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-10-13-campaign-trigger-update/</guid><description/></item><item><title>Export duplicates and devices for troubleshooting purposes</title><link>https://docs.customer.io/release-notes/2022-10-05-export-duplicates-and-devices/</link><pubDate>Thu, 06 Oct 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-10-05-export-duplicates-and-devices/</guid><description>This feature also adds the ability to export a list of devices. You might export devices to clean up bounced or suppressed devices.</description></item><item><title>Send rich push messages without writing custom payloads</title><link>https://docs.customer.io/release-notes/2022-10-05-push-composer-improvements/</link><pubDate>Wed, 05 Oct 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-10-05-push-composer-improvements/</guid><description>We&amp;rsquo;re rolling the new rich push editor out to accounts over the next week. Contact product@customer.io if you want to start using it today.</description></item><item><title>Wait until an event matches properties</title><link>https://docs.customer.io/release-notes/2022-09-22-wait-until-event-properties/</link><pubDate>Thu, 22 Sep 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-09-22-wait-until-event-properties/</guid><description>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&amp;rsquo;t cancelled their appointment before you send the reminder!</description></item><item><title>Use nested attributes with our simplified UI</title><link>https://docs.customer.io/release-notes/2022-09-20-simple-json-ui/</link><pubDate>Tue, 20 Sep 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-09-20-simple-json-ui/</guid><description>When you&amp;rsquo;re creating a segmentA group of people who match a series of conditions. People enter and exit the segment automatically when they match or stop matching conditions., you&amp;rsquo;ll now see two new operators:
Where at least one: lets you match an item in an array (a group of items surrounded by square brackets []). You can specify a value for simple arrays or a property to traverse arrays of objects.</description></item><item><title>React Native SDK in Open Beta</title><link>https://docs.customer.io/release-notes/2022-09-15-react-native-open-beta/</link><pubDate>Thu, 15 Sep 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-09-15-react-native-open-beta/</guid><description/></item><item><title>Add people in bulk via the API</title><link>https://docs.customer.io/release-notes/2022-09-14-upload-csv-api/</link><pubDate>Wed, 14 Sep 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-09-14-upload-csv-api/</guid><description/></item><item><title>Preview messages in your workflow</title><link>https://docs.customer.io/release-notes/2022-09-12-message-hover-preview/</link><pubDate>Mon, 12 Sep 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-09-12-message-hover-preview/</guid><description/></item><item><title>Email code editor using Parcel</title><link>https://docs.customer.io/release-notes/2022-09-08-parcel-for-everybody/</link><pubDate>Thu, 08 Sep 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-09-08-parcel-for-everybody/</guid><description/></item><item><title>In-App Messages now in open beta</title><link>https://docs.customer.io/release-notes/2022-09-08-in-app-open-beta/</link><pubDate>Thu, 08 Sep 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-09-08-in-app-open-beta/</guid><description>In-app messages provide a way to reach users from inside your app or on your website. You can customize your messages with branding that makes them look like a a part of your website or app, and even target messages to people who go to specific pages of your app or website. In-app messages can help you:
Invite users to try new features Remind users to turn on two-factor authentication (2FA) Tell your audience when a new version of your app is available Ask people if they want to turn on push notifications after they leave your app a positive review When you Enable in-app messaging, you&amp;rsquo;ll set up the in-app messages that you want to use in campaigns.</description></item><item><title>Experimental feature: Parcel email code editor</title><link>https://docs.customer.io/release-notes/2022-08-23-parcel-experimental-feature/</link><pubDate>Tue, 23 Aug 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-08-23-parcel-experimental-feature/</guid><description>Parcel generates responsive previews, helping you better understand how your email will look to users in both light and dark modes. It includes an autocomplete feature that makes it easier to write HTML, CSS, and liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person&amp;rsquo;s first name, you might use the variable {{customer.first_name}}.. And it comes with an Inspect Element mode that helps you focus on code when you click an element in your preview.</description></item><item><title>Twilio MMS Support</title><link>https://docs.customer.io/release-notes/2022-08-22-twilio-mms-support/</link><pubDate>Mon, 22 Aug 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-08-22-twilio-mms-support/</guid><description>When you set up an SMS message, you can add the URL of a JPEG, PNG, and GIF image. You can send images up to 1.5MB to people with phone numbers in the United States and Canada. In general, we recommend that you limit images to 1MB or less, so that everybody in your audience can see them regardless of their connection speed.</description></item><item><title>Event conversions for newsletters</title><link>https://docs.customer.io/release-notes/2022-07-19-event-conversions-newsletters/</link><pubDate>Tue, 19 Jul 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-07-19-event-conversions-newsletters/</guid><description/></item><item><title>Segment and filter against complex arrays and JSON</title><link>https://docs.customer.io/release-notes/2022-07-12-json-in-segments/</link><pubDate>Tue, 12 Jul 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-07-12-json-in-segments/</guid><description> You can use JSON dot notation directly in segment rules and other conditions. When you reference an array, you can set the index you want to match in a segment condition or leave the index empty to match any value in the array.
Match any item in array: array[] Match first item in array: array[0] Match child property in any object in array: array[].child</description></item><item><title>Upload events via CSV</title><link>https://docs.customer.io/release-notes/2022-07-05-events-upload-csv/</link><pubDate>Tue, 05 Jul 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-07-05-events-upload-csv/</guid><description/></item><item><title>Generate conversions from events</title><link>https://docs.customer.io/release-notes/2022-07-01-event-conversions/</link><pubDate>Fri, 01 Jul 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-07-01-event-conversions/</guid><description>In the past, you could only manage conversions with segments, which was sometimes cumbersome: you may have had to create new segments specifically to record conversions. People could also match your conversion segment criteria outside a campaign which could lead to inaccurate conversion metrics.
Now you can also set your campaign goal to an event. This makes it easier to set conversion criteria: you don&amp;rsquo;t have to set up a segment anymore, and you can make conversion criteria specific to your campaign&amp;rsquo;s call to action.</description></item><item><title>Export your workflow as an image</title><link>https://docs.customer.io/release-notes/2022-06-14-export-workflow-image/</link><pubDate>Tue, 14 Jun 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-06-14-export-workflow-image/</guid><description>Click in the upper right of the workflow to export your workflow as an image.</description></item><item><title>Set up *Wait until* delays based on attribute and event conditions</title><link>https://docs.customer.io/release-notes/2022-06-06-wait-until-changes/</link><pubDate>Mon, 06 Jun 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-06-06-wait-until-changes/</guid><description/></item><item><title>Localize campaigns and broadcasts without complicated workflows!</title><link>https://docs.customer.io/release-notes/2022-06-02-localize-campaigns/</link><pubDate>Thu, 02 Jun 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-06-02-localize-campaigns/</guid><description>When you write messages in your campaign, you&amp;rsquo;ll set up a default message and click Add language to set up localizations of your message. When people enter your campaign, they&amp;rsquo;ll receive messages matching their language attribute. People who don&amp;rsquo;t match a language in your newsletter receive the default message.
Localized items in your workflow show the icon.
This makes it easier to localize messages in your campaigns, and generates unified metrics from localized messages, making it easier for you to tell how your message perform with your audience.</description></item><item><title>Android SDK 2.0 release</title><link>https://docs.customer.io/release-notes/2022-06-01-android-2-release/</link><pubDate>Wed, 01 Jun 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-06-01-android-2-release/</guid><description>The Processing Queue automatically queues and batches requests, saving your audience&amp;rsquo;s battery life and automatically handling errors for you. The SDK now automatically captures a set of Device Attributes and grants you the ability to set your own, custom attributes for each device you register with Customer.io. You can use these properties in segmentsA segment is a group of people in your workspace. Use segments to trigger campaigns, track membership over time, or fine-tune your audience.</description></item><item><title>iOS SDK 1.1.0 release</title><link>https://docs.customer.io/release-notes/2022-06-01-ios-1.1-release/</link><pubDate>Wed, 01 Jun 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-06-01-ios-1.1-release/</guid><description/></item><item><title>Segment Source integration now supports all channels</title><link>https://docs.customer.io/release-notes/2022-05-18-segment-source-all-channels/</link><pubDate>Wed, 18 May 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-05-18-segment-source-all-channels/</guid><description/></item><item><title>Try out new experimental features</title><link>https://docs.customer.io/release-notes/2022-05-13-experimental-features/</link><pubDate>Fri, 13 May 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-05-13-experimental-features/</guid><description/></item><item><title>Export your data on regular intervals to Microsoft Azure Blob Storage</title><link>https://docs.customer.io/release-notes/2022-05-12-azure-blob-storage/</link><pubDate>Thu, 12 May 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-05-12-azure-blob-storage/</guid><description/></item><item><title>Capture custom metrics in periods longer than 120 days</title><link>https://docs.customer.io/release-notes/2022-05-02-metric-date-ranges/</link><pubDate>Mon, 02 May 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-05-02-metric-date-ranges/</guid><description/></item><item><title>Submit forms without writing code</title><link>https://docs.customer.io/release-notes/2022-04-22-html-form-action/</link><pubDate>Fri, 22 Apr 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-04-22-html-form-action/</guid><description>Like other form integrations, this feature also lets you trigger campaigns when people fill out your form, so you can automatically respond to your audience with information relevant to the forms they submit.</description></item><item><title>Batch update: update a group of people related to an account, order, job, or another object</title><link>https://docs.customer.io/release-notes/2022-04-21-batch-update/</link><pubDate>Thu, 21 Apr 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-04-21-batch-update/</guid><description>Historically, interactions in Customer.io have been one-to-one: a person performs an event, triggering a campaign; a person gains (or loses) an attribute, triggering a campaign. Now, you can associate an individual piece of data from incoming webhook, with a group of people. When you run a batch update, you&amp;rsquo;ll update attributes for, or send events to, a group of up to 1000 people.
For example, if you support multiple users in a single account, you might send a webhook to Customer.</description></item><item><title>Schedule your database sync start time</title><link>https://docs.customer.io/release-notes/2022-03-29-schedule-sync-start/</link><pubDate>Tue, 29 Mar 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-03-29-schedule-sync-start/</guid><description/></item><item><title>See where Snippets are used</title><link>https://docs.customer.io/release-notes/2022-03-25-snippet-search-and-delete/</link><pubDate>Fri, 25 Mar 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-03-25-snippet-search-and-delete/</guid><description/></item><item><title>Segment and filter people based on device attributes</title><link>https://docs.customer.io/release-notes/2022-03-25-device-attributes/</link><pubDate>Fri, 25 Mar 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-03-25-device-attributes/</guid><description>For each device, our APIs automatically gather the platform and set a last_used timestamp based on when you last added or updating a device.
If you use our SDKs, we also capture attributes containing additional device information. You can also add your own custom attributes on devices; these are additional values that you think are relevant to the devices in your mobile audience.
You can use all of these attributes, both automatically-gathered and custom attributes, in segments, filters, etc.</description></item><item><title>Use Javascript to personalize actions</title><link>https://docs.customer.io/release-notes/2022-03-17-js-in-actions/</link><pubDate>Thu, 17 Mar 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-03-17-js-in-actions/</guid><description>For example, where you might have checked if a variable existed by writing a complicated Liquid if statement, you can now write simple JavaScript instead!
JavaScript JavaScript return trigger.plan_name ?? &amp;#39;free_trial&amp;#39;; Liquid Liquid {% if trigger.plan_name != blank %} {{ trigger.plan_name }} {% else %} free_trial {% endif %}</description></item><item><title>Segment and filter on device attributes</title><link>https://docs.customer.io/release-notes/2022-03-07-segment-devices/</link><pubDate>Mon, 07 Mar 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-03-07-segment-devices/</guid><description>Our SDKs gather these attributes automatically, but you can also set them when you add and update devices using our API. The last_status attribute is set automatically based on the delivery status of the last message sent to the device—sent, bounced, suppressed, or an empty string if the device hasn&amp;rsquo;t received a push notification before.</description></item><item><title>Updated integration catalog view</title><link>https://docs.customer.io/release-notes/2022-03-04-integration-catalog-update/</link><pubDate>Fri, 04 Mar 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-03-04-integration-catalog-update/</guid><description/></item><item><title>Beta API official release</title><link>https://docs.customer.io/release-notes/2022-02-28-beta-api-official-release/</link><pubDate>Mon, 28 Feb 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-02-28-beta-api-official-release/</guid><description>If you&amp;rsquo;re currently integrated with &amp;ldquo;beta-api&amp;rdquo; endpoints, you can continue to use those routes, but we encourage you to update your integration to use the new https://api.customer.io/v1/ paths. Beta API endpoints will continue to work, but we may eventually deprecate and remove them in the future (with advanced notice).</description></item><item><title>Create or update people in your workflows</title><link>https://docs.customer.io/release-notes/2022-02-23-create-update-person/</link><pubDate>Wed, 23 Feb 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-02-23-create-update-person/</guid><description/></item><item><title>Filters in the Message Library</title><link>https://docs.customer.io/release-notes/2022-02-16-message-library-filters/</link><pubDate>Wed, 16 Feb 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-02-16-message-library-filters/</guid><description/></item><item><title>Create event in any campaign</title><link>https://docs.customer.io/release-notes/2022-02-10-create-event-all-campaigns/</link><pubDate>Thu, 10 Feb 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-02-10-create-event-all-campaigns/</guid><description>This release also makes it easier to add properties to your events, letting you click to select the values that you want your event to include so you don&amp;rsquo;t have to write liquid.</description></item><item><title>Capture forms from Wordpress using WPForms</title><link>https://docs.customer.io/release-notes/2022-01-31-wordpress-forms/</link><pubDate>Mon, 31 Jan 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-01-31-wordpress-forms/</guid><description>We developed and tested Wordpress form support with the WPForms plugin. You may be able to capture forms from other form plugins in Wordpress, but we cannot guarantee that they&amp;rsquo;ll work. Let us know if you use a different plugin and run into compatibility issues. We&amp;rsquo;ll do our best to support your use case.</description></item><item><title>Allow changes to email with an ID</title><link>https://docs.customer.io/release-notes/2022-01-28-update-email-with-id/</link><pubDate>Fri, 28 Jan 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-01-28-update-email-with-id/</guid><description>In workspaces created before today, if you use both email and id to identify people, you needed to use cio_id to change either value—a value that you might not have available to your integration. This setting lets you change email values with id, making it easier to modify your audience without preventing you from identifying people by their email address.</description></item><item><title>Send multi-language newsletters the easy way!</title><link>https://docs.customer.io/release-notes/2022-01-28-localize-newsletters/</link><pubDate>Fri, 28 Jan 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-01-28-localize-newsletters/</guid><description>Now, you can specify the attribute that represents your audience&amp;rsquo;s language preference in your workspace settings. This attribute can be either a language code (like es for Spanish) or a language and country code (i.e. es-ES representing Spanish formatted for people in Spain).
When you write your newsletter, you&amp;rsquo;ll set up a Default message and click to add languages. When you send your newsletter, people in your audience receive the message matching their language attribute.</description></item><item><title>Import people from Amazon Redshift</title><link>https://docs.customer.io/release-notes/2022-01-20-amazon-redshift-sync/</link><pubDate>Thu, 20 Jan 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-01-20-amazon-redshift-sync/</guid><description>When you set up a sync, you provide a query determining the information that you want to reflect as attributes on people in Customer.io. You&amp;rsquo;ll also set the frequency of import operations from your Redshift instance. On each interval, you&amp;rsquo;ll import and/or update people in your workspace from your Redshift database!</description></item><item><title>Official iOS and Android SDKs</title><link>https://docs.customer.io/release-notes/2022-01-19-official-mobile-sdk/</link><pubDate>Wed, 19 Jan 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-01-19-official-mobile-sdk/</guid><description>&amp;nbsp;Check out our sample apps
Our sample apps provide real-world examples that can help you implement our SDKs. Check them out for iOS and Android! We&amp;rsquo;re developing our SDKs in parallel, so that both your Android and iOS apps provide the same experiences. For now, that means that you can do the following with both of our SDKs:
Identify people who use your app. When you identify someone, you&amp;rsquo;ll also register their device token and you can update their attributesA key-value pair that you associate with a person or an object—like a person&amp;rsquo;s name, the date they were created in your workspace, or a company&amp;rsquo;s billing date etc.</description></item><item><title>Import people from your Microsoft SQL Server</title><link>https://docs.customer.io/release-notes/2022-01-14-microsoft-sql-in/</link><pubDate>Fri, 14 Jan 2022 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2022-01-14-microsoft-sql-in/</guid><description>When you set up a sync, you provide a query determining exactly what information you want to reflect as attributes on people in Customer.io. You&amp;rsquo;ll also set the frequency of import operations from your Microsoft SQL instance, helping you keep your workspace up to date.</description></item><item><title>Direct integration with Jotform</title><link>https://docs.customer.io/release-notes/2021-12-22-jotform/</link><pubDate>Wed, 22 Dec 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-12-22-jotform/</guid><description/></item><item><title>Import people from Google BigQuery</title><link>https://docs.customer.io/release-notes/2021-12-20-bigquery-in/</link><pubDate>Mon, 20 Dec 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-12-20-bigquery-in/</guid><description>When you set up a sync, you provide a query determining exactly what information you want to reflect as attributes on people in Customer.io. You&amp;rsquo;ll also set the frequency of import operations from your BigQuery instance.
Your query can use a {{last_sync_time}} variable, making it easy for you to limit each import operation to changes made since the previous interval.</description></item><item><title>Convert incoming webhooks to events the easy way</title><link>https://docs.customer.io/release-notes/2021-12-17-create-event-action/</link><pubDate>Fri, 17 Dec 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-12-17-create-event-action/</guid><description/></item><item><title>Segment people by mobile device platform</title><link>https://docs.customer.io/release-notes/segment-people-by-mobile-device-platform/</link><pubDate>Fri, 17 Dec 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/segment-people-by-mobile-device-platform/</guid><description/></item><item><title>Import people from Snowflake</title><link>https://docs.customer.io/release-notes/2021-12-14-snowflake-in/</link><pubDate>Tue, 14 Dec 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-12-14-snowflake-in/</guid><description>When you set up a sync, you provide a query determining exactly what information you want to reflect as attributes on people in Customer.io. You&amp;rsquo;ll also set the frequency of import operations from your Snowflake instance.
Your query can use a {{last_sync_time}} variable, making it easy for you to limit each import operation to changes made since the previous interval.
&amp;nbsp;You must map Snowflake columns to attributes
Snowflake columns are all caps, but attributes in Customer.</description></item><item><title>Track screen views</title><link>https://docs.customer.io/release-notes/2021-12-14-track-screen-views/</link><pubDate>Tue, 14 Dec 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-12-14-track-screen-views/</guid><description/></item><item><title>Schedule transactional messages</title><link>https://docs.customer.io/release-notes/2021-12-10-transactional-send-at/</link><pubDate>Fri, 10 Dec 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-12-10-transactional-send-at/</guid><description/></item><item><title>Increased database sync sizes and improved error handling</title><link>https://docs.customer.io/release-notes/2021-12-01-sql-sync-row-increase/</link><pubDate>Wed, 01 Dec 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-12-01-sql-sync-row-increase/</guid><description/></item><item><title>Created and updated dates on segments and campaigns</title><link>https://docs.customer.io/release-notes/2021-11-30-campaign-segment-dates/</link><pubDate>Tue, 30 Nov 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-11-30-campaign-segment-dates/</guid><description/></item><item><title>Data Campaigns: Zapier-like data transformations in Customer.io</title><link>https://docs.customer.io/release-notes/2021-11-30-data-campaigns/</link><pubDate>Tue, 30 Nov 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-11-30-data-campaigns/</guid><description>When you set up a campaign, you can use the new Data arrives via webhook option. Provide this unique URL to an external service, like Satismeter, Stripe, or Zendesk, to send data to your workspace.
Then, in your data campaign, you can reshape your incoming data using liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person&amp;rsquo;s first name, you might use the variable {{customer.</description></item><item><title>Direct integration with Typeform</title><link>https://docs.customer.io/release-notes/2021-11-24-typeform/</link><pubDate>Wed, 24 Nov 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-11-24-typeform/</guid><description/></item><item><title>Deduplicate email newsletter recipients</title><link>https://docs.customer.io/release-notes/2021-11-19-newsletter-dedupe/</link><pubDate>Fri, 19 Nov 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-11-19-newsletter-dedupe/</guid><description/></item><item><title>SSL connections for MySQL and Postgres integrations</title><link>https://docs.customer.io/release-notes/2021-11-04-ssl-db-integrations/</link><pubDate>Thu, 04 Nov 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-11-04-ssl-db-integrations/</guid><description/></item><item><title>Sharing Google Sheets with Customer.io</title><link>https://docs.customer.io/release-notes/2021-10-29-google-sheet-share/</link><pubDate>Fri, 29 Oct 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-10-29-google-sheet-share/</guid><description/></item><item><title>Collection queries: match an item in an array</title><link>https://docs.customer.io/release-notes/2021-10-28-query-collection-arrays/</link><pubDate>Thu, 28 Oct 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-10-28-query-collection-arrays/</guid><description/></item><item><title>Shortcuts: Use Customer.io as your back-office tool</title><link>https://docs.customer.io/release-notes/2021-10-27-shortcuts-for-people/</link><pubDate>Wed, 27 Oct 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-10-27-shortcuts-for-people/</guid><description>Shortcuts let you link people in Customer.io to external services. You can even set up webhook &amp;ldquo;shortcuts&amp;rdquo; to call external APIs from a person&amp;rsquo;s page in Customer.io.
Shortcuts act as simple, low- or no-code integrations. With just a little bit of liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person&amp;rsquo;s first name, you might use the variable {{customer.first_name}}., you can personalize links and simple API calls for services outside Customer.</description></item><item><title>Add sticky notes to your workflow</title><link>https://docs.customer.io/release-notes/2021-10-21-sticky-notes/</link><pubDate>Thu, 21 Oct 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-10-21-sticky-notes/</guid><description/></item><item><title>Segment source integrations support people without an ID</title><link>https://docs.customer.io/release-notes/2021-10-12-segment-source-email/</link><pubDate>Tue, 12 Oct 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-10-12-segment-source-email/</guid><description/></item><item><title>Automatically resolve duplicate people</title><link>https://docs.customer.io/release-notes/2021-10-05-auto-merge/</link><pubDate>Tue, 05 Oct 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-10-05-auto-merge/</guid><description>You can enable the Multi-identifier profile merge setting to automatically merge duplicate profiles under Settings &amp;gt; Workspace Settings &amp;gt; Merge Settings. If you created your workspace using the email or ID option after September 24, 2021, this setting is on by default.
When you turn on the Multi-identifier profile merge setting, we&amp;rsquo;ll automatically recognize and merge duplicate profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.</description></item><item><title>See recent journeys</title><link>https://docs.customer.io/release-notes/2021-10-05-see-recent-journeys/</link><pubDate>Tue, 05 Oct 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-10-05-see-recent-journeys/</guid><description/></item><item><title>Segment people based on messages in a campaign</title><link>https://docs.customer.io/release-notes/2021-10-05-segment-on-message/</link><pubDate>Tue, 05 Oct 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-10-05-segment-on-message/</guid><description>When you create a segment, select the message type under Message Data. Then you can click Any , and search for the campaigns or individual messages that you want to segment on by name.</description></item><item><title>Resolve duplicate people using the API</title><link>https://docs.customer.io/release-notes/2021-09-24-merge-people-api/</link><pubDate>Fri, 24 Sep 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-09-24-merge-people-api/</guid><description/></item><item><title>Find messages with the new Message Library</title><link>https://docs.customer.io/release-notes/2021-09-20-message-library/</link><pubDate>Mon, 20 Sep 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-09-20-message-library/</guid><description/></item><item><title>Merge and resolve duplicate profiles</title><link>https://docs.customer.io/release-notes/2021-09-17-resolve-duplicate-people/</link><pubDate>Fri, 17 Sep 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-09-17-resolve-duplicate-people/</guid><description>In the past, if you inadvertently represented the same person multiple times in your workspace, you couldn&amp;rsquo;t resolve the issue without deleting duplicates and potentially losing information in the process.
Now, you can merge two people together and resolve duplicates without losing information or historical data associated with two profilesAn instance of a person. Generally, a person is synonymous with their profile; there should be a one-to-one relationship between a real person and their profile in Customer.</description></item><item><title>Send webhooks for a newsletter audience</title><link>https://docs.customer.io/release-notes/2021-09-03-newsletter-webhooks/</link><pubDate>Fri, 03 Sep 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-09-03-newsletter-webhooks/</guid><description/></item><item><title>SQL Sync: import people from a MySQL or Postgres database</title><link>https://docs.customer.io/release-notes/2021-08-26-sql-sync/</link><pubDate>Thu, 26 Aug 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-08-26-sql-sync/</guid><description>When you set up a sync, you can determine how often you want to import data. You also provide your own query, determining exactly what information you want to reflect as attributes on people in Customer.io.
Our queries also include a {{last_sync_time}} variable, providing a quick way for you to target each sync to changes made since the previous sync interval.</description></item><item><title>Edit and delete saved rows in the drag-and-drop editor</title><link>https://docs.customer.io/release-notes/2021-08-24-delete-rows/</link><pubDate>Tue, 24 Aug 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-08-24-delete-rows/</guid><description/></item><item><title>Disable open tracking</title><link>https://docs.customer.io/release-notes/2021-08-13-disable-open-tracking/</link><pubDate>Fri, 13 Aug 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-08-13-disable-open-tracking/</guid><description>Open tracking relies on a &amp;ldquo;tracking pixel&amp;rdquo; in your messages. When a person opens your message, the tracking pixel loads, alerting your email delivery provider that the person opened the email.
While email open tracking can provide you with an at-a-glance understanding of audience engagement, it is made increasingly unreliable by email clients that allow users to block images from loading when they open messages.
Now, when you go to Settings &amp;gt; Workspace Settings &amp;gt; General Workspace Settings, you can disable open tracking all together, so you can focus on other, more reliable and meaningful metrics, like Clicks and Conversions.</description></item><item><title>Connect web forms to your workspace</title><link>https://docs.customer.io/release-notes/2021-08-11-connected-forms/</link><pubDate>Tue, 10 Aug 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-08-11-connected-forms/</guid><description>You can integrate directly with our new /forms API, or you can add forms on the new Data &amp;amp; Integrations &amp;gt; Integrations &amp;gt; Forms page and use the connected forms JavaScript snippet. This new JavaScript snippet captures form fields and URL parameters from forms, and sends submissions back to Customer.io.
To use our form-scanning service, you need to install the Custom forms JavaScript snippet. This snippet is different from our basic JavaScript snippet and captures form submission events from:</description></item><item><title>Campaign and Journey Metrics Update</title><link>https://docs.customer.io/release-notes/2021-08-05-campaign-overview/</link><pubDate>Wed, 04 Aug 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-08-05-campaign-overview/</guid><description>The Overview tab is reorganized to provide you with a better at-a-glance view of your campaign&amp;rsquo;s health and performance.
The Metrics tab replaces the Journey Metrics tab. On both tabs, you&amp;rsquo;ll find a calendar and settings to customize the scope of your metrics. For charts on the metrics page, you can toggle the specific metrics that you want to see or want to hide.</description></item><item><title>Save rows in the drag-and-drop editor</title><link>https://docs.customer.io/release-notes/2021-08-03-save-rows/</link><pubDate>Tue, 03 Aug 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-08-03-save-rows/</guid><description/></item><item><title>Message metrics are now based on the number of delivered messages</title><link>https://docs.customer.io/release-notes/2021-07-15-denominator-update/</link><pubDate>Thu, 15 Jul 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-07-15-denominator-update/</guid><description>However, if you don&amp;rsquo;t pass delivered metrics from your delivery provider to to Customer.io, you can continue basing metrics on the number of messages sent. You can change your Metric Configuration on the Custom SMTP settings page.</description></item><item><title>CSV Upload by Email or ID</title><link>https://docs.customer.io/release-notes/2021-07-15-csv-upload-multi-id/</link><pubDate>Tue, 13 Jul 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-07-15-csv-upload-multi-id/</guid><description/></item><item><title>Identify people on tracked link clicks using the JS snippet</title><link>https://docs.customer.io/release-notes/2021-07-12-auto-identify-js-snippet/</link><pubDate>Mon, 12 Jul 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-07-12-auto-identify-js-snippet/</guid><description/></item><item><title>Associate anonymous events with people</title><link>https://docs.customer.io/release-notes/2021-07-08-anonymous-event-merge/</link><pubDate>Thu, 08 Jul 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-07-08-anonymous-event-merge/</guid><description>This feature changes anonymous events to require an anonymous_id—a value representing the un-identified person. When you identify a person, if you set their anonymous_id attribute to a value represented in anonymous events, those events are associated with the appropriate person.
Our JavaScript snippet automatically sets this anonymous ID, both on events and identified people, making it easy to capture anonymous events. When you send events or identify people using our API, you need to set anonymous_id yourself.</description></item><item><title>Capture URL parameters in pageviews</title><link>https://docs.customer.io/release-notes/2021-07-08-url-params-in-pageviews/</link><pubDate>Thu, 08 Jul 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-07-08-url-params-in-pageviews/</guid><description/></item><item><title>Segment on page view event parameters</title><link>https://docs.customer.io/release-notes/2021-07-08-url-params-in-segments/</link><pubDate>Thu, 08 Jul 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-07-08-url-params-in-segments/</guid><description/></item><item><title>Unsubscribe links are automatically untracked</title><link>https://docs.customer.io/release-notes/2021-06-24-untracked-unsubscribes/</link><pubDate>Thu, 24 Jun 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-06-24-untracked-unsubscribes/</guid><description/></item><item><title>Enable multiple identifiers in your current workspace</title><link>https://docs.customer.io/release-notes/2021-05-28-multi-id-workspace/</link><pubDate>Wed, 16 Jun 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-05-28-multi-id-workspace/</guid><description>You&amp;rsquo;ll find new workspace settings, letting you enable multiple identifiers, when you go to Settings &amp;gt; Workspace Settings and click General Workspace Settings.
When you change your workspace configuration, we first validate people in your workspace, to ensure that you don&amp;rsquo;t lose any information when enabling new identifiers. If people in your workspace have duplicate or invalid email or id values (depending on the new identifier in your workspace), we&amp;rsquo;ll export a list of problem-profiles for you.</description></item><item><title>Consolidate leads and customers in the same workspace</title><link>https://docs.customer.io/release-notes/2021-05-28-multi-id-workspace/</link><pubDate>Fri, 28 May 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-05-28-multi-id-workspace/</guid><description>Previously, workspaces supported a single identifier for people—one of either ID or email. This made it difficult to track users who entered your system as a lead (by email) and graduated to a customer (with an ID). You couldn&amp;rsquo;t easily keep a complete history of a lead who graduated to a customer because this person was represented across two workspaces.
With this new workspace type, you can add people to your workspace by either email address or ID, and you can update those identifiers later.</description></item><item><title>Search for attributes belonging to a person</title><link>https://docs.customer.io/release-notes/2021-05-27-searchable-attributes/</link><pubDate>Thu, 27 May 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-05-27-searchable-attributes/</guid><description/></item><item><title>Webhook conversions</title><link>https://docs.customer.io/release-notes/2021-05-13-webhook-conversions/</link><pubDate>Thu, 13 May 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-05-13-webhook-conversions/</guid><description/></item><item><title>Twilio opt-out keyword handling</title><link>https://docs.customer.io/release-notes/2021-04-23-sms-keyword-handling/</link><pubDate>Fri, 23 Apr 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-04-23-sms-keyword-handling/</guid><description/></item><item><title>Data Warehouse Sync UI</title><link>https://docs.customer.io/release-notes/2021-03-22-data-warehouse-sync-ui/</link><pubDate>Mon, 22 Mar 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-03-22-data-warehouse-sync-ui/</guid><description>Data warehouse integrations let you export your data in bulk, so you can take advantage of your complete Customer.io data set in Google BigQuery, Snowflake, and other business intelligence or CRM platforms.
To set up a data warehouse integration, go to Integrations &amp;gt; Databases and select the platform you want to export data to.</description></item><item><title>Disable link tracking in the drag-and-drop editor</title><link>https://docs.customer.io/release-notes/2021-03-20-untrack-unsubscribe-links-ui/</link><pubDate>Sat, 20 Mar 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-03-20-untrack-unsubscribe-links-ui/</guid><description/></item><item><title>Search for Team Members in your Workspace</title><link>https://docs.customer.io/release-notes/2021-03-14-workspace-user-search/</link><pubDate>Sun, 14 Mar 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-03-14-workspace-user-search/</guid><description/></item><item><title>Twilio WhatsApp Support</title><link>https://docs.customer.io/release-notes/2021-03-04-twilio-whatsapp-support/</link><pubDate>Thu, 04 Mar 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-03-04-twilio-whatsapp-support/</guid><description>To support Twilio WhatsApp messages, you must set up access to the WhatsApp Business API. When you do, contact win@customer.io, and we&amp;rsquo;ll enable WhatsApp support for your account.</description></item><item><title>Liquid Filters: Format Numbers and Negative Conditions</title><link>https://docs.customer.io/release-notes/2021-02-20-liquid-format-numbers/</link><pubDate>Sat, 20 Feb 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-02-20-liquid-format-numbers/</guid><description>We added three new liquid filters:
The currency and format_number take regional parameters, so you can format numbers to suit your audience&amp;rsquo;s local conventions. For example: {{ 123456.78 | currency: &amp;quot;fr&amp;quot; }} outputs 123 456,78€. The where_not condition lets match negative conditions—people who do not match an attribute value or an event where a value isn’t present.</description></item><item><title>Facebook Lead Ads Integration</title><link>https://docs.customer.io/release-notes/2021-02-10-facebook-lead-ads/</link><pubDate>Wed, 10 Feb 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-02-10-facebook-lead-ads/</guid><description/></item><item><title>Copy Entire Workflows Across Campaigns</title><link>https://docs.customer.io/release-notes/2021-02-02-copy-whole-workflow/</link><pubDate>Tue, 02 Feb 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-02-02-copy-whole-workflow/</guid><description/></item><item><title>Multi-select, Copy, and Move in the Workflow Builder</title><link>https://docs.customer.io/release-notes/2021-02-02-multi-copy-vwb/</link><pubDate>Tue, 02 Feb 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-02-02-multi-copy-vwb/</guid><description/></item><item><title>Segment on Newsletter Test Variants</title><link>https://docs.customer.io/release-notes/2021-02-01-newsletter-variant-segments/</link><pubDate>Mon, 01 Feb 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-02-01-newsletter-variant-segments/</guid><description/></item><item><title>Email Addresses as Unique People</title><link>https://docs.customer.io/release-notes/2021-01-26-email-based-workspaces/</link><pubDate>Tue, 26 Jan 2021 00:00:00 +0000</pubDate><guid>https://docs.customer.io/release-notes/2021-01-26-email-based-workspaces/</guid><description>When you use email as your workspace’s unique key, each email address represents a unique person, helping you manage your audience directly by email address. To use email addresses as your unique key, create a new workspace and choose to identify people by “Email address”.
If you want to explore the possibility of converting an existing workspace to identify people by email address, contact win@customer.io.</description></item><item><title/><link>https://docs.customer.io/academy/quick-guides/analyze-with-agent/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/analyze-with-agent/</guid><description>Scenario: The follow-up questions never stop You&amp;rsquo;ve reviewed your onboarding campaign workflow and spotted a potential bottleneck. Your welcome email is getting solid opens, but fewer people than expected are clicking through to the next step. You have a hunch, but you want data to back it up before you start making changes.
And that&amp;rsquo;s just the first thing you want to look into. You also want to know how this compares to last month, whether other onboarding campaigns have the same drop-off, and what the click-to-open rate looks like on that welcome email.</description></item><item><title/><link>https://docs.customer.io/academy/quick-guides/liquid-loops/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/liquid-loops/</guid><description>Have you ever needed to personalize a message by including a list of items like dishes in a takeout order confirmation, or a history of deposits? The challenge comes when the list is of unknown or variable length.
How to create a loop The Liquid syntax for writing a loop is:
{% for item in array %} {{item}} {% endfor %} Let&amp;rsquo;s imagine we have a list of products on a customer&amp;rsquo;s receipt, formatted as JSON and sent to Customer.</description></item><item><title/><link>https://docs.customer.io/academy/quick-guides/team-lead/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/team-lead/</guid><description>What&amp;rsquo;s a team lead? As a Team Lead in Customer.io Academy, you have the ability to manage training for your team. This means you can enroll team members into courses, track their progress, and ensure everyone has the skills they need to succeed with Customer.io.
Team Leads typically include:
Department managers overseeing their team&amp;rsquo;s learning Regional leaders managing training for their location People Ops managers coordinating onboarding Training coordinators ensuring compliance or certification What you can do as a team lead Enroll your team into training Assign specific courses or learning paths to individuals or groups on your team.</description></item><item><title>Academy Course Catalog</title><link>https://docs.customer.io/academy/catalog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/catalog/</guid><description/></item><item><title>Act on your data</title><link>https://docs.customer.io/academy/data/goals/act-on-your-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/goals/act-on-your-data/</guid><description>Scenario: &amp;ldquo;So what are we doing about it?&amp;rdquo; Your goal is fully set up with criteria, impact, sources, and attribution settings. The data has been flowing for a few weeks. You sit down with your manager and walk through the goal report.
She can see total upgrades, revenue, and a breakdown by source. Some campaigns are driving more upgrades. Some are driving more revenue. And a chunk of upgrades are unattributed.</description></item><item><title>Activity</title><link>https://docs.customer.io/academy/quick-guides/choose-message/message-activity/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/choose-message/message-activity/</guid><description/></item><item><title>Add context for humans (and AI)</title><link>https://docs.customer.io/academy/data/course-3/document-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-3/document-data/</guid><description>Scenario: What does this even mean? A new teammate just joined your team at Sketcher.io. They&amp;rsquo;re excited to build their first campaign to target free users who might be ready for an upgrade. But&amp;hellip; they open Customer.io and immediately have questions: What attribute tells me someone is on the free plan? Is it plan_type, plan, or subscription_tier? What does exp_lvl mean? Experience level or expertise? What are the possible values?</description></item><item><title>Add pacing to your campaign with delays</title><link>https://docs.customer.io/academy/quick-start/course-4/campaign-delays/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-4/campaign-delays/</guid><description>Scenario: Don&amp;rsquo;t message too soon At Sketcher.io, someone just upgraded to premium. 🎊
But now isn’t the time to overwhelm them with follow-ups. You want to give them a moment to explore, and then check in if they haven’t made progress.
In other words, you want your campaign to feel thoughtful and not rushed. That’s where timing logic comes in.
Why pacing matters Timing can make or break your message.</description></item><item><title>Add people to your workspace</title><link>https://docs.customer.io/academy/quick-start/course-1/add-people/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-1/add-people/</guid><description>Scenario: Get your people into your workspace You know who you want to message and how to identify them. Now you need to get those people into Customer.io so you can actually reach them.
How data gets into Customer.io Before you can message anyone, Customer.io needs to know they exist. That means getting your customer data (like signups, product activity, or subscription status) into your workspace. You can do that a few ways:</description></item><item><title>Add your branding to Styles</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-global-styles/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-global-styles/</guid><description>What’s my button color again? So you’re building an email and you know the button background should be dark blue. But you notice there are several blues used across your company’s emails, and not all buttons look the same. Slightly different hex values. Slightly different appearance. Seems like some folks weren’t sure what to do, so they guessed the right colors.
Not just that, but if your customers use dark mode, what should the button change to?</description></item><item><title>Add your first message</title><link>https://docs.customer.io/academy/quick-start/course-4/create-campaign-message/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-4/create-campaign-message/</guid><description>Scenario: Time to say hello Your new premium user has logged in, and you&amp;rsquo;ve given them a little breathing room with a short delay. Now it&amp;rsquo;s time to welcome them properly, and guide them toward Brand Kits.
This is your first real message in the flow and it sets the tone for what follows.
Click to view imageOpen image in new window What kind of message should you send? Campaigns in Customer.</description></item><item><title>Adjust your columns to help people scan your feature list</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-columns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-columns/</guid><description>Now to hone in on the core of your template—the features you want to draw your customers’ eyes to.
So you made a two-column block for each feature you want to announce and increase adoption for. You want to make sure it’s immediately clear the amazing things your colleagues have been building and why they’re useful—and that it looks great on mobile!
Tips When working with columns, here&amp;rsquo;s a few things to keep in mind.</description></item><item><title>Analyze and compare your messages</title><link>https://docs.customer.io/academy/quick-start/course-5/analysis-reports/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-5/analysis-reports/</guid><description>Scenario: Which campaigns are actually working? Your manager stops by your desk: &amp;ldquo;I see our overall numbers look decent, but how does that Brand Kits campaign compare to our other onboarding flows? And are our newsletters outperforming our automated campaigns?&amp;rdquo;
You&amp;rsquo;ve got a general sense of how things are going, but a general sense won&amp;rsquo;t answer that question. You need to investigate.
Where to start Customer.io gives you several ways to examine your messaging performance.</description></item><item><title>Analyze with the agent</title><link>https://docs.customer.io/academy/quick-start/course-5/analyze-with-agent/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-5/analyze-with-agent/</guid><description>Scenario: The follow-up questions never stop You&amp;rsquo;ve reviewed your onboarding campaign workflow and spotted a potential bottleneck. Your welcome email is getting solid opens, but fewer people than expected are clicking through to the next step. You have a hunch, but you want data to back it up before you start making changes.
And that&amp;rsquo;s just the first thing you want to look into. You also want to know how this compares to last month, whether other onboarding campaigns have the same drop-off, and what the click-to-open rate looks like on that welcome email.</description></item><item><title>Analyze your workflow metrics</title><link>https://docs.customer.io/academy/quick-start/course-5/workflow-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-5/workflow-metrics/</guid><description>Scenario: The detective work begins Your Brand Kits campaign overview shows decent engagement and people are taking action. But &amp;ldquo;decent&amp;rdquo; isn&amp;rsquo;t good enough. You want to know exactly where you can make improvements.
The overall numbers tell you what happened, but they don&amp;rsquo;t tell you where it happened. That&amp;rsquo;s where workflow metrics come in.
Click to view imageOpen image in new window Why workflow metrics matter Think of your campaign like a funnel.</description></item><item><title>Audit your data</title><link>https://docs.customer.io/academy/data/course-3/audit-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-3/audit-data/</guid><description>Scenario: Is it actually working? Your developer messages you: &amp;ldquo;The integration&amp;rsquo;s deployed! You should start seeing data flow in.&amp;rdquo;
Before you start building messages and campaigns, you want to verify that everything&amp;rsquo;s coming through correctly. Is design_started actually firing? Does exp_lvl exist as an attribute? Now is the time to check and see.
Your data command center: The data index The Data Index shows you the data in your workspace, including every attribute and event that&amp;rsquo;s ever been sent to Customer.</description></item><item><title>Before you get started</title><link>https://docs.customer.io/academy/data/goals/before-you-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/goals/before-you-start/</guid><description>Set up your training workspace To follow along with the hands-on activities in this course, create a new Customer.io workspace just for training if you haven&amp;rsquo;t already done so.
&amp;nbsp;Collaborating with team members?
Planning to share your training workspace with others? You can invite team members to join your training workspace under the Settings &amp;gt; Workspace settings &amp;gt; General workspace settings section. This workspace will simulate Sketcher.io&amp;rsquo;s real customer data so you can build campaigns, test messages, and practice without affecting your live workspace.</description></item><item><title>Before you press send</title><link>https://docs.customer.io/academy/quick-start/course-3/newsletter-best-practices/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-3/newsletter-best-practices/</guid><description>Scenario: Back at Sketcher.io You&amp;rsquo;ve put together your Brand Kits newsletter and you&amp;rsquo;re excited to send it out into the world. You&amp;rsquo;ve chosen your segment, dialed in your sending settings, and written the message. You&amp;rsquo;re about to hit send, but you pause for a moment before you do.
You decide to run through a quick checklist. You know a few smart choices now can make the difference between a message that performs well and one that hurts your deliverability.</description></item><item><title>Beyond person data</title><link>https://docs.customer.io/academy/data/objects/welcome-objects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/objects/welcome-objects/</guid><description>👋 Welcome to the course If you enrolled in this course, you likely know how to work with person-level data in Customer.io. Person attributes describe people, events track what they do, and event attributes describe the events themselves. But there&amp;rsquo;s one more data structure that unlocks more powerful messaging: Objects.
In this course, you&amp;rsquo;ll learn what objects are, when to use them, and how to set them up for your business needs.</description></item><item><title>Build a data-driven segment</title><link>https://docs.customer.io/academy/quick-start/course-2/build-segment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-2/build-segment/</guid><description>Scenario: Target engaged users Brand Kits is live, and you want to send an upgrade message to free users who are already getting value from the product. But which free users? Well, the ones who are highly engaged is probably your best bet. So that means people who are inviting their teammates and creating projects regularly. You don&amp;rsquo;t want to pitch an upgrade to someone who signed up yesterday and hasn&amp;rsquo;t done anything yet.</description></item><item><title>Build a segment with AI</title><link>https://docs.customer.io/academy/quick-start/course-2/ai-segment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-2/ai-segment/</guid><description>✨ Generate segments with AI The segmentA segment is a group of people in your workspace. Use segments to trigger campaigns, track membership over time, or fine-tune your audience. There are two types of segments: data-driven and manual. Data-driven segments automatically update when people start or stop matching criteria. Manual segments are static. builder leverages publicly available data about your company and data from your workspace to suggest conditions for targeting specific audiences.</description></item><item><title>Build a template quickly with components</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/build-template-with-components/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/build-template-with-components/</guid><description>Back at Sketcher.io, you&amp;rsquo;re sending product announcements every month and tired of rebuilding the same email structure from scratch—or worse, copying last month&amp;rsquo;s email and hoping you caught all the changes.
Now that you’ve added your branding, you won’t have to worry about using the wrong styles! Next step is to create a template so all you have to do is add the right content before sending every month.
Showcase your features To showcase your product announcements, make a block that includes a brief preview of the feature.</description></item><item><title>Build smart pathways with branching</title><link>https://docs.customer.io/academy/quick-start/course-4/campaign-branching/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-4/campaign-branching/</guid><description>Scenario: Guide the journey with flow control Your user just created a Brand Kit—great! 🎉 Now what?
You want to help them get even more value out of it. At Sketcher.io, that means encouraging them to invite a teammate to collaborate.
But not everyone needs that prompt. Some folks already invited a teammate. Others haven’t yet—and might benefit from a little nudge. So how do you guide each person down the right path that&amp;rsquo;s personalized based on their actions?</description></item><item><title>Build your newsletter content</title><link>https://docs.customer.io/academy/quick-start/course-3/newsletter-content/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-3/newsletter-content/</guid><description>Scenario: Design your Brand Kits message You’ve chosen your audience and set a clear goal. Now it’s time to create the message itself.
Your job is to craft a clear, engaging email that introduces Brand Kits to your most interested free plan users. To do that, you&amp;rsquo;ll use Design Studio, Customer.io&amp;rsquo;s email editor.
✨ Why use Design Studio? Design Studio gives you full control over the look and layout of your messages.</description></item><item><title>Campaigns that don't add up</title><link>https://docs.customer.io/academy/data/goals/campaigns-dont-add-up/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/goals/campaigns-dont-add-up/</guid><description>Scenario: The math isn&amp;rsquo;t mathing It&amp;rsquo;s the end of the month, and your manager wants an answer: which of our campaigns are driving trial-to-paid upgrades?
You have some suspicions and pull up the first three items that come to mind. The welcome series shows 47 upgrades. Feature adoption shows 31. The newsletter shows 22. You add them all up and get 100. But your actual paid upgrades for the month? 68.</description></item><item><title>Choose the right message type</title><link>https://docs.customer.io/academy/quick-guides/choose-message/message-types/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/choose-message/message-types/</guid><description>Scenario: Three different messaging needs You&amp;rsquo;re the growth marketer at Sketcher.io, and this week you need to:
Announce that Brand Kits just launched to everyone on the waitlist Onboard new premium users who upgrade and help them create their first Brand Kit Confirm password reset requests instantly when users request them So which message type fits each of these needs? It&amp;rsquo;s time to find out.
Pick your message type Customer.io offers three core message types, each designed for specific use cases.</description></item><item><title>Choose the right outcome</title><link>https://docs.customer.io/academy/data/goals/choose-right-outcome/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/goals/choose-right-outcome/</guid><description>Scenario: The goal that didn&amp;rsquo;t answer the question Your team has been tracking email clicks as the primary success metric for your campaigns. The click rates look good: the welcome series has a 28% click rate, feature adoption is at 19%, and your newsletter pulls 12%. Your manager sees those numbers and says, &amp;ldquo;Great, so our campaigns are working.&amp;rdquo;
But then comes the real question: &amp;ldquo;How many of those clicks turned into paid upgrades?</description></item><item><title>Choose your audience</title><link>https://docs.customer.io/academy/quick-start/course-3/choose-newsletter-audience/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-3/choose-newsletter-audience/</guid><description>Scenario: Announce your new feature You want to reach people who already showed interest in Brand Kits by joining your waitlist. These are users who are new and likely to engage, but haven&amp;rsquo;t converted just yet.
You built a segment for this group in an earlier course. Now it&amp;rsquo;s time to put it to work.
Send to the right people You&amp;rsquo;re ready to create your first newsletter. The first question is, who should receive it?</description></item><item><title>Connect your email and publish changes to start sending</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-connect-and-publish/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-connect-and-publish/</guid><description>You previewed your message, made a couple tweaks, and now your template is complete! Time to create your first product announcement and send it off.
You want to email your customers about your product&amp;rsquo;s latest features and send follow-up messages based on whether they engage with the new features. Since you want to make a multi-step workflow, you&amp;rsquo;ll want to create a Campaign.
In this interaction, you&amp;rsquo;ll create your first product announcement from a Design Studio template and learn when to publish changes to make your latest edits live.</description></item><item><title>Connect your sources</title><link>https://docs.customer.io/academy/data/goals/connect-your-sources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/goals/connect-your-sources/</guid><description>Scenario: The missing link Your goal is live. You can see that people are upgrading, and those upgrades are generating revenue. 🎊
BUT when your manager asks the obvious follow-up, &amp;ldquo;which messaging drove those upgrades?&amp;rdquo;, you can&amp;rsquo;t answer. Right now, you know what happened, but you can&amp;rsquo;t say with certainty which messages helped make it happen.
Click to view imageOpen image in new window For that, you need to connect your messages to your goal.</description></item><item><title>Control your campaign flow with object data</title><link>https://docs.customer.io/academy/data/objects/control-timing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/objects/control-timing/</guid><description>Scenario: Help teams get the most from their upgrade You&amp;rsquo;re in the middle of building out your object-triggered campaign that celebrates when accounts upgrade to Pro. You&amp;rsquo;ve set it up so everyone at the account gets the good news immediately.
But you want to take it further. After upgrading you want to track if teams are actually using the premium features. If they do, you&amp;rsquo;ll send them advanced tips based on their team size.</description></item><item><title>Create a footer to reuse across your emails</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-footer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-footer/</guid><description>One footer for all Some elements just need to be the same everywhere—across all your emails and templates, like a footer. You can build a footer anywhere, save it as a custom component, and reuse it throughout your Design Studio files!
In this interaction, you’ll build a footer from standard components in your template then save it as a custom component for future use.
In the interactive video, you added liquid to the footer to render the current year.</description></item><item><title>Create the right file</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-create-file/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-create-file/</guid><description>Scenario: Build a template for product announcements Like other courses in our Academy, imagine you work at Sketcher.io, a SaaS platform where your customers can design mockups and collaborate on the vision of their product. You send out monthly communications that announce product updates and new features. In this course, you’ll design a template that you can reuse every month to email your customers.
Click to view imageOpen image in new window What can I create with Design Studio?</description></item><item><title>Create your custom roles</title><link>https://docs.customer.io/academy/quick-guides/custom-roles/create-custom-roles/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/custom-roles/create-custom-roles/</guid><description>See it in action Watch this video to see how to create those Designer and Data Architect roles from the scenarios you just saw.
The key to building roles that work Before you start clicking checkboxes, get crystal clear on the actual person and their actual job. Don&amp;rsquo;t just think &amp;ldquo;I need a Designer role.&amp;rdquo; Think &amp;ldquo;Several people on my team need to build emails and upload images, but if they accidentally launch a broadcast to 50,000 customers, we&amp;rsquo;re all in trouble.</description></item><item><title>Decide who enters your campaign</title><link>https://docs.customer.io/academy/quick-start/course-4/campaign-triggers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-4/campaign-triggers/</guid><description>Scenario: Launch onboarding at the right moment Back at Sketcher.io, people are upgrading to premium accounts after getting your newsletter about Brand Kits. 🎉
Now that they’ve signed up, you want to reach them while they&amp;rsquo;re still excited, before the momentum fades into the abyss.
Click to view imageOpen image in new window To do that, you need a way to automatically start their onboarding journey the moment they become premium users.</description></item><item><title>Define your goal</title><link>https://docs.customer.io/academy/data/goals/define-your-goal/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/goals/define-your-goal/</guid><description>Scenario: Time to build Your manager is on board with your initial goal of tracking trial-to-paid upgrades, but she has one more thing to add. (Of course she does.)
Click to view imageOpen image in new window So you need to answer two questions before you start: what event represents the exact moment someone converts, and can you capture the dollar value behind it?
Set your criteria When you create a goal in Customer.</description></item><item><title>Do you need objects?</title><link>https://docs.customer.io/academy/data/objects/decision-framework/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/objects/decision-framework/</guid><description>Scenario: A conversation in the Customer.io community You&amp;rsquo;re in the Customer.io community, reading through questions and posts and come across the following:
&amp;ldquo;Should I use objects for my fitness app? I want to track each user&amp;rsquo;s workout streak, personal goals, and achievement badges.&amp;rdquo;
You think through what you just learned about objects and if they&amp;rsquo;re a fit for this use case. Let&amp;rsquo;s build a framework to help you decide.
The decision framework Do multiple people connect to the same instance of a thing?</description></item><item><title>Document your data</title><link>https://docs.customer.io/academy/data/course-1/document-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-1/document-data/</guid><description>Scenario: From scattered thoughts to clear requirements You&amp;rsquo;ve spent the last hour mapping out what data Sketcher.io needs for the activation campaign. Your notes are&amp;hellip; everywhere. Sticky notes on your monitor. A Google Doc with half-formed thoughts. Some whiteboard scribbles you&amp;rsquo;ll definitely remember later.
Then your developer Slacks you: &amp;ldquo;Can you send the requirements?&amp;rdquo;
You could frantically copy-paste from five different places. Or you could pull up one organized document that has everything they need.</description></item><item><title>Fine-tune your call-to-action</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-style-messages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-style-messages/</guid><description>Your template is really shaping up! You&amp;rsquo;ve created your intro and a reusable feature block. But you take a closer look at your button and wish the text were a littler larger.
When to update global styles vs one-off properties? You increase the text size of the button in your template and like that a lot more. But you realize this should be the default for all buttons, not just the one in this template.</description></item><item><title>Fine-tune your sending behavior</title><link>https://docs.customer.io/academy/quick-start/course-3/sending-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-3/sending-options/</guid><description>Scenario: Earn your open Brand Kits is a big moment for Sketcher.io. The people on the waitlist already raised their hand, so you’re not cold-emailing strangers.
The risk now isn’t “can we send it?” It’s whether this feels like the message they signed up for, and whether you’re asking for attention when you’ve already taken a lot lately. This step is where you align the send with what people agreed to hear about and how often they should hear from you.</description></item><item><title>Format data for how you'll use it</title><link>https://docs.customer.io/academy/data/course-2/format-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-2/format-data/</guid><description>Scenario: Format affects what you can do You&amp;rsquo;re building a segment to target users who&amp;rsquo;ve created more than 5 designs. You set it up, but the segment&amp;rsquo;s empty. You check a customer profile and see they&amp;rsquo;ve definitely created designs. But the data isn&amp;rsquo;t working the way you expected.
Your developer takes a look. &amp;ldquo;Oh, I&amp;rsquo;m sending designs_created as text, not a number. That&amp;rsquo;s probably the issue.&amp;rdquo;
Format matters. The way data comes in determines what you can do with it in Customer.</description></item><item><title>From planning to implementation</title><link>https://docs.customer.io/academy/data/course-2/start-implementation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-2/start-implementation/</guid><description>&amp;nbsp;Getting started
This course continues the Set up your data learning path or works perfectly if you&amp;rsquo;ve already identified your data needs and just need implementation guidance.
You&amp;rsquo;ll use the Data Tracking Plan template for activities throughout this course. If you completed the first course in this learning path, you should have already saved a copy. If you haven&amp;rsquo;t, download it now!
Set the scene Quick context: Throughout this course, imagine you&amp;rsquo;re a growth marketer at Sketcher.</description></item><item><title>Get started measuring success</title><link>https://docs.customer.io/academy/quick-start/course-5/get-started-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-5/get-started-metrics/</guid><description>🎯 Welcome to the course &amp;nbsp;The final piece
This course completes the Quick start learning path or stands alone if you want to understand how your messages are performing. You&amp;rsquo;ve built campaigns, sent newsletters, and automated customer journeys. Now comes the best part: seeing how they performed and making them even better.
In this course, you&amp;rsquo;ll learn to answer questions like &amp;ldquo;are my messages reaching people?&amp;rdquo;, &amp;ldquo;which campaigns are getting the best engagement?</description></item><item><title>Get started with campaigns</title><link>https://docs.customer.io/academy/quick-start/course-4/get-started-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-4/get-started-campaign/</guid><description>🎯 Welcome to the course &amp;nbsp;Scaling up
This course is part of the Quick start learning path—or works independently if you&amp;rsquo;re ready to automate customer messaging. You&amp;rsquo;ve already learned how to structure your data and build data-driven segments, and you&amp;rsquo;ve sent your first newsletter too! Now it&amp;rsquo;s time to put automation to work. In this course, you&amp;rsquo;ll create a campaign that automatically sends a targeted onboarding experience to new premium users.</description></item><item><title>Get started with newsletters</title><link>https://docs.customer.io/academy/quick-start/course-3/get-started-newsletter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-3/get-started-newsletter/</guid><description>🎯 Welcome to the course &amp;nbsp;Ready to send
This course is part of the Quick start learning path or perfect on its own if you want to learn all about one-time messaging. You&amp;rsquo;ve got your data and your audience in Customer.io. Now it&amp;rsquo;s time to put that audience to use by sending your first message!
In this course, you’ll learn how to create and send a one-time newsletter, ideal for product announcements, updates, or promotional messages.</description></item><item><title>Get started with segments</title><link>https://docs.customer.io/academy/quick-start/course-2/get-started-segments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-2/get-started-segments/</guid><description>🎯 Welcome to the course &amp;nbsp;Building on the basics
This is the second course in the Quick start learning path. It also works great as a standalone if you&amp;rsquo;re ready to dive into audience targeting. You’ve got your people and your data in Customer.io. Now it&amp;rsquo;s time to make sure your messages reach the people they&amp;rsquo;re meant for, using segments.
In this course, you’ll learn how to group people based on what you know about them—like when they signed up or what plan they’re on—so your messages feel more relevant, better timed, and personalized.</description></item><item><title>Get to know Customer.io</title><link>https://docs.customer.io/academy/quick-guides/customerio-101/whats-cio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/customerio-101/whats-cio/</guid><description>New to Customer.io? This quick guide will get you oriented fast.
See Customer.io in action Get the full picture by watching this video, which walks you through what Customer.io does, how it works, and what you can build with it.
What to expect before you start Customer.io requires some setup and ongoing work. To use it effectively, you&amp;rsquo;ll need to:
Send data about your customers, either from your website, app, CRM, or other tools Spend time building segments and the messaging you want to send Test and iterate on your messaging strategy &amp;nbsp;Who&amp;rsquo;s this for?</description></item><item><title>Get to know person attributes</title><link>https://docs.customer.io/academy/quick-start/course-1/attributes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-1/attributes/</guid><description>You&amp;rsquo;ve added your people—now what? Now that your people are in Customer.io, it’s time to start exploring what you know about them.
Every person in your workspace has a profile, and each profile has attributes, which are facts about that person. Person attributes are how you go from messaging “everyone” to messaging the right people with the right content.
Click to view imageOpen image in new window What are attributes in Customer.</description></item><item><title>How data gets into Customer.io</title><link>https://docs.customer.io/academy/data/course-2/integration-methods/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-2/integration-methods/</guid><description>Scenario: Understand the options You&amp;rsquo;re looking at your Data Tracking Plan, ready to discuss implementation with your developer. You know what data you need and why.
&amp;nbsp;Slack conversation
Your developer: How do you want to send this data? JavaScript SDK, server-side API, or should we use Segment?
You: Uh&amp;hellip; which one should we use?
Your developer: Depends on where the data is and what you need it to do.
Let&amp;rsquo;s break down your options so you can have that conversation confidently.</description></item><item><title>How relationships work</title><link>https://docs.customer.io/academy/data/objects/relationships/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/objects/relationships/</guid><description>Scenario: Connecting people to Acme Corp At Sketcher.io, you&amp;rsquo;ve created the Account object type and the actual Acme Corp object. Great!
But now you need to answer: Which people are connected to this account?
You know Sarah, Aniyah, and Garrick all work at Acme Corp. They all use Sketcher.io through the company&amp;rsquo;s account. But how do you tell Customer.io that these three people belong to Acme Corp&amp;rsquo;s account?
That&amp;rsquo;s what relationships do.</description></item><item><title>Identify people in Customer.io</title><link>https://docs.customer.io/academy/quick-start/course-1/identifiers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-1/identifiers/</guid><description>Scenario: Who&amp;rsquo;s who? You&amp;rsquo;re about to bring your Brand Kits waitlist into Customer.io so you can start messaging them.
To do that, each person needs a unique identifier, something like an email address or user ID. This is how Customer.io keeps track of people across your workspace and connects their data to the right messages.
Click to view imageOpen image in new window What&amp;rsquo;s an identifier? You identify, add, and update people using their identifiers, which are unique values like an email address or a database ID.</description></item><item><title>Identify the data you need</title><link>https://docs.customer.io/academy/data/course-1/identify-campaign-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-1/identify-campaign-data/</guid><description>Scenario: The activation problem You&amp;rsquo;ve documented Sketcher.io&amp;rsquo;s goals. Now it&amp;rsquo;s time to act on one of them.
Looking at the Goals tab of your Data Tracking Plan, your team decides to tackle activation first: &amp;ldquo;Reactivate free customers who signed up but never created their first design.&amp;rdquo; The numbers make this urgent: only 30% of new signups complete their first design. And since completing a design strongly indicates someone will upgrade to a paid plan, that&amp;rsquo;s a lot of potential revenue slipping away.</description></item><item><title>Identify your data priorities</title><link>https://docs.customer.io/academy/data/course-2/data-priorities/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-2/data-priorities/</guid><description>Scenario: Your developer needs context You&amp;rsquo;ve got your Sketcher.io Data Tracking Plan ready, including all the events and attributes for the activation campaign. Now you need to meet with your developer to figure out how to get this data into Customer.io.
Your developer will fill in the Source column of your tracking plan, documenting which integration method to use for each piece of data. But to make those decisions, they need to understand your priorities first.</description></item><item><title>Keep it clean</title><link>https://docs.customer.io/academy/data/course-3/clean-data/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-3/clean-data/</guid><description>Scenario: The cleanup conversation You&amp;rsquo;ve done your audit. You&amp;rsquo;ve added descriptions. But you also spotted some issues: there&amp;rsquo;s firstName AND first_name sitting right there in the list, and an event called test_click_DELETE that definitely shouldn&amp;rsquo;t be in production.
Click to view imageOpen image in new window Later, when you start building a segment for website signups, you discover signup_source has messy values: some profiles show website, others Website, WEBSITE, or web.</description></item><item><title>Know your data</title><link>https://docs.customer.io/academy/quick-start/course-1/data-index/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-1/data-index/</guid><description>Scenario: Time to double-check your foundation You&amp;rsquo;re getting ready to build your first message, maybe a launch announcement for Brand Kits, or a follow-up onboarding campaign. But imagine hitting send and realizing the attribute you&amp;rsquo;re personalizing with doesn&amp;rsquo;t exist, or an event you&amp;rsquo;re triggering on was never tracked.
The Data Index helps you avoid that. Before you build anything, you can check:
Did the attributes from your CSV upload come through?</description></item><item><title>Launch it!</title><link>https://docs.customer.io/academy/quick-start/course-4/launch-campaign/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-4/launch-campaign/</guid><description>Scenario: You’re ready to welcome new premium users At Sketcher.io, the team’s excited about the launch of the new Brand Kits feature. And your onboarding campaign is a key part of turning curiosity into action.
You’ve done the work: mapped the journey, added messages, tracked behaviors, and measured success.
Now all that’s left? Making sure your messages are ready to send and hitting Start.
Set your messages to send automatically Before launching your campaign, there&amp;rsquo;s one crucial step: ensuring all your messages are set to send automatically rather than staying in draft mode.</description></item><item><title>Lay the foundation</title><link>https://docs.customer.io/academy/quick-start/course-1/lay-foundation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-1/lay-foundation/</guid><description>Set the scene &amp;nbsp;Getting started
This course begins the Quick start learning path or works perfectly if you just need to learn Customer.io data fundamentals. You&amp;rsquo;re sitting in a meeting room at Sketcher.io, and your product manager just said the words every marketer both loves and fears: &amp;ldquo;Brand Kits launches in two weeks.&amp;rdquo;
This is a really big opportunity for both you and the team. Brand Kits is your company&amp;rsquo;s first premium feature: it&amp;rsquo;s a tool that lets design teams save and reuse logos, fonts, and color palettes.</description></item><item><title>Make every message feel personal</title><link>https://docs.customer.io/academy/data/objects/personalize-messages-objects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/objects/personalize-messages-objects/</guid><description>Scenario: Make every message feel like it was written for them You&amp;rsquo;re sending the large team collaboration guide to every account that upgraded to Pro, used a premium feature, and has more than 25 seats allocated to their account. Acme Corp is one of them—they have 50 seats, they&amp;rsquo;re a tech company, and they&amp;rsquo;ve already tried out a Pro feature.
But &amp;ldquo;Your team is using Pro!&amp;rdquo; feels generic when you actually know things about the account.</description></item><item><title>Manual segments and when to use them</title><link>https://docs.customer.io/academy/quick-start/course-2/manual-segment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-2/manual-segment/</guid><description>This course has focused mostly on data-driven segments—because they’re dynamic, flexible, and built for long-term growth. They update automatically based on user behavior and attributes, which makes them a great fit for onboarding, lifecycle messaging, and anything tied to real-time data.
But that’s not the only way to build a segment. Sometimes, you just need a simple list and that’s where manual segments come in.
What manual segments are good for Manual segments are flexible and quick to set up.</description></item><item><title>Measure your impact</title><link>https://docs.customer.io/academy/data/goals/measure-your-impact/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/goals/measure-your-impact/</guid><description>👋 Welcome to the course Your manager asks you a simple question: &amp;ldquo;Which campaigns are driving our paid upgrades?&amp;rdquo;
You check your various campaign results and look at all the numbers. You add them up, but the total doesn&amp;rsquo;t match your actual paid upgrades. The math doesn&amp;rsquo;t work, and you can&amp;rsquo;t explain why.
Goals changes that.
Scenario: Meet the team You&amp;rsquo;re the growth marketer at Sketcher.io, a B2B SaaS product. Your team runs a welcome series, a feature adoption campaign, and a monthly release newsletter, all aimed at converting trial users to paid plans.</description></item><item><title>Meet the workflow builder</title><link>https://docs.customer.io/academy/quick-start/course-4/intro-workflow-builder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-4/intro-workflow-builder/</guid><description>Scenario: Your onboarding strategy, in action You’ve got a plan: welcome new premium users, help them succeed with Brand Kits, and follow up if they don’t take action.
You know what you want to say and who you want to reach. But how do you make it all run, automatically, for every user—without you having to lift a finger?
Click to view imageOpen image in new window That&amp;rsquo;s where the workflow builder comes in.</description></item><item><title>Meet your people</title><link>https://docs.customer.io/academy/quick-start/course-1/meet-your-people/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-1/meet-your-people/</guid><description>Scenario: Who are you messaging? You’re getting ready to send a launch email about Brand Kits. Your waitlist has a number of people who all raised their hand for early access. They&amp;rsquo;re people who are tired of re-uploading the same logo to every project. You want that message to land in their inboxes with a personal touch, like &amp;ldquo;Hey Jason, your wait is over!&amp;rdquo;
Click to view imageOpen image in new window For any of this to work, every person you want to message needs a profile in Customer.</description></item><item><title>Name your data clearly</title><link>https://docs.customer.io/academy/data/course-1/naming-conventions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-1/naming-conventions/</guid><description>Scenario: Make it readable You&amp;rsquo;re about to list out all the events and attributes Sketcher.io needs for the activation campaign. Before you start, you realize something: if you name these poorly now, you&amp;rsquo;ll create confusion later.
Your developer will need to implement these. Your future self will need to reference them. New teammates will need to understand them. Good naming isn&amp;rsquo;t just about following rules, it&amp;rsquo;s about making your data readable for everyone who&amp;rsquo;ll work with it.</description></item><item><title>Navigate this course</title><link>https://docs.customer.io/academy/quick-start/course-1/navigate-the-course/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-1/navigate-the-course/</guid><description>🧑‍🎨 Meet Sketcher.io Throughout this course, you&amp;rsquo;ll work alongside a fictional company called Sketcher.io, a design platform with tools for graphic and product designers. Like many product-led companies, they offer a freemium plan and they rely on great messaging to get users to see value and upgrade.
Sketcher.io is launching a new premium feature called Brand Kits, a tool that lets teams save and reuse logos, fonts, and color palettes across projects.</description></item><item><title>Organize your files so all teammates can find them</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-organize-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-organize-files/</guid><description>Have you ever been a new hire, expected to hit the ground running by week 2? But your new employer’s documentation and marketing files are in more places than you can find?
This is why organization matters! Make it easier on your next hires, as well as your future self, by creating a strategy upfront for your files. Then your teammates won’t get lost as the volume of files increases and creators change over time.</description></item><item><title>Personalize your content with liquid</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-liquid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-liquid/</guid><description>Now, you’ve already added a greeting that includes your recipient’s name as well as some standard links to your template. We did this by adding liquid to the message!
{{ customer.first_name | default: &amp;quot;there&amp;quot; }}—The customer object lets you pull in data stored on your recipients’ profiles. This assumes you save an attribute called first_name to people’s profiles, so make sure you’re using an attribute name available in your workspace! The default filter sets a fallback if the attribute doesn&amp;rsquo;t exist for a recipient.</description></item><item><title>Put it to work</title><link>https://docs.customer.io/academy/quick-guides/customerio-101/put-to-work/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/customerio-101/put-to-work/</guid><description>What you can actually do with Customer.io Take a look at how real teams use Customer.io once they&amp;rsquo;re up and running.
Turn signups into active users Someone just created an account but hasn&amp;rsquo;t done anything yet? Send them a welcome email with a clear next step. Still crickets after 3 days? Follow up with a &amp;ldquo;stuck?&amp;rdquo; message that links to your most helpful resource. Already active? Skip the nudge and show them how to get even more value, like inviting their team, taking a tour, or trying your premium features.</description></item><item><title>Put your role to work</title><link>https://docs.customer.io/academy/quick-guides/custom-roles/put-role-to-work/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/custom-roles/put-role-to-work/</guid><description>Assign your roles You&amp;rsquo;ve built the role, now get it into the hands of the people who need it.
For new team members, assign the custom role when you send their invite. For existing teammates, update their role when responsibilities shift. Maybe your junior marketer just got promoted and needs campaign launch access, or your contractor&amp;rsquo;s project wrapped up and they no longer need integration access. Update roles as jobs change, not weeks later when someone realizes they can&amp;rsquo;t do their work.</description></item><item><title>Quick decision framework</title><link>https://docs.customer.io/academy/quick-guides/choose-message/decision-framework/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/choose-message/decision-framework/</guid><description>How to choose You know what each message type does. Now let&amp;rsquo;s figure out which one fits your need.
flowchart LR Start([What are you sending?]) --> Q1{Is this a direct response toone person's action?Like: password reset,purchase receipt, verification code} Q1 -->|Yes| Trans[🔔 Transactional message—• One-to-one response• Sent via API• User expects it] Q1 -->|No| Q2{One message to a groupor multiple messagesover time?} Q2 -->|One messageto a group| News[📣 Newsletter—• Announcement or update• You schedule when• Everyone gets it at once] Q2 -->|Multiple messagesover time| Camp[⚙️ Campaign—• Automated journey• Adapts to behavior• People move at own pace] Quick decision guide Your situation Use this Why Someone clicked Forgot password and needs a reset link 🔔 Transactional One-to-one response to their action Someone just purchased and needs a receipt 🔔 Transactional One-to-one confirmation they expect Announce Brand Kits feature launch to waitlist 📣 Newsletter One-time message to a group you define Send monthly product updates to customers 📣 Newsletter Scheduled send to a segment Welcome new users and guide them through first week ⚙️ Campaign Multiple messages adapting to behavior Re-engage users who haven&amp;rsquo;t logged in for 30 days ⚙️ Campaign Ongoing automation triggered by inactivity Common confusion: Campaigns vs transactional messages Both can be triggered by user actions, so what&amp;rsquo;s the difference?</description></item><item><title>Quick wins you can try yourself</title><link>https://docs.customer.io/academy/data/course-2/quick-wins/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-2/quick-wins/</guid><description>Scenario: You don&amp;rsquo;t always need a developer After learning about all those integration methods, you might be thinking: &amp;ldquo;Great, now I just have to wait for my developer to build everything.&amp;rdquo;
Not necessarily! While your developer handles the technical integrations, there are a few self-service options that might be useful depending on your situation.
Click to view imageOpen image in new window Three quick wins Self-service options are useful in a few common scenarios: when you need data before your technical integration is complete, when you have a one-time dataset to import (like historical customer lists or unsubscribed contacts), or when you want to test campaigns before committing to a full integration.</description></item><item><title>Read and interpret campaign data</title><link>https://docs.customer.io/academy/quick-start/course-5/campaign-analysis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-5/campaign-analysis/</guid><description>Scenario: The numbers are in You&amp;rsquo;ve got your Analysis report open. Brand Kits is sitting at 12% conversion, 45% open rate, and 3% click rate. But what do those numbers actually mean? And what should you do about them?
Finding metrics is the easy part. The harder part is reading the story they&amp;rsquo;re telling you.
Click to view imageOpen image in new window The difference between data and insights Anyone can pull up a conversion or open rate.</description></item><item><title>Recap</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-intro-recap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-intro-recap/</guid><description>Next time someone asks you to send an email, you won&amp;rsquo;t be starting from zero.
You&amp;rsquo;ve built the scaffolding that makes product announcements faster to build, more consistent, and a little less stressful. And a template that keeps you on-brand, reusable components that update everywhere at once, and a workflow connection that takes you from idea to inbox.
That&amp;rsquo;s not a small thing. A lot of teams are still copy-pasting footers and rebuilding layouts from scratch every single time.</description></item><item><title>Review and send</title><link>https://docs.customer.io/academy/quick-start/course-3/newsletter-send/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-3/newsletter-send/</guid><description>Scenario: One last review before you send You&amp;rsquo;ve set your audience, built your email, and connected it to your newsletter. The Review step is your final checkpoint before your message goes out. Here you&amp;rsquo;ll confirm everything looks right, decide when to send, and make a few last decisions about how your message gets delivered.
One final check Before pressing send, take a moment and go through everything you&amp;rsquo;ve already set up.</description></item><item><title>See how it all works together</title><link>https://docs.customer.io/academy/quick-start/course-1/all-works-together/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-1/all-works-together/</guid><description>Power your messages with data Now that you’ve seen people, attributes, and events in action, here’s how they all work together to support smarter, more personalized messaging.
Remember Jason? Jason signed up from your launch email and just created his first project in Sketcher.io. Here&amp;rsquo;s what Customer.io knows about him:
Identifier: jason.mendoza@example.com
Attributes (who he is): Jason&amp;rsquo;s plan is &amp;ldquo;free&amp;rdquo;, he signed up on April 1, and he came from your product waitlist.</description></item><item><title>Segment on timestamp dates</title><link>https://docs.customer.io/academy/quick-start/course-2/timestamps-segment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-2/timestamps-segment/</guid><description>Scenario: Target recent sign-ups The Brand Kits feature just launched and you&amp;rsquo;re thinking of following up with users who signed up for Sketcher.io within the last 30 days. These users are still new and likely to engage if they get the right message at the right time.
You could manually pull this audience every week… but there&amp;rsquo;s a better way.
Click to view imageOpen image in new window Segment by time using timestamps Timestamps help you build dynamic segments that update based on when something happened—like when someone signed up, last logged in, or hit a key milestone.</description></item><item><title>Send a test to confirm your template is ready</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-send-test/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-send-test/</guid><description>Alright, so you’ve added your content, branded your components, adjusted your columns, and created a footer! You’re happy with the design and think this is a solid foundation for your product announcements.
So what’s left? Send a test!
Click to view imageOpen image in new window Previewing your design in your workspace is essential. It helps you catch issues with liquid, styling, content placement, and more. But sending a test lets you see what this will look like in an actual inbox.</description></item><item><title>Set campaign goals and complete your setup</title><link>https://docs.customer.io/academy/quick-start/course-4/campaign-goals-exit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-4/campaign-goals-exit/</guid><description>Scenario: Define success and finish the journey Back at Sketcher.io, your onboarding campaign is nearly complete. 🎉
You’ve guided new premium users toward creating their first Brand Kit, followed up based on their behavior, and adapted the journey to their needs.
Now it’s time to tie it all together:
What counts as a win?
When should someone leave the journey?
How do you make sure your messages behave exactly the way you want?</description></item><item><title>Set conversion criteria</title><link>https://docs.customer.io/academy/quick-start/course-3/newsletter-goals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-3/newsletter-goals/</guid><description>Back at Sketcher.io&amp;hellip; You’re not sending this newsletter just to tick a box. This send is part of a bigger plan: to drive upgrades and turn interest into action. But how do you know if it worked?
You need a way to track results and prove your message made an impact. Bonus points if it gives you insights to make the next one ✨ even better ✨.
What are conversion criteria?</description></item><item><title>Set up automated actions and updates</title><link>https://docs.customer.io/academy/quick-start/course-4/data-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-4/data-actions/</guid><description>Scenario: Mark a user as disengaged At Sketcher.io, you’ve nudged new premium users to try Brand Kits. If they still haven’t logged in, you want to capture that moment—not just for reporting, but so you can follow up later with a re-engagement flow.
Your plan: If they didn’t log in, update their attribute to onboarding_status = disengaged.
Guide the experience beyond messaging Your campaign doesn’t have to stop at messages. With data actions, you can update a person’s profile, trigger other campaigns, or sync with external tools—directly from the workflow.</description></item><item><title>Set up for deliverability</title><link>https://docs.customer.io/academy/data/course-2/data-deliverability/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-2/data-deliverability/</guid><description>Scenario: One more thing before you send Your Data Tracking Plan is complete and implementation is underway. You&amp;rsquo;re excited to start building campaigns.
If you&amp;rsquo;re migrating from another email platform, there&amp;rsquo;s one critical step before you send: managing your email reputation data properly. If you skip this, you risk damaging your sender reputation before you even get started.
&amp;nbsp;Starting fresh?
If Customer.io is your first email platform, you can skip the migration steps.</description></item><item><title>Set yourself up for long-term success</title><link>https://docs.customer.io/academy/data/course-3/data-success/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-3/data-success/</guid><description>&amp;nbsp;Getting started
This course completes the Set up your data learning path or works perfectly if you already have data flowing into Customer.io and want to organize it properly. Set the scene You did it. After weeks of planning and collaboration with your developer, Sketcher.io&amp;rsquo;s data integration is live. Your events are flowing, your attributes are populating, and you can finally start building the campaigns you&amp;rsquo;ve only dreamed of until now.</description></item><item><title>Special formatting requirements</title><link>https://docs.customer.io/academy/data/course-2/special-formatting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-2/special-formatting/</guid><description>Scenario: The phone number problem Your SMS campaign is ready to launch. You&amp;rsquo;ve built your segment, set up the messages, tested it all out, and worked up the courage to press Send. And&amp;hellip; nothing sent. Just a wall of red Failed statuses.
Click to view imageOpen image in new window You check a profile. The phone number is right there: (415) 555-1234. It looks fine to you.
Your developer explains: &amp;ldquo;SMS needs phone numbers in E.</description></item><item><title>Start with your goals</title><link>https://docs.customer.io/academy/data/course-1/data-goals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-1/data-goals/</guid><description>Scenario: Before you ask for data, know why you need it You&amp;rsquo;re ready to start planning Sketcher.io&amp;rsquo;s activation campaign, or so you think&amp;hellip; Your instinct might be to jump straight to &amp;ldquo;what data do we need?&amp;rdquo; But that&amp;rsquo;s backwards.
Before you can identify data requirements, you need to answer a more fundamental question: What are you trying to accomplish? That&amp;rsquo;s where resources like a data tracking plan can help out&amp;hellip;</description></item><item><title>Target the right people</title><link>https://docs.customer.io/academy/quick-start/course-2/target-right-people/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-2/target-right-people/</guid><description>Scenario: Plan your audiences As you get ready for the upcoming Brand Kits launch at Sketcher.io, you&amp;rsquo;re mapping out your marketing strategy. You don&amp;rsquo;t want to send generic messages to everyone. Instead, you need to reach specific groups, like:
Users currently on the free plan who might be ready to upgrade. Waitlist signups who haven&amp;rsquo;t converted into active users yet. Users who joined recently but haven&amp;rsquo;t created their first project. That&amp;rsquo;s where segments come in.</description></item><item><title>Test Page</title><link>https://docs.customer.io/academy/build-journeys/course-1/test-folder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/build-journeys/course-1/test-folder/</guid><description>Test content Here&amp;rsquo;s some content.
Tooltip Check out a tooltip about identifying people: identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.
Here&amp;rsquo;s an h3 And here&amp;rsquo;s an h4 Include The next paragraph is an include.</description></item><item><title>Test Page</title><link>https://docs.customer.io/academy/build-journeys/course-2/test-folder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/build-journeys/course-2/test-folder/</guid><description>Test content Here&amp;rsquo;s some content.
Tooltip Check out a tooltip about identifying people: identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.
Here&amp;rsquo;s an h3 And here&amp;rsquo;s an h4 Include The next paragraph is an include.</description></item><item><title>Test Page</title><link>https://docs.customer.io/academy/build-journeys/course-3/test-folder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/build-journeys/course-3/test-folder/</guid><description>Test content Here&amp;rsquo;s some content.
Tooltip Check out a tooltip about identifying people: identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.
Here&amp;rsquo;s an h3 And here&amp;rsquo;s an h4 Include The next paragraph is an include.</description></item><item><title>Test Page</title><link>https://docs.customer.io/academy/build-journeys/course-4/test-folder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/build-journeys/course-4/test-folder/</guid><description>Test content Here&amp;rsquo;s some content.
Tooltip Check out a tooltip about identifying people: identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.
Here&amp;rsquo;s an h3 And here&amp;rsquo;s an h4 Include The next paragraph is an include.</description></item><item><title>Test Page</title><link>https://docs.customer.io/academy/deliverability/course-1/test-folder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/deliverability/course-1/test-folder/</guid><description>Test content Here&amp;rsquo;s some content.
Tooltip Check out a tooltip about identifying people: identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.
Here&amp;rsquo;s an h3 And here&amp;rsquo;s an h4 Include The next paragraph is an include.</description></item><item><title>Test Page</title><link>https://docs.customer.io/academy/deliverability/course-3/test-folder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/deliverability/course-3/test-folder/</guid><description>Test content Here&amp;rsquo;s some content.
Tooltip Check out a tooltip about identifying people: identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.
Here&amp;rsquo;s an h3 And here&amp;rsquo;s an h4 Include The next paragraph is an include.</description></item><item><title>Test Page</title><link>https://docs.customer.io/academy/deliverability/course-4/test-folder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/deliverability/course-4/test-folder/</guid><description>Test content Here&amp;rsquo;s some content.
Tooltip Check out a tooltip about identifying people: identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.
Here&amp;rsquo;s an h3 And here&amp;rsquo;s an h4 Include The next paragraph is an include.</description></item><item><title>Test Page</title><link>https://docs.customer.io/academy/deliverability/course-5/test-folder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/deliverability/course-5/test-folder/</guid><description>Test content Here&amp;rsquo;s some content.
Tooltip Check out a tooltip about identifying people: identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.
Here&amp;rsquo;s an h3 And here&amp;rsquo;s an h4 Include The next paragraph is an include.</description></item><item><title>Test Page</title><link>https://docs.customer.io/academy/test/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/test/</guid><description>Test content Here&amp;rsquo;s some content.
Tooltip Check out a tooltip about identifying people: identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.
Here&amp;rsquo;s an h3 And here&amp;rsquo;s an h4 Include The next paragraph is an include.</description></item><item><title>Test Page</title><link>https://docs.customer.io/academy/quick-start/test-folder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/test-folder/</guid><description>Test content Here&amp;rsquo;s some content.
Tooltip Check out a tooltip about identifying people: identifyThe Customer.io operation that adds or updates a person. When you identify a person, Customer.io either adds a person if they don&amp;rsquo;t exist in your workspace, or updates them if they do. Before you identify someone (by their email address or an ID), you can track them anonymously.
Here&amp;rsquo;s an h3 And here&amp;rsquo;s an h4 Include The next paragraph is an include.</description></item><item><title>Test your improvements</title><link>https://docs.customer.io/academy/quick-start/course-5/test-improvements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-5/test-improvements/</guid><description>NOT IN COURSE
Scenario: Test your welcome email improvement You&amp;rsquo;ve identified that your Brand Kits welcome email needs a stronger call-to-action to improve Brand Kit creation rates. You want to change from &amp;ldquo;Get started with Brand Kits&amp;rdquo; to &amp;ldquo;Create Your First Brand Kit Now&amp;rdquo; with a prominent button. But instead of just making the change and hoping it works, let&amp;rsquo;s test it properly. The simple A/B test approach The easiest way to test improvements in Customer.</description></item><item><title>Track changes and restore versions</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-track-changes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-track-changes/</guid><description>Sometimes you make some change to an email and realize that was a good old-fashioned mistake. In comes version control to save the day!
Each time you publish an email, Design Studio saves your current version. If you ever need to revert back, head to your Version History to preview previous edits.
Click to view imageOpen image in new window Design Studio automatically saves your work as you go, but it only creates versions when you publish.</description></item><item><title>Track what people do with events</title><link>https://docs.customer.io/academy/quick-start/course-1/events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-1/events/</guid><description>Scenario: Follow up after someone takes action Imagine you’ve just sent Sketcher.io’s new feature launch email announcing Brand Kits and users are starting to engage. Some have signed up and begun exploring templates. Others haven’t done much… yet.
Wouldn’t it be helpful to follow up based on what someone has (or hasn’t) done? Luckily, you can use events! Events let you track user actions and use that behavior to send more timely, relevant messages.</description></item><item><title>Trigger campaigns when objects change</title><link>https://docs.customer.io/academy/data/objects/trigger-object-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/objects/trigger-object-campaigns/</guid><description>Scenario: Notify teams when they upgrade You&amp;rsquo;re in the middle of planning your Team Workspaces messaging. You&amp;rsquo;ve noticed that when Sketcher.io customers upgrade from Starter to Pro plans, team members don&amp;rsquo;t seem to realize that they have access to new features and capabilities. But don&amp;rsquo;t fear, objects are here, and you can now let all people in an account know when this upgrade happens.
Your goal: When an account upgrades, you want to celebrate with the entire team.</description></item><item><title>Trigger campaigns when relationships change</title><link>https://docs.customer.io/academy/data/objects/trigger-relationship-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/objects/trigger-relationship-campaigns/</guid><description>Scenario: Keep admins informed across all accounts You&amp;rsquo;re at Sketcher.io planning your Team Workspaces messaging strategy. You have hundreds of customer accounts using your platform—companies like Acme Corp, Beta Industries, Gamma LLC, and more.
You want to be able to notify a team&amp;rsquo;s admin when someone joins their team. Not all admins across your workspace, but just the admin of the account that changed.
You decide to investigate how this works with Acme Corp as your example&amp;hellip; A new designer just joined their workspace, and you want Sarah (Acme&amp;rsquo;s admin) to know.</description></item><item><title>Understand events and attributes</title><link>https://docs.customer.io/academy/data/course-1/events-attributes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-1/events-attributes/</guid><description>Scenario: Get ready to document By now, you understand what data your Sketcher.io activation campaign needs. You&amp;rsquo;re almost ready to document those requirements for your development team.
But your developer asks: &amp;ldquo;For each piece of data, do you want it tracked as an event or a people attribute?&amp;rdquo;
Click to view imageOpen image in new window Good question. Before you can document anything, you need to understand the difference.
People attributes: What you know about people People attributes are information about a person, like their name, email, account type, or preferences.</description></item><item><title>Understand the three layers of data</title><link>https://docs.customer.io/academy/data/objects/three-layers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/objects/three-layers/</guid><description>Scenario: Figuring out where data lives You&amp;rsquo;re planning data for Sketcher.io&amp;rsquo;s Team Workspaces. You need to store information about Acme Corp and the people who work there.
You need to track:
Sarah&amp;rsquo;s email address Acme Corp&amp;rsquo;s company name How many seats Acme Corp has Sarah&amp;rsquo;s role at Acme Corp But you start to wonder, where does each piece of data live in Customer.io?
The three layers When you work with objects, data can live in three different places:</description></item><item><title>Understand your attribution data</title><link>https://docs.customer.io/academy/data/goals/how-attribution-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/goals/how-attribution-works/</guid><description>Scenario: The data is in Your goal has been live for a few weeks. You can see total upgrades and revenue, and now there&amp;rsquo;s a breakdown by source. Some campaigns are contributing more than others. And a chunk of upgrades are marked as unattributed.
Before you dig into what you do about it, you want to understand how credit got attributed in the first place.
Last-touch attribution When someone achieves your goal, Goals looks backward and asks: of the campaigns I&amp;rsquo;m tracking, which message last qualified for credit before they upgraded?</description></item><item><title>Understand your campaign results</title><link>https://docs.customer.io/academy/quick-start/course-5/campaign-performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-5/campaign-performance/</guid><description>Scenario: Your Brand Kits campaign is a top performer—now what? Great news! Your Analysis report showed that your Brand Kits onboarding campaign is outperforming your other campaigns with solid conversion rates and engagement. Remember, the whole point of this campaign is to get people to create their first Brand Kit, and early data shows it&amp;rsquo;s working. Click to view imageOpen image in new window Your manager is impressed and wants to know: &amp;ldquo;What&amp;rsquo;s making this campaign so successful?</description></item><item><title>Welcome to Design Studio!</title><link>https://docs.customer.io/academy/design-and-content/send-first-email/ds-welcome/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/design-and-content/send-first-email/ds-welcome/</guid><description>Scenario: Product announcements for all You’re a growth marketer at Sketcher.io, and you’re sending product announcements every month and tired of rebuilding the same email structure from scratch—or worse, copying last month&amp;rsquo;s email and hoping you caught all the changes.
Design Studio solves this. Use it to set brand defaults once, build reusable templates, and stop reinventing the wheel. You can drag in pre-built blocks or jump into the code when you need to, whatever works for your workflow!</description></item><item><title>Welcome to your data journey</title><link>https://docs.customer.io/academy/data/course-1/data-journey/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-1/data-journey/</guid><description>&amp;nbsp;Getting started
This course begins the Set up your data learning path or works as a standalone course if you just need to identify what customer data your team should bring into Customer.io. Set the scene You&amp;rsquo;re the growth marketer at Sketcher.io, a design platform with big ambitions but an even bigger problem.
Your CEO just pulled you into an urgent meeting. The dashboard in front of her shows a stark number: 30%</description></item><item><title>What are campaigns?</title><link>https://docs.customer.io/academy/quick-start/course-4/why-campaigns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-4/why-campaigns/</guid><description>Scenario: Onboard new premium users Good news: your newsletter worked! A healthy number of free users saw the announcement about Brand Kits and upgraded to a premium account so they could get access. Now what?
Well, Sketcher.io&amp;rsquo;s product team noticed something important 👀: many new premium users drop off if they don&amp;rsquo;t use Brand Kits in the first week. So they&amp;rsquo;ve asked for your help to fix that.
The solution? A simple onboarding campaign that:</description></item><item><title>What are objects?</title><link>https://docs.customer.io/academy/data/objects/objects-explained/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/objects/objects-explained/</guid><description>Scenario: The challenge you&amp;rsquo;re facing Remember your VP&amp;rsquo;s question about messaging admins when someone joins a team? To answer if that&amp;rsquo;s possible, you first need to figure out where team account data should live in Customer.io.
Let&amp;rsquo;s work through this with Acme Corp, one of Sketcher.io&amp;rsquo;s customers who have 50 employees using Team Workspaces.
You need to store their account information: things like the company name, subscription tier, renewal date, and total seat number.</description></item><item><title>What's next</title><link>https://docs.customer.io/academy/quick-start/course-2/segments-whats-next/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-2/segments-whats-next/</guid><description>🎉 You made it! You’ve just learned how to build segments that help you reach the right people—at the right time—with the right message. Whether you’re onboarding new users, re-engaging inactive ones, or preparing for a campaign, segmentation gives you the foundation to do it with focus and flexibility.
Now that you know how to build your audience, it’s time to put it to work.
Up next: Sending your first newsletter In the next course in this learning path, you’ll learn how to create and send a one-time newsletter—perfect for product announcements, updates, and promotional messages.</description></item><item><title>What's next?</title><link>https://docs.customer.io/academy/data/course-1/whats-next/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-1/whats-next/</guid><description>🎉 You&amp;rsquo;ve built the foundation Look at all you&amp;rsquo;ve accomplished in this course:
Started with clear campaign goals instead of vague &amp;ldquo;track everything&amp;rdquo; requests Applied the three-question framework to help identify data needs Learned how to structure data as events and attributes Named your data using clear, consistent conventions Documented your requirements in a developer-ready format You&amp;rsquo;ve transformed scattered campaign ideas into organized, actionable requirements. That&amp;rsquo;s the hard part!
What comes next?</description></item><item><title>What's next?</title><link>https://docs.customer.io/academy/data/course-2/whats-next/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-2/whats-next/</guid><description>Congratulations! 🎉 You now have an understanding of integration methods, you know how to communicate priorities with your development team, and you can spot data formatting issues before they cause problems.
That&amp;rsquo;s real progress on a topic that&amp;rsquo;s not always easy.
What happens next Your developer builds the integration based on your tracking plan and data starts flowing into Customer.io. Then what?
Start by taking the next course in this learning path, Organize your data for long-term success, which shows you how to keep everything clean and documented as your workspace grows.</description></item><item><title>What's next?</title><link>https://docs.customer.io/academy/data/course-3/whats-next/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-3/whats-next/</guid><description>You did it! 🎉 Think about what you can do now: audit your workspace to spot problems before they cause issues, document your data so teammates and AI can actually use it, and have productive conversations with your developer about what needs fixing so you can keep your data clean. Those are real, practical skills that&amp;rsquo;ll save you headaches down the road.
What you can do now With clean, documented data in your workspace, you&amp;rsquo;re set up to:</description></item><item><title>What's next?</title><link>https://docs.customer.io/academy/data/goals/whats-next/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/goals/whats-next/</guid><description>You&amp;rsquo;ve made the shift You started this course with campaigns running and outcomes that mattered, but no clear line connecting the two. Now you can define a goal around a real business outcome, connect your campaigns to it, understand how attribution assigns credit, and use that data to decide what to scale, what to fix, and where the opportunities are.
Click to view imageOpen image in new window That&amp;rsquo;s a shift from measuring campaigns in isolation to measuring what your messaging actually drives.</description></item><item><title>What's next?</title><link>https://docs.customer.io/academy/data/objects/whats-next/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/objects/whats-next/</guid><description>You&amp;rsquo;ve unlocked a new level of messaging You started this course wondering when (and if) you needed objects. Or maybe even just what objects were. Now you can:
Recognize when objects solve a messaging challenge that person data can&amp;rsquo;t Design object structures with object attributes and relationship attributes Trigger campaigns when objects change and route messages based on relationships Use object data to personalize content and control campaign timing Document object requirements for your dev team Click to view imageOpen image in new window You&amp;rsquo;ve moved beyond person-level messaging into messaging that responds to what happens at the object level.</description></item><item><title>What's next?</title><link>https://docs.customer.io/academy/quick-start/course-1/whats-next/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-1/whats-next/</guid><description>🎉 You made it! You’ve set up your data, explored real profiles, and seen how Customer.io turns attributes and events into personalized, meaningful messages. Nice work!
Plan ahead for messaging strategy Before you add people to your own workspace, think about how you want to group them.
You’ll use attributes and event data to group people into segments. And that determines who enters your campaigns, which messages they receive, and when they receive them.</description></item><item><title>What's next?</title><link>https://docs.customer.io/academy/quick-start/course-3/newsletters-whats-next/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-3/newsletters-whats-next/</guid><description>🎉 You&amp;rsquo;ve sent your first message! Congratulations! You&amp;rsquo;ve mastered the art of the one-time newsletter. Throughout this course, you&amp;rsquo;ve learned how to:
💡 Decide when to use a newsletter vs. a campaign or other automation 🎯 Choose the right audience using a data-driven segment 📅 Fine-tune sending options like message limits and pacing 📊 Set a conversion goal to measure the real impact of your message 📝 Create and personalize newsletter content using Design Studio ✅ Apply best practices for sending smarter, not broader, by focusing on engaged audiences You&amp;rsquo;re now equipped to quickly announce new features, share product updates, or promote limited-time offers to a targeted group, all while optimizing for deliverability and engagement.</description></item><item><title>What's next?</title><link>https://docs.customer.io/academy/quick-start/course-4/campaigns-whats-next/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-4/campaigns-whats-next/</guid><description>🎉 You built your first automated campaign! Congratulations! You&amp;rsquo;ve just created something powerful: an automated onboarding campaign that welcomes new premium users, guides them toward value, and adapts based on their behavior.
What you accomplished Let&amp;rsquo;s take a moment to appreciate what you&amp;rsquo;ve accomplished:
✅ Built a complete customer journey that runs automatically ✅ Used smart timing to send messages at the right moments ✅ Created personalized paths based on user behavior ✅ Set up data actions to track engagement and outcomes ✅ Defined success metrics to measure real business impact Think like a growth professional As you build more campaigns, remember:</description></item><item><title>What's next?</title><link>https://docs.customer.io/academy/quick-start/course-5/metrics-whats-next/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-5/metrics-whats-next/</guid><description>🎉 You finished the Quick Start learning path! Throughout this course, you learned how to:
Identify what&amp;rsquo;s working and where people are dropping off using Analysis reports and workflow metrics Read campaign data and understand the story behind the numbers Go from spotting a problem to fixing it in the same conversation with the agent Click to view imageOpen image in new window You can now look at your messaging data and know what it&amp;rsquo;s telling you and what to do about it.</description></item><item><title>When you need custom roles</title><link>https://docs.customer.io/academy/quick-guides/custom-roles/why-custom-roles/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/custom-roles/why-custom-roles/</guid><description>Scenario: When standard roles aren&amp;rsquo;t enough Standard roles in Customer.io—Workspace Admin, Author, and Viewer—work great for many teams. But sometimes, your team&amp;rsquo;s actual needs don&amp;rsquo;t fit neatly into these categories.
Here are three situations where standard roles fall short:
Click to view imageOpen image in new window In each case, standard roles are either too broad (they can see and do way too much) or too narrow (they can&amp;rsquo;t do their actual job).</description></item><item><title>Why newsletters?</title><link>https://docs.customer.io/academy/quick-start/course-3/why-newsletters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-start/course-3/why-newsletters/</guid><description>Scenario: Announce your new feature Brand Kits just launched and the team wants to turn waitlist interest into paid upgrades. You&amp;rsquo;ve got a group of free plan users who signed up to hear about this premium feature. Now you need to get them excited enough to act.
The message needs to be timely and targeted. You don&amp;rsquo;t need ongoing automations for now, you just need a clear announcement to the right people.</description></item><item><title>Work with your dev team to set up objects</title><link>https://docs.customer.io/academy/data/objects/dev-collaboration-objects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/objects/dev-collaboration-objects/</guid><description>From concept to implementation Throughout this course, you&amp;rsquo;ve been learning through Sketcher.io&amp;rsquo;s example. Their objects were already set up and Acme Corp&amp;rsquo;s and other account data was flowing in, campaigns were triggering when seat limits changed, and everything just worked.
But Sketcher.io didn&amp;rsquo;t start that way. At some point, someone at Sketcher.io (likely) had to work with their dev team to get objects implemented. And if you want to use objects in your workspace, you&amp;rsquo;ll probably need to do the same thing.</description></item><item><title>Work with your developer</title><link>https://docs.customer.io/academy/data/course-2/work-with-dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/data/course-2/work-with-dev/</guid><description>Scenario: The awkward Slack message You have your Data Tracking Plan ready including all the events and attributes you need for your activation campaign, neatly documented with descriptions and campaign goals. Now you need to talk to your developer about actually implementing it.
You&amp;rsquo;ve drafted a Slack message three times and deleted it each time.
Should you just send them the spreadsheet and let them figure it out? Should you explain every single detail?</description></item><item><title>Your data and what you can build</title><link>https://docs.customer.io/academy/quick-guides/customerio-101/what-you-do/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.customer.io/academy/quick-guides/customerio-101/what-you-do/</guid><description>The data that powers your messaging Before you can send behavior-based messages, Customer.io needs context about your customers.
Getting that context means sending certain types of data to Customer.io:
Data type What it is Examples People Your customers and users jason@example.com, sarah@company.com Person attributes Facts about them plan_type = premium, signup_date = 2025-01-10, location = San Francisco Events Actions they take signed_up, upgraded_plan, invited_teammate This combination is what makes behavior-based messaging work.</description></item></channel></rss>