Map Novu concepts to Courier
Workflows, templates, and Journeys
Novu workflows combine content, channel routing, and orchestration logic (digest, delay, conditions) in one resource. Courier gives content and orchestration each their own tools. That’s the biggest difference between the two. own the content layer. Design them visually in Design Studio (drag-and-drop blocks for email, SMS, push, and chat) or in code with JSON. Either way, your product team ships copy changes without an engineering cycle. own the orchestration layer: , , , , and . Each journey delivers one channel with its own journey template. For sends with no orchestration, a workspace template holds every channel and goes out through the .
A journey starts from a : an API invoke, an inbound webhook, a Segment event, or a user joining an audience. Build journeys visually or through the .
Subscribers and users
Novu subscribers map to Courier . Both store email, phone, push tokens, locale, and custom properties. Courier profiles accept nested JSON, so account tiers, team roles, and feature flags fit 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.
Topics and subscription topics
Novu topics group subscribers for bulk delivery. The Courier equivalent depends on your use case:- For notification categories (letting users opt in/out of types of notifications): use within Preferences
- For bulk delivery to groups: use or
Integrations
Novu and Courier both call provider connections “integrations.” Courier supports providers across email, SMS, push, chat, and webhooks. Wire up multiple providers for one channel type and Courier between them automatically, with no code changes.Digest and delay
Courier’s covers Novu’s digest step. It collects a user’s events and releases them as one summary when it hits a maximum item count, a quiet period with no new events, or a maximum wait. The first event’s run continues to the summary send, and the rest end at the Batch node.
In the summary template,
{{batch.count}} is the total and data.batch.items holds the kept events. A summary costs one send, however many events it rolls up.
For summaries that release on a fixed schedule the user controls (a daily activity email, a weekly report), use the node instead.
works like Novu’s delay step. Specify a duration and the journey pauses before the next node.
Preferences
Novu’s preference system supports global and per-workflow channel controls. Courier support the same hierarchy (global, per-topic, per-channel) and enforce it at send time. Courier also ships a you can deploy in minutes, plus embeddable for in-app preference centers.In-app notifications
Novu’s Inbox component handles in-app notifications. Courier does the same, with drop-in components for , , , and . Courier Inbox runs on the same delivery pipeline as email, push, and SMS. There’s no separate service to manage. You get read/unread state, archiving, per-user history, , and .Tenants
Courier work like Novu tenants. Scope branding, preference defaults, and notification feeds to one customer organization. Setmessage.context.tenant_id on a send and Courier applies that tenant’s brand and preferences.
Why Courier
- Fully managed infrastructure. No self-hosting to maintain, no bridge endpoints to deploy. Courier handles orchestration, delivery, retries, and scaling.
- 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 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 SendGrid goes down, your email still goes out through your backup provider.
- Hosted preferences out of the box. Ship a user-facing preference center with a single config, or embed React components directly in your app.
- 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 detailed timeline, error details, and rendered content inspection.
Migrate step by step
1
Create your Courier workspace
and create a workspace. Courier gives you separate Test and Production with their own API keys, so you can migrate without touching live traffic.
2
Configure integrations
Go to Integrations in your Courier dashboard and connect the same providers you use in Novu (SendGrid, Twilio, FCM, etc.). Each provider maps to a channel type (email, SMS, push, chat). Configure multiple providers per channel for .If you use Novu’s inbox component, is already set up in production and test. No external provider needed.
3
Recreate templates
Novu workflows contain inline content per channel step. In Courier, extract the content into :
- Create a new template for each notification type
- Add content blocks for each channel (email body, SMS text, push title/body, etc.)
- Bring over your Handlebars variables with a source prefix:
{{data.order_id}}for trigger payload data,{{profile.first_name}}for subscriber fields - Publish the template to make it available for sending
4
Recreate workflows as journeys
If your Novu workflows include digest, delay, or conditional logic, recreate them in , with a Send node per channel. Build journeys visually or programmatically via the .For notification types that need no orchestration (no delays, no digests), skip journeys and send directly via the .
5
Migrate subscriber data
Create user profiles in Courier with the same identifiers you use in Novu, via the or inline at send time.
6
Set up preferences
If you use Novu’s subscriber preferences, recreate your structure in Courier:
- Define that map to your Novu workflow categories
- Configure default channel routing per topic
- Import each subscriber’s choices through the , before any optional notification sends from Courier
7
Update your trigger calls
Replace Novu’s workflow trigger calls with Courier’s :
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 Novu setup
- Switch your production code to use Courier’s Production API key
- Monitor and for delivery confirmation