# Courier > Courier is infrastructure for product-to-user communication. Send notifications across email, SMS, push, chat, and in-app channels through one API call. ## About - **Type**: APIService - **Category**: Notifications / Messaging Infrastructure - **Language**: English - **Audience**: Developers, SaaS platforms, product engineers - **Pricing**: Free tier available; usage-based pricing - **Last Updated**: 2026-05 - **Base URL**: `https://api.courier.com` - **Auth**: `Authorization: Bearer ` (workspace-scoped; Test and Production keys are separate) - **API Version**: V2 (no version header required; latest is default) ## Core Data Model ``` message → routing (single | all) → channel (email, sms, push, inbox, chat) → provider (SendGrid, Twilio, FCM, etc.) ``` A **message** targets one or more **recipients** (user_id, email, phone_number, list_id, or audience_id). The **routing** object controls whether delivery fans out to all channels in parallel (`method: "all"`) or tries them in order as a fallback chain (`method: "single"`). Each **channel** is fulfilled by a configured **provider**. ## Agent Routing (which API to use) | Intent | Endpoint | Notes | |--------|----------|-------| | One-off send | `POST /send` | Single or multi-recipient | | Inline multi-step workflow | `POST /automations/invoke` (ad-hoc steps) | Define steps inline; no saved template needed | | Saved automation | `POST /automations/{id}/invoke` | Trigger a pre-built automation template | | Visual/long-running flows | `POST /journeys/{id}/invoke` | Journeys API; create via `POST /journeys` | | Many users, one message | Bulk API (3 steps) | `POST /bulk` → add users → run | | Dynamic segment | Audiences (`audience_id` in send) | Filter-based, auto-updating membership | | Static group | Lists (`list_id` in send) | Manual subscribe/unsubscribe | ## Key Concepts - **Recipient types**: `user_id` (stored profile), `email` / `phone_number` (inline), `list_id` (subscriber group), `audience_id` (dynamic segment) - **Inline vs template**: Send with `message.content` for inline content or `message.template` for a dashboard-designed notification - **Routing method**: `"single"` = fallback chain (try first channel, then next on failure); `"all"` = parallel delivery to every channel - **Profile merge vs replace**: `POST /profiles/{id}` merges (PATCH semantics); `PUT /profiles/{id}` replaces the entire profile - **Environments**: Test and Production share a workspace but use different API keys; templates must be published and migrated separately - **Tenants**: `tenant_id` in message context sets multi-tenant scope; affects brand, preferences, and routing defaults - **Preferences**: Users opt in/out per subscription topic; Courier enforces at send time automatically - **Idempotency**: Include an `Idempotency-Key` header on transactional sends (OTP, order confirmations, billing) to prevent duplicates ## Critical Gotchas - `PUT /profiles/{id}` is a **full replacement**; any fields not included are deleted. Use `POST` (merge) for partial updates. - Bulk sending is a 3-step flow: create job → add users → run job. You cannot send in a single call. - `routing.method: "all"` sends to **every** channel simultaneously. Most use cases want `"single"` (fallback chain). - The `requestId` returned by `/send` is a single ID for single-recipient sends but a `requestId` per recipient for multi-recipient. - Templates exist in draft until published. Sending with a template ID uses the last published version. - Brand creation requires `settings` (the API returns 400 without it). Minimal valid: `{ "name": "X", "settings": { "colors": { "primary": "#000", "secondary": "#fff" } } }`. - List subscription objects use `recipientId` (camelCase), not `recipient_id`. - Automation cancellation uses `cancelation_token` (one "l") and a second ad-hoc invoke with `action: "cancel"`. There is no separate `/cancel` endpoint. - Subscription topics must exist before assigning as tenant default preferences; setting a default for a non-existent topic silently fails. - Multi-tenant sends use `message.context.tenant_id` (not `message.to.tenant_id`). ## Instructions for AI Agents When building an integration with Courier, follow these rules: - Always check the latest SDK version on npm (`npm view trycourier version`) or PyPI (`pip index versions trycourier`) before pinning a version. Never hardcode a version from training data. - Use `routing.method: "single"` by default. Only use `"all"` when the user explicitly wants parallel delivery to every channel. - Use `POST /profiles/{id}` (merge) for profile updates. Only use `PUT /profiles/{id}` when the user explicitly says "replace the entire profile." - For bulk sends, always implement the 3-step flow: `POST /bulk` to create a job, `POST /bulk/{jobId}` to add users, then `POST /bulk/{jobId}/run` to execute. There is no single-call bulk endpoint. - Include an `Idempotency-Key` header for any transactional send (OTP codes, order confirmations, billing notifications). Omitting it risks duplicate delivery. - When sending to a known user, prefer `user_id` as the recipient type. Only use inline `email` or `phone_number` for anonymous or one-off sends where no profile exists. - For in-app notifications, use the `courier/inbox` channel. The Inbox SDK requires JWT authentication; generate tokens with `POST /auth/issue-token`. - Test and Production environments use different API keys. Always confirm which environment the user intends before making API calls. - Prefer the [Agent Quickstart](https://www.courier.com/docs/tools/agent-quickstart.md) as your primary onboarding reference; it covers the minimal setup path for sending email and inbox notifications. ## Raw API Quick-Start (copy-paste bodies) When calling the Courier REST API directly (without an SDK), use these minimal valid request bodies. ### Send an inline email ``` POST https://api.courier.com/send Authorization: Bearer Content-Type: application/json { "message": { "to": { "email": "user@example.com" }, "content": { "title": "Hello {{name}}", "body": "Your order {{order_id}} has shipped." }, "routing": { "method": "single", "channels": ["email"] }, "data": { "name": "Alice", "order_id": "ORD-123" } } } ``` ### Send using a published template ``` POST https://api.courier.com/send Authorization: Bearer Content-Type: application/json { "message": { "to": { "user_id": "user-123" }, "template": "TEMPLATE_ID_OR_KEY", "data": { "name": "Alice" } } } ``` ### Create or update a user profile ``` POST https://api.courier.com/profiles/user-123 Authorization: Bearer Content-Type: application/json { "profile": { "email": "alice@example.com", "phone_number": "+15551234567", "name": "Alice Smith" } } ``` `POST` merges fields into the existing profile. Use `PUT` only for full replacement (deletes any fields not included). ## Start Here - [Agent Quickstart](https://www.courier.com/docs/tools/agent-quickstart.md): Everything an AI coding agent needs to send email and in-app inbox notifications from a brand-new workspace. - [Quickstart](https://www.courier.com/docs/getting-started/quickstart.md): Send your first notification with one API call. - [Glossary](https://www.courier.com/docs/help/glossary.md): Quick reference for Courier terminology and concepts. - [Send a Message](https://www.courier.com/docs/api-reference/send/send-a-message.md): The core API endpoint. Send a message to one or more recipients. - [How to Manage User Profiles](https://www.courier.com/docs/tutorials/sending/how-to-manage-user-profiles.md): Create, merge, and replace user profiles with contact details and channel tokens. - [Courier CLI](https://www.courier.com/docs/tools/cli.md): Send messages, manage users, and inspect delivery logs from the command line. - [MCP Server](https://www.courier.com/docs/tools/mcp.md): Give AI agents full access to the Courier API from your IDE. Connect to Courier's hosted server at `https://mcp.courier.com`. - [Courier Skills](https://www.courier.com/docs/tools/courier-skills.md): Agent skill packs that teach AI coding assistants Courier best practices. ## Send API - [How Sending Works](https://www.courier.com/docs/platform/sending/sending-overview.md): How notifications move from your app through the Courier API to channels. - [Send a Message](https://www.courier.com/docs/platform/sending/send-message.md): Concepts and options for the `/send` endpoint. - [Choose a Sending Strategy](https://www.courier.com/docs/platform/sending/choosing-your-sending-strategy.md): Three ways to send notifications, from a single API call to managed workflows. - [How To Configure Multi-Channel Routing](https://www.courier.com/docs/tutorials/sending/how-to-configure-multi-channel-routing.md): Configure routing to prioritize, fallback, or deliver across channels. - [Channel Priority](https://www.courier.com/docs/platform/sending/channel-priority.md): Control notification routing, fallbacks, and overrides. - [Channel Settings](https://www.courier.com/docs/platform/sending/channel-settings.md): Configure delivery rules, priorities, and integrations per channel. - [Automated Failover](https://www.courier.com/docs/platform/sending/failover.md): Automated retries and provider/channel failover for message delivery. - [Delivery Reliability & Retries](https://www.courier.com/docs/platform/sending/delivery-pipeline-resilience.md): Exponential backoff retry strategies for reliable delivery. - [Send Limits](https://www.courier.com/docs/platform/sending/send-limits.md): Cap message volume by user, topic, or tenant. - [Delays & Delivery Windows](https://www.courier.com/docs/platform/sending/delay.md): Schedule sends for specific times or after delays. - [Responses & Error Codes](https://www.courier.com/docs/platform/sending/handling-responses-and-errors.md): Interpret send responses and handle errors. - [How To Send Your First Message](https://www.courier.com/docs/tutorials/sending/how-to-send-your-first-message.md): Walk through the basics for sending your first notification. ## Bulk API - [Create a bulk job](https://www.courier.com/docs/api-reference/bulk/create-a-bulk-job.md): Creates a new bulk job for sending messages to multiple recipients. - [Add users](https://www.courier.com/docs/api-reference/bulk/add-users.md): Ingest user data into a Bulk Job. - [Run a job](https://www.courier.com/docs/api-reference/bulk/run-a-job.md): Run a bulk job. - [Get a Job](https://www.courier.com/docs/api-reference/bulk/get-a-job.md): Get a bulk job. - [Get users](https://www.courier.com/docs/api-reference/bulk/get-users.md): Get Bulk Job Users. - [How To Send Bulk Notifications](https://www.courier.com/docs/tutorials/sending/how-to-send-bulk-notifications.md): Use the Bulk API to send notifications to large user groups. - **Required flow**: There is no single-call bulk endpoint. Always: `POST /bulk` (create) → `POST /bulk/{jobId}` (add users) → `POST /bulk/{jobId}/run` (execute). ## Users & Profiles - [User Overview](https://www.courier.com/docs/platform/users/users-overview.md): Courier's user management system including profiles, audiences, lists, and tenants. - [User Management](https://www.courier.com/docs/platform/users/users.md): Define notification recipients using profiles, lists, audiences, tenants, and tokens. - [Create a profile](https://www.courier.com/docs/api-reference/user-profiles/create-a-profile.md): Merge the supplied values with an existing profile or create a new profile if one doesn't already exist. - [Get a profile](https://www.courier.com/docs/api-reference/user-profiles/get-a-profile.md): Returns the specified user profile. - [Replace a profile](https://www.courier.com/docs/api-reference/user-profiles/replace-a-profile.md): Full replacement of a profile. Any key-value pairs not included will be removed. For partial updates, use `POST`. - [Update a profile](https://www.courier.com/docs/api-reference/user-profiles/update-a-profile.md): Partial merge update of a profile. - [Delete a profile](https://www.courier.com/docs/api-reference/user-profiles/delete-a-profile.md): Deletes the specified user profile. - [Get list subscriptions](https://www.courier.com/docs/api-reference/user-profiles/get-list-subscriptions.md): Returns the subscribed lists for a specified user. - [Delete list subscriptions](https://www.courier.com/docs/api-reference/user-profiles/delete-list-subscriptions.md): Removes all list subscriptions for given user. - [Subscribe to one or more lists](https://www.courier.com/docs/api-reference/user-profiles/subscribe-to-one-or-more-lists.md): Subscribes the given user to one or more lists. ## Device Tokens - [Add multiple tokens to user](https://www.courier.com/docs/api-reference/device-tokens/add-multiple-tokens-to-user.md): Adds multiple tokens to a user and overwrites matching existing tokens. - [Add single token to user](https://www.courier.com/docs/api-reference/device-tokens/add-single-token-to-user.md): Adds a single token to a user and overwrites a matching existing token. - [Get all tokens](https://www.courier.com/docs/api-reference/device-tokens/get-all-tokens.md): Gets all tokens available for a user. - [Get single token](https://www.courier.com/docs/api-reference/device-tokens/get-single-token.md): Get single token available for a token ID. - [Update a token](https://www.courier.com/docs/api-reference/device-tokens/update-a-token.md): Apply a JSON Patch (RFC 6902) to the specified token. - [Delete User Token](https://www.courier.com/docs/api-reference/device-tokens/delete-user-token.md): Remove a device token from a user. ## Lists & Audiences - [Lists & Audiences](https://www.courier.com/docs/platform/users/audiences.md): Manage user groups with static lists and dynamic audiences. - [Get all lists](https://www.courier.com/docs/api-reference/lists/get-all-lists.md): Returns all of the lists, with the ability to filter based on a pattern. - [Get a list](https://www.courier.com/docs/api-reference/lists/get-a-list.md): Returns a list based on the list ID provided. - [Update a list](https://www.courier.com/docs/api-reference/lists/update-a-list.md): Create or replace an existing list with the supplied values. - [Delete a list](https://www.courier.com/docs/api-reference/lists/delete-a-list.md): Delete a list by list ID. - [Restore a list](https://www.courier.com/docs/api-reference/lists/restore-a-list.md): Restore a previously deleted list. - [Get the subscriptions for a list](https://www.courier.com/docs/api-reference/lists/get-the-subscriptions-for-a-list.md): Get the list's subscriptions. - [Add subscribers to a list](https://www.courier.com/docs/api-reference/lists/add-subscribers-to-a-list.md): Subscribes additional users without modifying existing subscriptions. - [Subscribe users to a list](https://www.courier.com/docs/api-reference/lists/subscribe-users-to-a-list.md): Subscribes the users, overwriting existing subscriptions. - [Subscribe a single user profile to a list](https://www.courier.com/docs/api-reference/lists/subscribe-a-single-user-profile-to-a-list.md): Subscribe a user to an existing list. - [Unsubscribe a user profile from a list](https://www.courier.com/docs/api-reference/lists/unsubscribe-a-user-profile-from-a-list.md): Delete a subscription to a list by list ID and user ID. - [Delete an audience](https://www.courier.com/docs/api-reference/audiences/delete-an-audience.md): Deletes the specified audience. - [Get an audience](https://www.courier.com/docs/api-reference/audiences/get-an-audience.md): Returns the specified audience by id. - [List all audiences](https://www.courier.com/docs/api-reference/audiences/list-all-audiences.md): Get the audiences associated with the authorization token. - [List audience members](https://www.courier.com/docs/api-reference/audiences/list-audience-members.md): Get list of members of an audience. - [Update an audience](https://www.courier.com/docs/api-reference/audiences/update-an-audience.md): Creates or updates audience. - [How To Create And Send To A List Or List Pattern](https://www.courier.com/docs/tutorials/sending/how-to-send-to-a-list-or-list-pattern-using-wildcarding.md): Structure list IDs for wildcarding and send to groups. - **Field name**: List subscription objects use `recipientId` (camelCase), not `recipient_id`. Example: `{ "recipients": [{ "recipientId": "user-123" }] }`. - **Audiences are dynamic**: Audience membership is filter-based and auto-updating. Lists are static (manual subscribe/unsubscribe). ## Tenants - [Tenants Overview](https://www.courier.com/docs/platform/tenants/tenants-overview.md): Hierarchical groups for managing preferences, metadata, and branding. - [Sending With Tenants](https://www.courier.com/docs/platform/tenants/sending-with-tenants.md): Send notifications to tenant members with tenant context. - [Tenant Deep Dive](https://www.courier.com/docs/platform/tenants/tenant-deepdive.md): Tenant hierarchies, metadata, inheritance patterns, and integration details. - [User Tenant Preferences](https://www.courier.com/docs/platform/tenants/user-tenant-preferences.md): Manage notification preferences per tenant. - [Inbox and Tenants](https://www.courier.com/docs/platform/tenants/inbox-with-tenants.md): Send Inbox notifications to tenant-specific or global inboxes. - [Create or Replace a Tenant](https://www.courier.com/docs/api-reference/tenants/create-or-replace-a-tenant.md): `PUT /tenants/{id}` with name, brand_id, parent_tenant_id, properties. - [Delete a Tenant](https://www.courier.com/docs/api-reference/tenants/delete-a-tenant.md): Remove a tenant and disassociate its users. - [Get a Tenant](https://www.courier.com/docs/api-reference/tenants/get-a-tenant.md): Retrieve tenant details by ID. - [Get a List of Tenants](https://www.courier.com/docs/api-reference/tenants/get-a-list-of-tenants.md): List tenants in the workspace. - [Get Users in Tenant](https://www.courier.com/docs/api-reference/tenants/get-users-in-tenant.md): List users belonging to a tenant. - [Create or Replace Default Preferences For Topic](https://www.courier.com/docs/api-reference/tenants/create-or-replace-default-preferences-for-topic.md): Set tenant-level default preference for a subscription topic. - [Remove Default Preferences For Topic](https://www.courier.com/docs/api-reference/tenants/remove-default-preferences-for-topic.md): Delete a tenant default preference. - [Add a User to a Single Tenant](https://www.courier.com/docs/api-reference/user-tenants/add-a-user-to-a-single-tenant.md): Associate a user with a tenant. - [Add a User to Multiple Tenants](https://www.courier.com/docs/api-reference/user-tenants/add-a-user-to-multiple-tenants.md): Batch add a user to multiple tenants. - [Get tenants associated with a given user](https://www.courier.com/docs/api-reference/user-tenants/get-tenants-associated-with-a-given-user.md): List a user's tenant memberships. - [Remove User from a Tenant](https://www.courier.com/docs/api-reference/user-tenants/remove-user-from-a-tenant.md): Disassociate a user from a tenant. - [Remove User From All Associated Tenants](https://www.courier.com/docs/api-reference/user-tenants/remove-user-from-all-associated-tenants.md): Remove a user from every tenant. - **Send recipe**: Multi-tenant sends use `message.context.tenant_id` (not `message.to.tenant_id`). The tenant context sets brand, preferences, and routing defaults for the message. - **Default preferences**: Tenant-level default preferences for a subscription topic use `PUT /tenants/{id}/default_preferences/items/{topic_id}`. These live on the tenant, not the user profile. Payload: `{ "status": "OPTED_IN", "has_custom_routing": true, "custom_routing": { "channels": ["email", "push"] } }`. MCP tool: `update_tenant_preference`. ### Multi-tenant hierarchy setup (ordered checklist) When wiring brand → parent tenant → child tenant → preferences → users → send: 1. **Create brand** — `POST /brands` with `settings` (required). MCP: `create_brand` 2. **Create parent tenant** — `PUT /tenants/{parent_id}` with `brand_id`. MCP: `create_or_update_tenant` 3. **Create child tenant** — `PUT /tenants/{child_id}` with `parent_tenant_id`. MCP: `create_or_update_tenant` 4. **Set default preferences on tenant** — `PUT /tenants/{id}/default_preferences/items/{topic_id}`. MCP: `update_tenant_preference` 5. **Add user to tenant** — `PUT /users/{user_id}/tenants/{tenant_id}`. MCP: `add_user_to_tenant` 6. **Send with tenant context** — `POST /send` with `message.context.tenant_id`. MCP: `send_message` Child tenants inherit parent brand and preferences unless overridden. User preferences take final precedence. ## Preferences - [Preferences Overview](https://www.courier.com/docs/platform/preferences/preferences-overview.md): Let users control which notifications they receive and how. - [Preferences Editor](https://www.courier.com/docs/platform/preferences/preferences-editor.md): Configure subscription topics, sections, and channel settings. - [Hosted Preference Center](https://www.courier.com/docs/platform/preferences/hosted-page.md): Deploy a Courier-hosted page for managing notification preferences. - [Embedding Preferences](https://www.courier.com/docs/platform/preferences/embedding-preferences.md): Integrate preference management components in your React or web app. - [User Preference Logs & Data](https://www.courier.com/docs/platform/preferences/user-preferences-logs.md): Access user preference audit trails and query current preferences. - [Get user's preferences](https://www.courier.com/docs/api-reference/user-preferences/get-users-preferences.md): Fetch all user preferences. - [Get user subscription topic](https://www.courier.com/docs/api-reference/user-preferences/get-user-subscription-topic.md): Fetch user preferences for a specific subscription topic. - [Update or Create user preferences for a specific subscription topic](https://www.courier.com/docs/api-reference/user-preferences/update-or-create-user-preferences-for-a-specific-subscription-topic.md): Set user opt-in/out for a topic. - [How To Configure Preferences via API](https://www.courier.com/docs/tutorials/preferences/how-to-configure-user-preferences.md): Read and update user notification preferences programmatically. - [How To Embed Preferences in React](https://www.courier.com/docs/tutorials/preferences/how-to-embed-preferences-in-react.md): Add an in-app notification preference center to React. - [How To Set Up a Hosted Preference Center](https://www.courier.com/docs/tutorials/preferences/how-to-set-up-hosted-preference-center.md): Create subscription topics and deploy a hosted preference page. - **Subscription topics must exist before use**: Create a subscription topic in the Preferences Editor (or via API at `PUT /users/{user_id}/preferences/{topic_id}`) before assigning it as a tenant default preference. Setting a default for a non-existent topic silently fails. - **Tenant vs user preferences**: Tenant default preferences (`PUT /tenants/{id}/default_preferences/items/{topic_id}`) set the baseline for all users in that tenant. Individual users override via `PUT /users/{id}/preferences/{topic_id}`. At send time, user preferences take precedence over tenant defaults. ## Templates & Content - [What are Templates?](https://www.courier.com/docs/platform/content/content-overview.md): Templates define the content and structure of your notifications. - [Design Studio Overview](https://www.courier.com/docs/platform/content/design-studio/design-studio-overview.md): Build multi-channel notifications with Design Studio. - [Content Blocks](https://www.courier.com/docs/platform/content/design-studio/design-studio-block-basics.md): Drag-and-drop content blocks for Design Studio. - [Manage Templates via API](https://www.courier.com/docs/platform/content/design-studio/manage-templates-api.md): Template management over the /notifications API. - [Routing Configuration](https://www.courier.com/docs/platform/content/template-designer/routing-configuration.md): Configure reusable routing configurations. - [Elemental Markup Overview](https://www.courier.com/docs/platform/content/elemental/elemental-overview.md): JSON-based templating format for notification content across channels. - [Control Flow](https://www.courier.com/docs/platform/content/elemental/control-flow.md): Conditional rendering, loops, and channel-specific content in Elemental. - [Locales](https://www.courier.com/docs/platform/content/elemental/locales.md): Localize Elemental templates for multiple languages and regions. - [What are Brands?](https://www.courier.com/docs/platform/content/brands/brands-overview.md): Brands define the visual appearance of your notifications. - [Brand Designer](https://www.courier.com/docs/platform/content/brands/brand-designer.md): Customize brand appearance with logos, colors, headers, footers, and custom templates. - [Brand Snippets](https://www.courier.com/docs/platform/content/brands/brand-snippets.md): Reusable Handlebars components for notification templates. - [Handlebars Helpers](https://www.courier.com/docs/platform/content/template-designer/handlebars-helpers.md): Logic, math, string formatting, localization, and control flow for templates. - [Inserting Data with Variables](https://www.courier.com/docs/platform/content/variables/inserting-variables.md): Personalize notifications with variables from data, profile, tenant, or brand objects. - [Localization](https://www.courier.com/docs/platform/content/localization.md): Send notifications in multiple languages. - [Templates API](https://www.courier.com/docs/platform/content/templates-api.md): REST API for listing, creating, updating, and publishing notification templates. - [Archive Notification Template](https://www.courier.com/docs/api-reference/notification-templates/archive-notification-template.md): Archive a notification template. - [Create Notification Template](https://www.courier.com/docs/api-reference/notification-templates/create-notification-template.md): Create a notification template. Templates are created in draft state by default. - [Get Notification Template](https://www.courier.com/docs/api-reference/notification-templates/get-notification-template.md): Retrieve a notification template by ID. Returns the published version by default. - [List Notification Templates](https://www.courier.com/docs/api-reference/notification-templates/list-notification-templates.md): List notification templates in your workspace. - [Publish Notification Template](https://www.courier.com/docs/api-reference/notification-templates/publish-notification-template.md): Publish a notification template. - [Replace Notification Template](https://www.courier.com/docs/api-reference/notification-templates/replace-notification-template.md): Replace a notification template. All fields are required. - [List Notification Template Versions](https://www.courier.com/docs/api-reference/notification-templates/list-notification-template-versions.md): List versions of a notification template. - [How to Build Notifications with Elemental](https://www.courier.com/docs/tutorials/content/how-to-use-elemental.md): Create notification content programmatically using Courier Elemental. - [How to Use the Templates API](https://www.courier.com/docs/tutorials/content/how-to-use-templates-api.md): Manage workspace templates with the REST API. - [How to Brand Your Notifications](https://www.courier.com/docs/tutorials/content/how-to-create-and-use-brands.md): Create and customize Courier Brands for consistent email styling. - [Design and Send Your First Notification](https://www.courier.com/docs/tutorials/content/how-to-design-your-first-notification.md): Create a template, configure a provider, add content, preview, publish, and send. - [How to Internationalize Notifications](https://www.courier.com/docs/tutorials/content/internationalizing-notifications.md): Send multi-language notifications using locale-based conditions. - **Brand create requires `settings`**: Minimal valid: `{ "name": "My Brand", "settings": { "colors": { "primary": "#000000", "secondary": "#ffffff" } } }`. - **V2 template workflow** (5 steps): `POST /notifications` (create with name + content) → `PUT /notifications/{id}/content` (optional update) → `POST /routing-strategies` (create with name + routing) → `POST /notifications/{id}/publish` (empty body, returns 204) → `POST /send` with `"template": "nt_..."`. Shortcut: pass `"state": "PUBLISHED"` on create to skip steps 2–4. MCP equivalents: `create_notification` → `update_notification_content` → `create_routing_strategy` → `publish_notification` → `send_message`. Full JSON bodies in the "V2 Template Recipe" section under Optional below. ## Routing Strategies - [Archive Routing Strategy](https://www.courier.com/docs/api-reference/routing-strategies/archive-routing-strategy.md): Archive a routing strategy. The strategy must not have associated notification templates. - [Create Routing Strategy](https://www.courier.com/docs/api-reference/routing-strategies/create-routing-strategy.md): Create a routing strategy. Requires `name` and `routing` (method + channels). - [Get Routing Strategy](https://www.courier.com/docs/api-reference/routing-strategies/get-routing-strategy.md): Retrieve a routing strategy by ID. - [List Routing Strategies](https://www.courier.com/docs/api-reference/routing-strategies/list-routing-strategies.md): List routing strategies in your workspace. - [Replace Routing Strategy](https://www.courier.com/docs/api-reference/routing-strategies/replace-routing-strategy.md): Replace a routing strategy. Full document replacement. - **Shared across templates**: A single routing strategy can be linked to multiple notification templates. Updating it changes routing for all linked templates. ## Inbox - [Get Started with Courier Inbox](https://www.courier.com/docs/platform/inbox/inbox-overview.md): Add real-time in-app notifications to web, iOS, and Android apps. - [Authenticate Courier Inbox SDKs](https://www.courier.com/docs/platform/inbox/authentication.md): Courier Inbox and toasts use JWTs to authenticate. - [Send an Inbox Message](https://www.courier.com/docs/platform/inbox/sending-a-message.md): Send Inbox messages with the Courier Send API. - [Notify with Toasts](https://www.courier.com/docs/platform/inbox/notify-with-toasts.md): Small, dismissable pop-up notifications for Inbox messages. - [Organize Messages with Tabs](https://www.courier.com/docs/platform/inbox/organize-with-tabs.md): Create tabbed views for Inbox messages. - [How to Implement Courier Inbox](https://www.courier.com/docs/tutorials/inbox/how-to-implement-inbox.md): Add an in-app notification center powered by JWT-authenticated React components. - [How to Organize Inbox with Tabs](https://www.courier.com/docs/tutorials/inbox/how-to-organize-inbox-with-tabs.md): Tag messages at send time and configure tabs in the Inbox SDK. - [How to Send a JWT from Your Backend](https://www.courier.com/docs/tutorials/inbox/how-to-send-jwt.md): Generate user-scoped JWTs for Courier Inbox and Toast. - **Auth required**: Inbox requires JWT authentication via [`POST /auth/issue-token`](https://www.courier.com/docs/api-reference/authentication/create-a-jwt.md). The token is scoped to a single user and used by client SDKs. ## Automations - [Automation Overview](https://www.courier.com/docs/platform/automations/automations-overview.md): Build notification workflows with triggers, actions, batching, digests, and conditional logic. - [The Automations Designer](https://www.courier.com/docs/platform/automations/designer.md): Visual builder for creating notification workflows. - [Ad hoc Automation Steps](https://www.courier.com/docs/platform/automations/steps.md): Define automation workflows inline via API in a single request. - [Batching](https://www.courier.com/docs/platform/automations/batching.md): Group multiple events into a single notification. - [Automation Digests](https://www.courier.com/docs/platform/automations/digest.md): Aggregate user events into scheduled notifications. - [If / Switch](https://www.courier.com/docs/platform/automations/control-flow.md): Conditional logic using "If" nodes to branch automation workflows. - [Scheduling](https://www.courier.com/docs/platform/automations/scheduling.md): Schedule one-time, recurring, or cron-based automation triggers. - [Throttle Node](https://www.courier.com/docs/platform/automations/throttle.md): Limit automation-triggered messages per user or group within a timeframe. - [Fetch Data](https://www.courier.com/docs/platform/automations/fetch-data.md): Make HTTP requests through an automation workflow. - [Accessing Dynamic Data](https://www.courier.com/docs/platform/automations/dynamic.md): Access dynamic data using the refs object in automations. - [Cancelling An Automation](https://www.courier.com/docs/platform/automations/cancel.md): Cancel automations using a dynamic cancellation token. - [Webhook Trigger](https://www.courier.com/docs/platform/automations/webhook-trigger.md): Launch automations from external systems via webhook. - [Inbound Event Triggers](https://www.courier.com/docs/platform/automations/inbound-events.md): Trigger automations from CourierJS, Segment, and Rudderstack events. - [Debugger](https://www.courier.com/docs/platform/automations/debugger.md): Simulate test events through automation workflows and inspect node-level data. - [Invoke an Ad Hoc Automation](https://www.courier.com/docs/api-reference/automations/invoke-an-ad-hoc-automation.md): Invoke an ad hoc automation run. - [Invoke an Automation](https://www.courier.com/docs/api-reference/automations/invoke-an-automation.md): Invoke an automation run from an automation template. - [List Automations](https://www.courier.com/docs/api-reference/automations/list-automations.md): Get the list of automations. - [Build and Send Your First Automation](https://www.courier.com/docs/tutorials/automations/how-to-automate-message-sequences.md): Create a multi-step notification workflow in the visual Automations Designer. - [How to Cancel an Automation](https://www.courier.com/docs/tutorials/automations/how-to-cancel-an-automation.md): Stop in-flight automation runs using cancellation tokens. - [How To Send Automations via API](https://www.courier.com/docs/tutorials/automations/how-to-send-an-automation.md): Invoke automations via the Courier API. - [How to Send Automations with Tenant Context](https://www.courier.com/docs/tutorials/automations/how-to-send-automations-with-tenants.md): Invoke automations with tenant-specific branding, overrides, and preferences. - **Cancel recipe**: Cancellation uses `cancelation_token` (one "l") set at invoke time, then a second `POST /automations/invoke` with `{ "automation": { "steps": [{ "action": "cancel", "cancelation_token": "" }] } }`. There is no separate `/cancel` endpoint. - **List before invoke**: Use `GET /automations` (or MCP `list_automations`) to discover template IDs before invoking. Template IDs are required for `POST /automations/{id}/invoke`. ## Journeys Journeys are visual, multi-step messaging workflows. Lifecycle: create (draft) → publish → invoke. - [Journeys Overview](https://www.courier.com/docs/platform/journeys/journeys-overview.md): Build customer messaging experiences with a visual workflow editor. - [Building Journeys](https://www.courier.com/docs/platform/journeys/building-journeys.md): Compose journeys from triggers, send nodes, and function nodes. - [Send Node](https://www.courier.com/docs/platform/journeys/nodes/send.md): Configure which channels your journey uses. - [Starting a Journey](https://www.courier.com/docs/platform/journeys/invocation.md): Invoke a journey via the Courier API or from a Segment event. - [Journey Templates](https://www.courier.com/docs/platform/journeys/journey-templates.md): Create and edit notification templates scoped to a journey. - [Branch](https://www.courier.com/docs/platform/journeys/nodes/branch.md): Split a journey into conditional paths. - [Delay](https://www.courier.com/docs/platform/journeys/nodes/delay.md): Pause journey execution for a duration or until a specific time. - [Fetch Data](https://www.courier.com/docs/platform/journeys/nodes/fetch-data.md): Make HTTP requests during journey execution. - [Throttle](https://www.courier.com/docs/platform/journeys/nodes/throttle.md): Limit how often a user passes through a journey point. - [Create a Journey](https://www.courier.com/docs/api-reference/journeys/create-a-journey.md): Create a new journey in draft state. Use `POST /journeys`. - [Invoke a Journey](https://www.courier.com/docs/api-reference/journeys/invoke-a-journey.md): Invoke a journey run from a journey template. Use `POST /journeys/{id}/invoke`. - [List Journeys](https://www.courier.com/docs/api-reference/journeys/list-journeys.md): Get the list of journeys. - [Publish a Journey](https://www.courier.com/docs/api-reference/journeys/publish-a-journey.md): Publish a draft journey to make it live. Use `POST /journeys/{id}/publish`. - [How to Create Your First Journey](https://www.courier.com/docs/tutorials/journeys/how-to-create-your-first-journey.md): Build a journey from scratch with triggers, schemas, and send nodes. - [How to Build a Multi-Step Onboarding Journey](https://www.courier.com/docs/tutorials/journeys/how-to-build-a-multi-step-onboarding-journey.md): Build an onboarding sequence with delays, fetching, branching, and sends. - **Create flow**: Create the journey shell via `POST /journeys`, add notification templates with `POST /journeys/{id}/templates`, wire them into send nodes with `PUT /journeys/{id}`, then publish with `POST /journeys/{id}/publish`. - **Send nodes require templates**: A journey send node must reference an existing notification template. Create the template first, then assign it to the node. ## Analytics & Monitoring - [Analytics Overview](https://www.courier.com/docs/platform/analytics/analytics-overview.md): Track notification delivery, monitor status, and debug issues with message logs and audit trails. - [Template Analytics](https://www.courier.com/docs/platform/analytics/analytics.md): Track send volume, delivery rates, opens, clicks, and errors per template. - [Message Logs](https://www.courier.com/docs/platform/analytics/message-logs.md): Track each message's status with filtering by status, provider, recipient, and timeline events. - [Audit Trail](https://www.courier.com/docs/platform/analytics/audit-trail.md): Track workspace user activity including API key changes, publishing events, and integration updates. - [Custom Domain Tracking](https://www.courier.com/docs/platform/analytics/custom-domain-tracking.md): Use a custom tracking domain instead of ct0.app for branded link tracking in email. - [Get all audit events](https://www.courier.com/docs/api-reference/audit-events/get-all-audit-events.md): Fetch the list of audit events. - [Get an audit event](https://www.courier.com/docs/api-reference/audit-events/get-an-audit-event.md): Fetch a specific audit event by ID. - [Archive message](https://www.courier.com/docs/api-reference/sent-messages/archive-message.md): Archive a sent message. - [Cancel message](https://www.courier.com/docs/api-reference/sent-messages/cancel-message.md): Cancel a message that is currently being delivered. - [Get message](https://www.courier.com/docs/api-reference/sent-messages/get-message.md): Fetch the status of a message you've previously sent. - [Get message content](https://www.courier.com/docs/api-reference/sent-messages/get-message-content.md): Retrieve the rendered content of a sent message. - [Get message history](https://www.courier.com/docs/api-reference/sent-messages/get-message-history.md): Fetch the array of events of a message you've previously sent. - [List messages](https://www.courier.com/docs/api-reference/sent-messages/list-messages.md): Fetch the statuses of messages you've previously sent. - [How to Debug Email Delivery Issues](https://www.courier.com/docs/tutorials/monitoring/how-to-debug-delivery-issues.md): Troubleshoot delivery problems using Courier message logs. - **Message lifecycle**: ENQUEUED → SENT → DELIVERED (or UNDELIVERABLE). Use `GET /messages/{id}` to check status. The `requestId` from `/send` maps to one or more message IDs. ## Workspaces & Settings - [Workspace Overview](https://www.courier.com/docs/platform/workspaces/workspaces-overview.md): Environments, API keys, templates, team access, and settings. - [Environments, API Keys, and Assets](https://www.courier.com/docs/platform/workspaces/environments-api-keys.md): Isolated Test and Production environments with distinct API keys. - [Roles and Permissions](https://www.courier.com/docs/platform/workspaces/roles-permissions.md): Role-based access control for workspace teammates. - [Outbound Webhooks](https://www.courier.com/docs/platform/workspaces/outbound-webhooks.md): Receive event notifications for message updates and audience changes. - [Workspace Security Settings](https://www.courier.com/docs/platform/workspaces/team-security.md): Manage team invites, SSO, and workspace discoverability. - [Okta Integration](https://www.courier.com/docs/platform/workspaces/okta-integration.md): Set up Okta SSO and SCIM provisioning with Courier. - [EU Datacenter](https://www.courier.com/docs/platform/workspaces/eu-datacenter.md): European datacenter for data residency and GDPR compliance. - [Create a JWT](https://www.courier.com/docs/api-reference/authentication/create-a-jwt.md): Returns a new access token. - [Safe Notification Deployment](https://www.courier.com/docs/tutorials/ops/safe-notification-deployment.md): Move templates from Test to Production safely. ## SDKs - [Get Started with Courier SDKs](https://www.courier.com/docs/sdk-libraries/sdks-overview.md): Server-side SDKs for sending and client-side SDKs for in-app experiences. - [Courier Node.js SDK](https://www.courier.com/docs/sdk-libraries/node.md): Send notifications from Node.js/TypeScript with typed requests and retries. - [Courier Python SDK](https://www.courier.com/docs/sdk-libraries/python.md): Send notifications from Python with sync/async clients and Pydantic models. - [Courier Go SDK](https://www.courier.com/docs/sdk-libraries/go.md): Send notifications from Go with typed params and automatic retries. - [Courier Ruby SDK](https://www.courier.com/docs/sdk-libraries/ruby.md): Send notifications from Ruby with Sorbet support and retries. - [Courier Java SDK](https://www.courier.com/docs/sdk-libraries/java.md): Send notifications from Java with builder-pattern requests. - [Courier C# SDK](https://www.courier.com/docs/sdk-libraries/csharp.md): Send notifications from .NET with strongly typed models and async methods. - [Courier PHP SDK](https://www.courier.com/docs/sdk-libraries/php.md): Send notifications from PHP with typed responses and retries. - [Courier React SDK](https://www.courier.com/docs/sdk-libraries/courier-react-web.md): Customizable in-app notification center and toasts for React. - [Courier Web Components SDK](https://www.courier.com/docs/sdk-libraries/courier-ui-inbox-web.md): In-app notification center, toasts, and preferences using Web Components. - [Courier JS](https://www.courier.com/docs/sdk-libraries/courier-js-web.md): The API client for Courier's browser SDKs. - [Courier Android SDK](https://www.courier.com/docs/sdk-libraries/android.md): In-app notifications, push, and preferences for Android. - [Courier iOS SDK](https://www.courier.com/docs/sdk-libraries/ios.md): In-app notifications, push, and preferences for iOS. - [Courier Flutter SDK](https://www.courier.com/docs/sdk-libraries/flutter.md): In-app notifications, push, and preferences for Flutter. - [Courier React Native SDK](https://www.courier.com/docs/sdk-libraries/react-native.md): In-app notifications, push, and preferences for React Native. ## Developer Tools - [Build with AI](https://www.courier.com/docs/tools/ai-onboarding.md): Use Courier with AI coding agents via the CLI, MCP server, agent skills, and machine-readable docs. - [Courier and Postman](https://www.courier.com/docs/tools/courier-postman.md): Explore and test Courier's API using the official Postman collection. - [API Reference](https://www.courier.com/docs/reference/get-started.md): Authenticate, explore endpoints, and start integrating with the Courier API. ## Brands & Translations - [Create a new brand](https://www.courier.com/docs/api-reference/brands/create-a-new-brand.md): Create a brand. **Requires `settings`**. - [Delete a brand](https://www.courier.com/docs/api-reference/brands/delete-a-brand.md): Delete a brand by brand ID. - [Get a brand](https://www.courier.com/docs/api-reference/brands/get-a-brand.md): Fetch a specific brand by brand ID. - [List brands](https://www.courier.com/docs/api-reference/brands/list-brands.md): Get the list of brands. - [Replace a brand](https://www.courier.com/docs/api-reference/brands/replace-a-brand.md): Replace an existing brand with the supplied values. - [Get a translation](https://www.courier.com/docs/api-reference/translations/get-a-translation.md): Get translations by locale. - [Update translations by locale](https://www.courier.com/docs/api-reference/translations/update-translations-by-locale.md): Update a translation. ## Digests & Advanced Sending - [Send a Message Digest](https://www.courier.com/docs/platform/sending/digest-send.md): Aggregate messages into a scheduled digest. - [How To Send Digests](https://www.courier.com/docs/tutorials/sending/how-to-send-digests.md): Build scheduled digests using preferences, automations, and subscription topics. - [How To Send Notifications With Segment](https://www.courier.com/docs/tutorials/sending/how-to-send-notifications-with-segment.md): Trigger automated notifications from Segment events. - [How to Send Webhook Notifications](https://www.courier.com/docs/tutorials/ops/how-to-send-webhook-notifications.md): Deliver notification payloads to any HTTP endpoint. - [Courier Track Event](https://www.courier.com/docs/api-reference/inbound/courier-track-event.md): Ingest events for automation triggers. - [How to Use Test Events](https://www.courier.com/docs/tutorials/content/how-to-preview-notification.md): Preview and validate variables, branding, and content before sending. ## Resources - [What is Courier?](https://www.courier.com/docs/welcome.md): Courier is infrastructure for product-to-user communication. - [Courier Help Center](https://www.courier.com/docs/help/index.md): Find the answers to your questions or explore helpful resources. - [Tutorials](https://www.courier.com/docs/tutorials/tutorials-overview.md): Step-by-step guides for designing, sending, and managing notifications with Courier. ## Optional Low-priority reference content. Skip under tight context windows; use the section overviews above for general patterns. ### Provider Integrations - [Integrations Overview](https://www.courier.com/docs/external-integrations/integrations-overview.md): Connect Courier to your email, in-app, SMS, push, and chat providers. - [Email Providers](https://www.courier.com/docs/external-integrations/email/intro-to-email.md): Overview of email provider integrations. - [Amply](https://www.courier.com/docs/external-integrations/email/amply.md) - [AWS SES](https://www.courier.com/docs/external-integrations/email/aws-ses.md) - [Gmail](https://www.courier.com/docs/external-integrations/email/gmail.md) - [MailerSend](https://www.courier.com/docs/external-integrations/email/mailersend.md) - [Mailgun](https://www.courier.com/docs/external-integrations/email/mailgun.md) - [Mailjet](https://www.courier.com/docs/external-integrations/email/mailjet.md) - [Mandrill](https://www.courier.com/docs/external-integrations/email/mandrill.md) - [OneSignal Email](https://www.courier.com/docs/external-integrations/email/onesignal-email.md) - [Postmark](https://www.courier.com/docs/external-integrations/email/postmark.md) - [Resend](https://www.courier.com/docs/external-integrations/email/resend.md) - [SendGrid](https://www.courier.com/docs/external-integrations/email/sendgrid.md) - [SMTP](https://www.courier.com/docs/external-integrations/email/smtp.md) - [SparkPost](https://www.courier.com/docs/external-integrations/email/sparkpost.md) - [SMS Providers](https://www.courier.com/docs/external-integrations/sms/intro-to-sms.md): Overview of SMS provider integrations. - [Africa's Talking](https://www.courier.com/docs/external-integrations/sms/africas-talking.md) - [Azure SMS](https://www.courier.com/docs/external-integrations/sms/azure-sms.md) - [MessageBird](https://www.courier.com/docs/external-integrations/sms/messagebird.md) - [MessageMedia](https://www.courier.com/docs/external-integrations/sms/messagemedia.md) - [Plivo](https://www.courier.com/docs/external-integrations/sms/plivo.md) - [Sinch](https://www.courier.com/docs/external-integrations/sms/sinch.md) - [SMSCentral](https://www.courier.com/docs/external-integrations/sms/smscentral.md) - [Telnyx](https://www.courier.com/docs/external-integrations/sms/telnyx.md) - [TextUs](https://www.courier.com/docs/external-integrations/sms/textus.md) - [Twilio](https://www.courier.com/docs/external-integrations/sms/twilio.md) - [Vonage](https://www.courier.com/docs/external-integrations/sms/vonage.md) - [Push Notifications](https://www.courier.com/docs/external-integrations/push/intro-to-push.md): Overview of push notification integrations. - [Airship](https://www.courier.com/docs/external-integrations/push/airship.md) - [Apple Push Notifications Service (APNS)](https://www.courier.com/docs/external-integrations/push/apple-push-notification.md) - [Beamer](https://www.courier.com/docs/external-integrations/push/beamer.md) - [Expo](https://www.courier.com/docs/external-integrations/push/expo.md) - [Firebase Cloud Messaging (FCM)](https://www.courier.com/docs/external-integrations/push/firebase-fcm.md) - [MagicBell](https://www.courier.com/docs/external-integrations/push/magicbell.md) - [NowPush](https://www.courier.com/docs/external-integrations/push/nowpush.md) - [OneSignal Push](https://www.courier.com/docs/external-integrations/push/onesignal-push.md) - [Pushbullet](https://www.courier.com/docs/external-integrations/push/pushbullet.md) - [Pusher](https://www.courier.com/docs/external-integrations/push/pusher.md) - [Pusher Beams](https://www.courier.com/docs/external-integrations/push/pusher-beams.md) - [Chat & Direct Message Providers](https://www.courier.com/docs/external-integrations/direct-message/intro-to-direct-message.md): Overview of chat and direct message integrations. - [Chat API](https://www.courier.com/docs/external-integrations/direct-message/chat.md) - [Discord](https://www.courier.com/docs/external-integrations/direct-message/discord.md) - [Facebook Messenger](https://www.courier.com/docs/external-integrations/direct-message/facebook-messenger.md) - [Microsoft Teams](https://www.courier.com/docs/external-integrations/direct-message/microsoft-teams.md) - [Slack](https://www.courier.com/docs/external-integrations/direct-message/slack.md) - [Stream Chat](https://www.courier.com/docs/external-integrations/direct-message/stream-chat.md) - [Viber](https://www.courier.com/docs/external-integrations/direct-message/viber.md) - [WhatsApp](https://www.courier.com/docs/external-integrations/direct-message/whatsapp.md) - [AWS SNS](https://www.courier.com/docs/external-integrations/other/aws-sns.md) - [Custom Provider](https://www.courier.com/docs/external-integrations/other/custom-provider.md) - [Drift](https://www.courier.com/docs/external-integrations/other/drift.md) - [Intercom](https://www.courier.com/docs/external-integrations/other/intercom.md) - [Opsgenie](https://www.courier.com/docs/external-integrations/other/ops-genie.md) - [PagerDuty](https://www.courier.com/docs/external-integrations/other/pagerduty.md) - [Splunk On Call](https://www.courier.com/docs/external-integrations/other/splunk-on-call.md) - [Webhook Integration](https://www.courier.com/docs/external-integrations/other/webhook-integration.md) - [Customer Data Platforms (CDP)](https://www.courier.com/docs/external-integrations/cdp/intro-to-cdp.md) - [RudderStack](https://www.courier.com/docs/external-integrations/cdp/rudderstack.md) - [Segment](https://www.courier.com/docs/external-integrations/cdp/segment.md) - [Datadog](https://www.courier.com/docs/external-integrations/observability/datadog.md) - [Observability](https://www.courier.com/docs/external-integrations/observability/intro-to-observability.md) - [New Relic](https://www.courier.com/docs/external-integrations/observability/new-relic.md) - [OpenTelemetry](https://www.courier.com/docs/external-integrations/observability/open-telemetry.md) ### Courier Create (Embeddable Designer) - [Courier Create Overview](https://www.courier.com/docs/platform/create/create-overview.md): Manage and customize multi-tenant email templates in React with Courier Create. - [Integrating the Embeddable Designer](https://www.courier.com/docs/platform/create/installation.md): Embed and customize the Template Editor in your React application. - [Authenticating the Embeddable Designer](https://www.courier.com/docs/platform/create/authentication.md): JWT authentication for Courier Create. - [Integrating the Embeddable Brand Editor](https://www.courier.com/docs/platform/create/brand-designer.md): Embed tenant branding management in React apps. - [Courier Create API](https://www.courier.com/docs/platform/create/courier-create-api.md): HTTP reference for tenant template endpoints used by Design Studio. - [Editor Properties](https://www.courier.com/docs/platform/create/provider-props.md): Configuration options for Courier Create Template and Brand Editors. - [Create or Update a Tenant Template](https://www.courier.com/docs/api-reference/courier-create/create-or-update-a-tenant-template.md): Creates or updates a notification template for a tenant. - [Get a Template in Tenant](https://www.courier.com/docs/api-reference/courier-create/get-a-template-in-tenant.md) - [List Templates in Tenant](https://www.courier.com/docs/api-reference/courier-create/list-templates-in-tenant.md) - [Publish a Tenant Template](https://www.courier.com/docs/api-reference/courier-create/publish-a-tenant-template.md): Publishes a specific version of a notification template for a tenant. - [Get a Specific Template Version](https://www.courier.com/docs/api-reference/courier-create/get-a-specific-template-version.md): Fetches a specific version of a tenant template. - [How to Use the Courier Create API](https://www.courier.com/docs/tutorials/content/how-to-use-courier-create-api.md): Create, iterate, and publish tenant notification templates via API. ### Journeys Admin (metrics, versioning, run inspection) - [Run Inspection](https://www.courier.com/docs/platform/journeys/run-inspection.md): Step through individual journey runs to see what happened at every node. - [Metrics](https://www.courier.com/docs/platform/journeys/metrics.md): Track send volume, delivery rates, opens, and clicks across journey templates. - [Version History](https://www.courier.com/docs/platform/journeys/version-history.md): Track published versions and revert to previous journey versions. ### Elemental Elements (individual element types) - [Elements Reference](https://www.courier.com/docs/platform/content/elemental/elements/index.md): Complete reference for all Elemental element types. - [Export to Elemental](https://www.courier.com/docs/platform/content/elemental/export-to-elemental.md): Convert Designer-built notifications into Elemental JSON. - [Fonts](https://www.courier.com/docs/platform/content/elemental/fonts.md) - [Action](https://www.courier.com/docs/platform/content/elemental/elements/action.md) - [Channel](https://www.courier.com/docs/platform/content/elemental/elements/channel.md) - [Columns](https://www.courier.com/docs/platform/content/elemental/elements/columns.md) - [Comment](https://www.courier.com/docs/platform/content/elemental/elements/comment.md) - [Divider](https://www.courier.com/docs/platform/content/elemental/elements/divider.md) - [Group](https://www.courier.com/docs/platform/content/elemental/elements/group.md) - [HTML](https://www.courier.com/docs/platform/content/elemental/elements/html.md) - [Image](https://www.courier.com/docs/platform/content/elemental/elements/image.md) - [Jsonnet](https://www.courier.com/docs/platform/content/elemental/elements/jsonnet.md) - [List](https://www.courier.com/docs/platform/content/elemental/elements/list.md) - [Meta](https://www.courier.com/docs/platform/content/elemental/elements/meta.md) - [Quote](https://www.courier.com/docs/platform/content/elemental/elements/quote.md) - [Text](https://www.courier.com/docs/platform/content/elemental/elements/text.md) ### Design Studio Block Details - [Button Blocks](https://www.courier.com/docs/platform/content/design-studio/button-blocks.md) - [Text Blocks](https://www.courier.com/docs/platform/content/design-studio/text-blocks.md) - [Image Blocks](https://www.courier.com/docs/platform/content/design-studio/image-blocks.md) - [HTML Blocks](https://www.courier.com/docs/platform/content/design-studio/custom-code-blocks.md) - [Heading Blocks](https://www.courier.com/docs/platform/content/design-studio/heading-blocks.md) - [Divider Blocks](https://www.courier.com/docs/platform/content/design-studio/divider-blocks.md) - [Spacer Blocks](https://www.courier.com/docs/platform/content/design-studio/spacer-blocks.md) - [Channels](https://www.courier.com/docs/platform/content/design-studio/channels.md) - [Template Settings](https://www.courier.com/docs/platform/content/design-studio/template-settings.md) - [White-Labeling Email Domains](https://www.courier.com/docs/platform/content/brands/email-domain-white-labeling.md) - [Template Approval Workflow](https://www.courier.com/docs/platform/content/template-approval-workflow.md) ### Template Designer (legacy V1) - [Email Template CSS Classes](https://www.courier.com/docs/platform/content/brands/css-classnames.md) - [Email Safe Formatting](https://www.courier.com/docs/platform/content/email-safe-formatting.md) - [Handlebars Editor for Email Templates](https://www.courier.com/docs/platform/content/template-designer/handlebars-designer.md) - [Overview](https://www.courier.com/docs/platform/content/template-designer/template-designer-overview.md) - [Version History](https://www.courier.com/docs/platform/content/template-designer/history-compare-mode.md) - [Test with Sample Data](https://www.courier.com/docs/platform/content/template-designer/how-to-preview-notification.md) - [Jsonnet Webhook Designer](https://www.courier.com/docs/platform/content/template-designer/jsonnet-webhook-designer.md) - [Customizing Email Address Fields](https://www.courier.com/docs/platform/content/template-settings/email-fields.md) - [General Settings](https://www.courier.com/docs/platform/content/template-settings/general-settings.md) - [Using Send Conditions](https://www.courier.com/docs/platform/content/template-settings/send-conditions.md) - [Throw on Variable Not Found](https://www.courier.com/docs/platform/content/template-settings/variable-not-found.md) ### Content Blocks (V2 individual block types) - [Content Block Overview](https://www.courier.com/docs/platform/content/content-blocks/content-block-basics.md) - [Action](https://www.courier.com/docs/platform/content/content-blocks/action-blocks.md) - [Divider](https://www.courier.com/docs/platform/content/content-blocks/divider-blocks.md) - [Image](https://www.courier.com/docs/platform/content/content-blocks/image-blocks.md) - [Jsonnet](https://www.courier.com/docs/platform/content/content-blocks/jsonnet-blocks.md) - [List](https://www.courier.com/docs/platform/content/content-blocks/list-blocks.md) - [Markdown](https://www.courier.com/docs/platform/content/content-blocks/md-blocks.md) - [Quote](https://www.courier.com/docs/platform/content/content-blocks/quote-blocks.md) - [Template](https://www.courier.com/docs/platform/content/content-blocks/template-blocks.md) - [Text](https://www.courier.com/docs/platform/content/content-blocks/text-blocks.md) ### V2 Template Recipe (full JSON bodies) Complete request bodies for the 5-step V2 notification template workflow. **Step 1 — Create template** (required: `name`, `content`) ``` POST /notifications { "notification": { "name": "Order Shipped", "tags": ["transactional"], "brand": null, "subscription": null, "routing": null, "content": { "version": "2022-01-01", "elements": [ { "type": "channel", "channel": "email", "elements": [ { "type": "meta", "title": "Your order shipped" }, { "type": "text", "content": "Hi {{data.name}}, your order {{data.order_id}} is on its way." } ] } ] } }, "state": "DRAFT" } ``` Response includes `id` (e.g. `nt_01abc123`). Pass `"state": "PUBLISHED"` to skip steps 2–4. **Step 2 — Update content** (optional) ``` PUT /notifications/{id}/content { "content": { "version": "2022-01-01", "elements": [ { "type": "channel", "channel": "email", "elements": [ { "type": "meta", "title": "Updated Subject" }, { "type": "text", "content": "Updated body text." } ] } ] }, "state": "DRAFT" } ``` **Step 3 — Create routing strategy** (required: `name`, `routing`) ``` POST /routing-strategies { "name": "Email Only", "routing": { "method": "single", "channels": ["email"] } } ``` Response includes `id` (e.g. `rs_01xyz`). Associate with template via `PUT /notifications/{id}` with `"routing": { "strategy_id": "rs_01xyz" }`. **Step 4 — Publish** ``` POST /notifications/{id}/publish {} ``` Empty body publishes the current draft. Returns 204. **Step 5 — Send** ``` POST /send { "message": { "to": { "user_id": "user-123" }, "template": "nt_01abc123", "data": { "name": "Alice", "order_id": "ORD-456" } } } ``` ### Migration Guides - [Migrate from Braze to Courier](https://www.courier.com/docs/tutorials/migrate/from-braze.md) - [Migrate from Knock to Courier](https://www.courier.com/docs/tutorials/migrate/from-knock.md) - [Migrate from Novu to Courier](https://www.courier.com/docs/tutorials/migrate/from-novu.md) - [Migrate from OneSignal to Courier](https://www.courier.com/docs/tutorials/migrate/from-onesignal.md) - [Migrate from SuprSend to Courier](https://www.courier.com/docs/tutorials/migrate/from-suprsend.md) ### Other Optional - [GET Profile](https://www.courier.com/docs/platform/automations/get-profile.md) - [Segment](https://www.courier.com/docs/platform/automations/segment.md) - [Get Notification Content](https://www.courier.com/docs/api-reference/notification-templates/get-notification-content.md): Retrieve published or draft content of a notification template. - [Get Submission Checks](https://www.courier.com/docs/api-reference/notification-templates/get-submission-checks.md): Retrieve the checks for a notification template submission. - [Replace Submission Checks](https://www.courier.com/docs/api-reference/notification-templates/replace-submission-checks.md): Replace the checks for a notification template submission. - [Cancel Submission](https://www.courier.com/docs/api-reference/notification-templates/cancel-submission.md): Cancel a notification template submission. ## API Reference - [API Reference](https://www.courier.com/docs/reference/get-started.md): Full REST API documentation with request/response schemas for all endpoints.