Skip to main content
A send is one API call. Name who it goes to and what it says. Courier renders it, applies preferences, routes, and delivers.
The response returns a requestId, not a delivery result. Find it in Logs to confirm the message rendered and delivered.

Prerequisites

Three ways to send

All three send the same content: a template you design once. What differs is what starts the send.

1. Templates

Use a template when your application triggers the send. A receipt, a password reset, an alert. Your app calls the API with a recipient and a template, like the example above. The template holds what the message says on every channel, plus its routing and brand settings. Your app supplies data, and the template’s variables render each recipient’s own version. That split keeps a send small. Content changes ship by publishing the template, with no deploy.

Design a Template

Build it in the visual editor, or manage it as JSON over the Templates API.

2. Broadcasts

Use a broadcast when you choose the moment. One message to a whole list or audience, sent now or on a schedule. You pick the group, and Courier fans it out.

Send a Broadcast

Reach a saved list or audience in one send.

3. Journeys

Use a journey when the send happens later, or depends on what the user does. A multi-step flow that runs per user, with delays, branching, and enrichment between steps. A user event or an API call starts it, and the journey decides what comes next.

Build a Journey

Lay out steps, delays, and branches in the visual builder.

How it works

Every send is one message object posted to POST /send, whichever SDK you call it from. It has four parts:
Pass an array in to to reach several recipients, or contact details inline for a one-off: { "email": "sarah@acme-corp.com" }. A message with no reusable design can carry its content inline instead of a template. That content is Elemental, the same format a template renders. Courier enforces each recipient’s preferences at send time. Opt-outs and channel choices apply without extra logic in your code.

The pipeline

Courier records every step, so you can follow a message from request to delivery in message logs. Transient provider errors retry, and an unavailable provider or channel fails over to the next one.

Idempotency

Send an Idempotency-Key header to make a retry safe. A repeated request with the same key returns the original response instead of sending again. A retry after a network failure can’t duplicate the send.
Add routing to pin the channels for this request, or channels and providers to adjust delivery settings. See channel settings & overrides and how routing & failover work.

FAQ

Pass an array of recipients in to, or send to a list or audience. For a large group, a list or audience send fans out for you (see Send to lists & audiences).
The API returns a requestId, not a delivery result, since the send runs asynchronously. Check delivery in message logs or receive a message:updated webhook.
Send an Idempotency-Key header. A second request with the same key returns the original result without sending again.