Mapping SuprSend Concepts to Courier
Workflows and Automations
SuprSend workflows use four node types (trigger, function, branch, delivery) to orchestrate notification logic. Courier Automations give you the same capabilities with a visual designer and a programmatic API.| SuprSend Node | Courier Equivalent |
|---|---|
| Trigger node | Automation trigger (API invoke, webhook, or schedule) |
| Delay (function node) | Delay node |
| Batch (function node) | Digest node |
| Branch node | Condition node |
| Delivery node | Send node (references a template + routing) |
Templates
SuprSend organizes notification content in template groups, with separate templates per channel. Courier templates take a unified approach: a single resource holds content for every channel (email, SMS, push, chat, inbox), so you design all channel variants in one place. The visual Designer uses drag-and-drop content blocks, and there’s a code-first path through Elemental JSON if you prefer to define content programmatically. Both support{{variable}} Handlebars-style personalization, channel-specific overrides, and localization.
Because templates live in the Designer, your product team can update copy, layout, and branding without writing code or waiting for a deploy. Publish when ready and it’s live immediately.
Integrations
What SuprSend calls vendors, Courier calls Integrations. These are the provider connections (SendGrid, Twilio, FCM, Slack, etc.) that handle actual message delivery. Courier supports 50+ providers. You can wire up multiple providers for the same channel type, and Courier fails over between them automatically. If your primary email provider goes down, traffic shifts to the backup without any code changes or manual intervention.Routing
Courier’ssingle routing method replicates SuprSend’s smart channel routing: channels are tried in the order you specify, and delivery stops at the first success. For situations where you want to reach users everywhere at once, the all method broadcasts to every listed channel simultaneously.
Routing is configured per send request or per template, and you can layer provider-level failover on top; so you get fallback at both the channel and provider layers.
Digests and Batching
Courier’s Digest node works the same way as SuprSend’s batch function: collect matching events over a configurable time window, then send a single summary notification. Your template gets access to the full list of digested events, so you can render rich summaries across email, push, or in-app.Users and Profiles
Courier profiles store recipient data: email, phone, push tokens, and any custom properties you need. Profiles accept nested JSON natively, which is useful for structured data like subscription tiers, team roles, or feature flags. Profiles can be created ahead of time through the API or identified inline at send time. Pass auser_id that doesn’t exist yet and Courier creates the profile automatically.
Preferences
SuprSend’s preference system supports global channel opt-outs, category-level controls, and per-category overrides. Courier Preferences support the same hierarchy and enforce them automatically at send time, so you don’t need conditional logic in your code. On top of the API, Courier ships a hosted preference page you can deploy in minutes and embeddable React components for in-app preference centers. No custom UI work required.In-App Notifications
Courier Inbox is a real-time in-app notification center with drop-in components for React, iOS, Android, and vanilla JS. It runs on the same delivery pipeline as email, push, and SMS, so 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.Tenants
Tenants work similarly across both platforms. You scope branding, preference defaults, and notification feeds to individual customer organizations. Pass atenant_id at send time and Courier applies per-tenant branding and preferences automatically. Branding lives directly on the Tenant resource rather than as a separate object.
Why Courier
- Content and logic stay separate. Templates and automations are independent. 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.
- Flexible routing. Priority-based fallback (
single) or broadcast to all channels (all). Configure multiple providers per channel for automatic failover at the provider level too. - 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.
- 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.
- 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 as SuprSend vendors (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 SuprSend’s inbox, enable Courier Inbox; no external provider needed.
Recreate templates
SuprSend template groups contain per-channel templates. In Courier, a single template holds content for all channels:
- Create a new template for each notification type
- Add channel-specific content blocks (email body, SMS text, push title/body, etc.)
- Use
{{variable}}syntax for dynamic data; both platforms use the same Handlebars-style approach - Publish the template to make it available for sending
Recreate workflows as automations
If you use SuprSend workflows with delays, batching, or branching, recreate them in Automations. You can build automations visually in the Automations Designer or define them programmatically via the Automations API.For simple notification types that don’t need orchestration (no delays, no digests), you can skip automations entirely and send directly via the Send API.
Migrate user data
Create user profiles in Courier with the same identifiers you use in SuprSend. 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 SuprSend’s preference system, recreate your structure in Courier:
- Define subscription topics that map to your SuprSend categories
- Configure default channel routing per topic
- Migrate user preference selections via the Preferences API
Update your send calls
Replace SuprSend’s workflow trigger calls with Courier’s Send API. A basic send looks like this:Courier handles routing, preferences, and failover automatically based on your template and workspace configuration. For multi-channel sends, set the This tries push first, then email, then SMS; the same pattern as SuprSend’s smart channel routing.
routing field: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 SuprSend setup
- Switch your production code to use Courier’s Production API key
- Monitor Message Logs and Analytics for delivery confirmation
API Mapping
| Operation | SuprSend | Courier |
|---|---|---|
| Send a notification | POST /trigger | POST /send |
| Create/update a user | POST /subscriber | PUT /profiles/:id |
| Get a user | GET /subscriber/:id | GET /profiles/:id |
| Set user preferences | POST /subscriber/:id/category/:cat/preference | PUT /users/:id/preferences/:topic |
| Get message status | GET /event/:id | GET /messages/:id |
| Bulk operations | Batch API | POST /bulk |
| Create/update tenant | Tenant API | PUT /tenants/:id |