Braze is a marketing automation platform: campaigns, analytics, and customer engagement. Only the transactional and product notification workflows move to Courier. Marketing campaign orchestration is outside its scope.
Map Braze concepts to Courier
Campaigns and templates
Braze campaigns bundle content, audience targeting, scheduling, and delivery into one resource. Courier splits them: own the content, and the or handle delivery. Your product team updates copy in Design Studio without touching delivery logic. Engineers change routing or timing without breaking template content. One template holds content for every channel (email, SMS, push, chat, inbox). Build it with drag-and-drop blocks, or define it in JSON.Canvas and Journeys
Braze Canvas is a visual builder for multi-step, multi-channel journeys. Courier do the same for transactional flows: , , , , and .
Canvas entry criteria become : an API invoke, an inbound webhook, a Segment event, or a user joining an audience. Build journeys or through the .
Segments and audiences
Braze segments filter on user attributes, behaviors, and events. Courier group users dynamically by profile attributes. Define the filter rules once and Courier keeps membership current as profiles change. You can also target a , a static subscriber group, or send to individual users.Users and profiles
Courier store a recipient’s email, phone, push tokens, and any custom properties you personalize with. Profiles accept nested JSON, so structured data like account tiers, team roles, or feature flags fits as-is. Create profiles ahead of time through the API, or identify users inline at send time. Pass auser_id that doesn’t exist yet and Courier creates the profile.
Subscription groups and preferences
Braze subscription groups manage opt-in and opt-out per channel. Courier go further. Users opt out by channel, category, or notification topic, and Courier enforces that at send time. Courier also ships a and embeddable for a preference center inside your app.Content Cards and Inbox
Braze Content Cards deliver persistent in-app content. Courier is a real-time in-app notification center, with drop-in components for , , , and . Inbox runs on the same delivery pipeline as email, push, and SMS. There’s no separate provider to configure. You get read/unread state, archiving, per-user history, , and .Connected content and dynamic data
Braze’s Connected Content pulls external data into templates at render time. In Courier, you pass the data a template needs in thedata field on the send request. To fetch data mid-journey, the calls an external API and passes the response to later nodes.
Templating language
Braze uses Liquid to personalize messages. Courier uses and{{variable}} syntax. Both support conditionals, loops, and helpers for date formatting, string manipulation, and conditional rendering.
Why Courier
- API-first for developers. Courier is built for transactional and product notifications. A single API call sends to any channel. No campaign setup required.
- Content and logic stay separate. Templates and journeys are independent resources. Your product team updates copy in Design Studio while engineers tune journey timing.
- Design Studio. Build email, SMS, push, and chat content with drag-and-drop blocks. Preview across channels, personalize with variables, and publish without deploying code.
- Built-in in-app channel. Courier Inbox works without a third-party provider. Drop in a React, iOS, or Android component and send on the same pipeline as email and push.
- Automatic failover. Configure multiple providers per channel. If your primary email provider goes down, traffic shifts to the backup without a code change.
- The providers you already use. Email, SMS, push, chat, webhooks, CDPs, and observability tools. Switch providers without changing your send code.
- Full delivery observability. track every message from API request to provider delivery, with a timeline, error details, and the rendered content.
Migrate step by step
1
Create your Courier workspace
and create a workspace. Test and Production have independent API keys, so you can migrate without touching live traffic.
2
Configure integrations
Go to Integrations in the Courier dashboard and connect the same providers you use in Braze (SendGrid, Twilio, FCM). Each provider maps to a channel type (email, SMS, push, chat). Configure multiple providers per channel for .If you use Braze Content Cards for in-app messaging, enable . No external provider needed.
3
Recreate templates
Braze campaigns bundle content and delivery config. Extract the content into in Design Studio:
- Create a new template for each transactional notification type
- Add content blocks for each channel (email, SMS, push, etc.)
- Convert Liquid variables (
{{user.first_name}}) to ({{first_name}}). The data comes from the send request’sdatafield - Publish the template to make it available for sending
4
Migrate user data
Create profiles with the same identifiers you use in Braze, through the or inline at send time.
5
Set up preferences
If you use Braze subscription groups, recreate your preference structure in Courier:
- Define that map to your Braze subscription groups
- Configure default channel routing per topic
- Migrate user preference selections via the
6
Update your send calls
Replace Braze’s campaign trigger or Canvas trigger API calls with Courier’s :Courier handles routing, preferences, and failover from your template and workspace configuration.
7
Set up event streaming
If you stream delivery events with Braze Currents, configure to forward message events (sent, delivered, opened, clicked) to your data warehouse or analytics pipeline.
8
Test and cut over
- Send test messages in your Test environment and verify delivery in
- Validate that preferences, routing, and template rendering match your Braze setup
- Switch your production code to use Courier’s Production API key
- Monitor and for delivery confirmation
Migrate with an AI agent
Most of this migration is mechanical: read a campaign definition, create the equivalent Courier template, rewrite the call site. A coding agent handles that well. Three things to set up first:-
teaches the agent Courier’s real APIs and patterns so it stops guessing at endpoints:
In Claude Code, install it as a plugin instead. The plugin self-updates and ships the Courier docs MCP server.
- gives the agent direct access to your workspace: create templates, build journeys, upsert users, and read send logs. See for setup in Claude Code, Cursor, Codex, and VS Code.
- Docs for agents. Point it at llms-full.txt when it needs API detail beyond this page.
{{user.*}} against its own user store. Each one becomes either a Profile attribute you sync or a value you pass in data. Decide that before the Templates exist, not after.