#llmsmap.me

Independent technical audit

courier.com

courier.com

Overall AI readiness score

A combined result across all audit signals.

62of 100Average
AI readiness audit: 7/21/2026Public technical data

Overall AI readiness assessment

How ready courier.com is for AI systems

62/100

Courier was independently audited by llmsmap. courier.com currently scores 62/100 for AI readiness. The result combines AI-specific files, crawler policy, sitemap discovery, structured homepage data, and—when available—the mobile Google Lighthouse technical profile.

Audit context

llms.txt is accessible and contains 15,956 tokens. No accessible llms-full.txt was detected, so deeper context still has to be assembled from regular pages. No separate ai.txt policy was detected; it is optional, but can clarify training, retrieval, and attribution preferences.

robots.txt is available. 11 of 11 tracked AI bots are not blocked. Declared sitemaps: 2. No Schema.org type was detected on the homepage. 0 OpenGraph tags were found and markup completeness is 0%, leaving more entity interpretation to crawlers.

The mobile Lighthouse profile adds Performance 70/100, Accessibility 84/100, Best Practices 92/100, SEO 92/100, and experimental Agentic Browsing 48/100. These signals have a limited weight: they complement rather than replace llms.txt, robots.txt, and structured-data checks.

Confirmed strengths

  • Accessible llms.txt
  • 2 sitemap declarations

Priority improvements

  1. 1Add llms-full.txt for richer first-party context.
  2. 2Add JSON-LD for the organisation, website, and core entities.
  3. 3Complete OpenGraph and canonical homepage metadata.
  4. 4Reduce mobile rendering delay and main-thread work.
llms.txt tokens15,956
llms-full.txt tokens
ai.txt
sitemap.xml

Google Lighthouse technical profile

A mobile Lighthouse measurement. Google’s experimental Agentic Browsing category is explained separately and does not replace the broader llmsmap AI-readiness score.

Mobile · Lighthouse
70

Performance

84

Accessibility

92

Best Practices

92

Technical SEO

48

Agentic Browsing

What these results mean

Mobile performance is 70/100, with the largest visible content block appearing in 5.2 s and the browser main thread blocked for 0 ms. Layout shift was 0.068. The main thread is where the browser runs JavaScript, calculates layout, and paints the page; long work there delays both user input and browser-agent actions.

Accessibility scored 84/100, Best Practices 92/100, and technical SEO 92/100. The experimental Agentic Browsing category scored 48/100. It measures signals Google currently tests for software agents and is shown separately from the llmsmap AI-readiness score.

1

Free the main thread and accelerate the first view

Split long JavaScript tasks, defer non-critical scripts and styles, and shorten blocking request chains. This helps the primary content appear sooner and makes controls usable earlier.

2

Reduce network delay

Improve server response time, remove unnecessary redirects and repeat downloads, and use compression, caching, and selective preconnect hints.

3

Make controls unambiguous

Give buttons and links accessible names, associate labels with fields, and use ordered headings and semantic regions. The same structure helps screen readers and software agents understand actions.

4

Improve interface contrast and readability

Increase contrast for text, states, and interactive controls so both people and visual agents can distinguish content from actions and supporting labels.

FCP4.0 s

First content

LCP5.2 s

Main content

CLS0.068

Layout stability

TBT0 ms

Blocking time

SI4.0 s

Visual speed

Metric glossary
FCP · First content
When the first text or image appeared on screen.
LCP · Main content
When the largest visible element in the first viewport rendered.
CLS · Layout stability
How much content shifted unexpectedly while loading; lower is better.
TBT · Blocking time
How long the browser main thread could not respond quickly to input.
SI · Visual speed
How quickly the visible viewport filled with content.
7/21/2026Lighthouse 13.4.0Mobile profile

AI readiness checks

Machine-readable files, crawler policy, discovery, and homepage markup.

llms.txt

File found and accessible

https://www.courier.com/docs/llms.txt
llms-full.txt

Full version was not found

ai.txt

ai.txt file was not found

robots.txt

File found

https://courier.com/robots.txt
Sitemap in robots.txt2

2 sitemaps found

Schema.org (JSON-LD)

Schema.org markup was not found on the homepage

OpenGraph

OpenGraph tags were not found on the homepage

AI bot access

Based on robots.txt analysis

GPTBotNot mentioned
OAI-SearchBotNot mentioned
ChatGPT-UserNot mentioned
Google-ExtendedNot mentioned
ClaudeBotNot mentioned
Claude-SearchBotNot mentioned
Claude-UserNot mentioned
BytespiderNot mentioned
CCBotNot mentioned
PerplexityBotNot mentioned
Perplexity-UserNot mentioned

Sitemaps

Declared discovery routes for crawlers and agents.

# 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 <YOUR_API_KEY>` (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 <API_KEY>
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 <API_KEY>
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 <API_KEY>
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": "<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.
Share or continue the analysis
Share this audit
Discuss with AI
Added 7/19/2026
courier.com - AI readiness audit | llmsmap.me