Skip to main content
A send begins when your application calls the Courier API to send a message. Courier renders your content, determines which channels to use, and sends through your configured providers. Each message is tracked from request to delivery so you can monitor outcomes in real time. Courier provides a single source of truth for message observability across all channels.

Your App → Courier API → Providers → User

You decide what to send and who should receive it. Courier manages how it gets there. It handles routing, preferences, retries, and logging automatically. Here’s a example of sending a very simple email. Learn more about sending
const { requestId } = await courier.send({
  message: {
    to: { email: "user@example.com" },
    content: {
      title: "Welcome!",
      body: "Thanks for signing up, {{name}}"
    },
    data: { name: "John Doe" },
    routing: {
      method: "single",
      channels: ["email"]
    }
  }
});

Core Concepts

Every send request in Courier is built around a few core ideas that define how notifications reach your users. Understanding these will help you design consistent, user-aware notification experiences. Recipients
Defines who should receive the notification. You can include recipient details (eg email address, phone number, push token) directly in your API request or reference a user_id linked to a stored Courier user profile.
Templates
You can define message content inline in your API request or use a saved template. Templates are reusable designs stored in Courier that keep messages consistent across channels and easy to update without code changes. Learn more in the Template Designer overview.
Data
Provides the dynamic variables used to personalize a message. For example, include values like {{name}} or {{order_id}} to render context-specific content inside your template. Learn how to include data in your send request in the Inserting Variables guide.
Routing
Specifies how the message is sent. Choose a single channel, send through all available channels, or use a priority order for automatic fallback. See Channel Priority for details on routing methods.
User Preferences
Controls how and when each user receives notifications. Courier automatically checks a user’s preferences before sending, ensuring you respect their channel choices, frequency settings, and opt-outs. Learn more in the Preferences Overview.

These concepts work together in every send request.
You define the content, recipients, and intent, and Courier handles routing, personalization, and user-specific preferences automatically.