Level 1: Inline Send
Send a notification with content defined directly in your API call. No templates, no workflows; just one request. This is ideal for transactional messages where the content is generated by your app: password resets, verification codes, order confirmations, alert payloads.Level 2: Templates
Separate content from code by referencing a saved template. Your team designs and updates notifications in Courier’s visual editor; your code just triggers the send with data. This is ideal when non-engineers need to edit copy, when you want consistent branding across channels, or when the same notification is sent from multiple places in your codebase.Level 3: Journeys
When messaging involves multiple steps, timing, branching, enrichment, or user behavior, use Journeys. Journeys are visual workflows that run on Courier’s infrastructure and orchestrate customer messaging across channels. This is ideal for onboarding flows, activation nudges, reminder chains, re-engagement campaigns, and any messaging experience that needs more than a single send.- Send nodes to deliver messages through email, SMS, push, or inbox
- Branches to route users down different paths based on data or behavior
- Delays to pause execution for a duration or until a specific time
- Fetch Data to enrich the workflow with external data
- AI Agent to generate, classify, or transform content and data inside the workflow
- Experiment nodes to test different paths, messages, or strategies
- Throttle to limit how often users pass through a point in the journey
- Run inspection to debug what happened for a specific user at every node
Choosing the Right Level
| Inline Send | Templates | Journeys | |
|---|---|---|---|
| Content ownership | Engineers | Anyone on the team | Anyone on the team |
| Channels | All | All | All |
| Routing & preferences | Automatic | Automatic | Automatic |
| Timing control | Delays only | Delays only | Built-in delays and scheduling |
| Conditional logic | In your code | In your code | Built-in branching |
| Multi-step sequences | Not supported | Not supported | Built-in |
| Data contract | None | None | Typed schema with editor autofill |
| Data enrichment | In your code | In your code | Built-in Fetch Data nodes |
| Debugging | Message logs | Message logs | Step-by-step run inspection |
| Best for | Transactional, code-driven | Team-managed, multi-channel | Complex messaging experiences |
Related Resources
Send a Message
Full Send API reference with examples
Template Designer
Design and manage notification templates
Journeys Overview
Build multi-step customer messaging workflows
How Sending Works
Routing, preferences, and delivery pipeline