Braze is a full marketing automation platform covering campaigns, analytics, and customer engagement. This guide focuses specifically on migrating transactional and product notification workflows; marketing campaign orchestration is outside Courier’s scope.
Mapping Braze Concepts to Courier
Campaigns and Templates
Braze campaigns bundle content, audience targeting, scheduling, and delivery into a single resource. Courier separates these concerns: templates own the content, and the Send API or Automations handle delivery. This separation means your product team can update notification copy in the visual Designer without touching delivery logic, and engineers can adjust routing or timing without risk of breaking template content. Templates hold content for every channel (email, SMS, push, chat, inbox) in a single resource. You design them with drag-and-drop blocks or define them programmatically with Elemental JSON.Canvas and Automations
Braze Canvas is a visual workflow builder for multi-step, multi-channel journeys. Courier Automations fill the same role for transactional flows: delays, conditions, branching, digests, and cancellation.| Canvas Step | Courier Equivalent |
|---|---|
| Message step | Send node (references a template) |
| Delay step | Delay node |
| Decision split | Condition node |
| Action paths | Branching with conditions |
| Audience paths | Audience filtering + conditions |
Segments and Audiences
Braze segments use filters on user attributes, behaviors, and events. Courier Audiences provide similar dynamic grouping based on user profile attributes. Define filter rules once and Courier keeps the audience membership current as profiles change. For simpler use cases, you can also target users with Lists (static subscriber groups) or send to individual users directly.Users and Profiles
Courier profiles store everything about a recipient: email, phone, push tokens, and any custom properties you need for personalization. Profiles accept nested JSON natively, so structured data like account tiers, team roles, or feature flags fits naturally. You can create profiles ahead of time through the API, or identify users inline at send time. If you pass auser_id that doesn’t exist yet, Courier creates the profile on the fly.
Subscription Groups and Preferences
Braze subscription groups manage opt-in/opt-out status per channel. Courier Preferences go further: users can opt out by channel, category, or specific notification topic, and Courier enforces these automatically at send time. On top of the API, Courier ships a hosted preference page you can deploy in minutes and embeddable React components for building a preference center directly into your app.Content Cards and Inbox
Braze Content Cards deliver persistent in-app content. Courier Inbox serves a similar purpose as a real-time in-app notification center, with drop-in components for React, iOS, Android, and vanilla JS. Inbox runs on the same delivery pipeline as email, push, and SMS; there’s no separate provider to configure. Out of the box you get read/unread state, archiving, per-user history, toast notifications, and tab-based organization.Connected Content and Dynamic Data
Braze’s Connected Content pulls external data into templates at render time. In Courier, you pass all the data a template needs through thedata field on the send request. For automation flows that need to fetch data mid-sequence, the Fetch Data node calls external APIs and passes the response into subsequent steps.
Templating Language
Braze uses Liquid for message personalization. Courier uses Handlebars with{{variable}} syntax. Both support conditionals, loops, and filters. Courier also provides built-in helpers for common operations like 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 automations are independent resources. Your product team updates copy in the Designer while engineers tune workflow timing; neither blocks the other.
- Visual template designer. 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 deliver in-app notifications on the same pipeline as email and push.
- Automatic failover. Configure multiple providers per channel and Courier fails over automatically. If your primary email provider goes down, traffic shifts to the backup without code changes.
- 50+ integrations. Email, SMS, push, chat, webhooks, CDPs, and observability tools. Switch providers without changing your send code.
- Full delivery observability. Message Logs track every message from API request to provider delivery with a detailed timeline, error details, and rendered content inspection.
Migration Steps
Create your Courier workspace
Sign up and create a workspace. Courier gives you separate Test and Production environments with independent API keys, so you can migrate safely without affecting live traffic.
Configure integrations
Go to Integrations in your Courier dashboard and connect the same providers you use in Braze (SendGrid, Twilio, FCM, etc.). Each provider maps to a channel type (email, SMS, push, chat). You can configure multiple providers per channel for failover.If you use Braze Content Cards for in-app messaging, enable Courier Inbox; no external provider needed.
Recreate templates
Braze campaigns bundle content and delivery config together. In Courier, start by extracting the content portion into templates:
- 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 Handlebars syntax ({{first_name}}); the data comes from the send request’sdatafield - Publish the template to make it available for sending
Migrate user data
Create user profiles in Courier with the same identifiers you use in Braze. You can create profiles via the Profiles API or inline at send time.For bulk migration, use the Bulk API to upsert users in batches.
Set up preferences
If you use Braze subscription groups, recreate your preference structure in Courier:
- Define subscription topics that map to your Braze subscription groups
- Configure default channel routing per topic
- Migrate user preference selections via the Preferences API
Update your send calls
Replace Braze’s campaign trigger or Canvas trigger API calls with Courier’s Send API:Courier handles routing, preferences, and failover automatically based on your template and workspace configuration.
Set up event streaming
If you use Braze Currents to stream delivery events, configure Courier Outbound Webhooks to forward message events (sent, delivered, opened, clicked) to your data warehouse or analytics pipeline.
Test and cut over
- Send test messages in your Test environment and verify delivery in Message Logs
- Validate that preferences, routing, and template rendering match your Braze setup
- Switch your production code to use Courier’s Production API key
- Monitor Message Logs and Analytics for delivery confirmation
API Mapping
| Operation | Braze | Courier |
|---|---|---|
| Send a notification | POST /messages/send | POST /send |
| Trigger a workflow | POST /canvas/trigger/send | POST /automations/invoke |
| Create/update a user | POST /users/track | PUT /profiles/:id |
| Get a user | POST /users/export/ids | GET /profiles/:id |
| Manage subscriptions | POST /subscription/status/set | PUT /users/:id/preferences/:topic |
| Get message status | Campaign analytics endpoints | GET /messages/:id |
| Bulk operations | POST /users/track (batch) | POST /bulk |