Skip to main content
This guide maps Novu concepts to Courier and gives you a step-by-step migration plan.

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 splits these into two independent pieces. That is the biggest architectural difference between the platforms. 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 . A journey’s references a template by ID, so the two evolve independently. 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 a user_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 with a time window. It collects matching events, then releases them as one aggregated payload for a single summary notification. Your template receives the full list of collected events. For summaries that release on a fixed schedule the user controls (a daily activity email, a weekly report), use the 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. No custom UI required.

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. Pass a tenant_id at send time and Courier applies that tenant’s branding and preferences.

Why Courier

  • Fully managed infrastructure. No self-hosting to maintain, no bridge endpoints to deploy. Courier handles orchestration, delivery, retries, and scaling.
  • 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 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. No custom UI required.
  • 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, enable . No external provider needed.
3

Recreate templates

Novu workflows contain inline content per channel step. In Courier, extract the content into :
  1. Create a new template for each notification type
  2. Add content blocks for each channel (email body, SMS text, push title/body, etc.)
  3. Use {{variable}} syntax for dynamic data. Both platforms use the same Handlebars-style approach
  4. 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 . 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:
  1. Define that map to your Novu workflow categories
  2. Configure default channel routing per topic
  3. Migrate subscriber preference selections via the
Courier also provides a you can deploy immediately, or to embed preferences in your app.
7

Update your trigger calls

Replace Novu’s workflow trigger calls with Courier’s :
Courier handles routing, preferences, and failover automatically based on your template and workspace configuration.
8

Test and cut over

  1. Send test messages in your Test environment and verify delivery in
  2. Validate that preferences, routing, and template rendering match your Novu setup
  3. Switch your production code to use Courier’s Production API key
  4. Monitor and for delivery confirmation

Map the API