Courier

Courier is notification infrastructure for product and engineering teams - a single API that orchestrates transactional and product messaging across email, SMS, push, chat (Slack, Teams), and an in-app inbox. One Send call routes a notification to the right channel(s) per recipient using templates designed in a visual studio, subscription topics, user preferences, brands, audiences, and automation workflows. The REST API (base https://api.courier.com) also manages users/profiles, lists, tenants for multi-tenant apps, translations, bulk sends, and audit events, and is wrapped by official server SDKs (Node, Python, Go, Ruby, PHP, Java) and a CLI.

14 APIs 0 Features
NotificationsMessagingEmailSMSPushMulti-ChannelNotification InfrastructureIn-App Inbox

APIs

Courier Send API

The core POST /send endpoint. Dispatches a single notification to one or more recipients and routes it across channels (email, SMS, push, chat, inbox) using a template or inline...

Courier Messages API

List and inspect sent messages - retrieve a message, its rendered content, its delivery/engagement history (ENQUEUED, SENT, DELIVERED, OPENED, CLICKED), cancel an enqueued messa...

Courier Lists API

Manage subscription lists and their subscribers - create/replace, list, get, delete, and restore lists, and add, subscribe, list, and remove the users subscribed to a list for g...

Courier User Profiles API

Store and manage recipient profiles keyed by your user id - create, get, replace, merge/patch, and delete a profile, and list the subscription lists a user belongs to. Profiles ...

Courier User Preferences API

Read and update a recipient's notification preferences - list all topic preferences for a user, get a single topic, and update a user's channel opt-in/opt-out status per subscri...

Courier Device Tokens API

Register and manage the push notification device tokens (APNS, FCM, Expo) attached to a user - put, patch, get one, list all, and delete tokens so push notifications route to th...

Courier Notification Templates API

Programmatic access to notification templates designed in the Courier studio - list notifications, get and update their content blocks, and submit a draft to publish. Templates ...

Courier Brands API

Manage reusable brands - the logos, colors, and email template styling applied to notifications. Create, get, list, replace, and delete brands that are referenced by id at send ...

Courier Automations API

Invoke Courier Automations - multi-step notification workflows with delays, throttling, conditional branches, and batched sends. Invoke an ad-hoc automation run or invoke a save...

Courier Audiences API

Define dynamic audiences from filters on user profile attributes - create/update, get, list, and delete an audience, and list the members that currently match. Audiences can be ...

Courier Tenants API

Model organizations/accounts in multi-tenant products - create/replace, get, list, and delete tenants, manage tenant default preferences, and associate users with one or many te...

Courier Bulk API

Send the same notification to many recipients efficiently via a job - create a bulk job, add users to it, run it, get the job status, and list the users in the job. Designed for...

Courier Audit Events API

Retrieve workspace audit events for security and compliance - list all audit events and get a single event by id, covering administrative and configuration changes in the Courie...

Courier Translations API

Manage localization strings for notifications - get and update the translation (.po) content for a given domain and locale so notifications render in the recipient's language.

Collections

Pricing Plans

Rate Limits

Courier Com Rate Limits

5 limits

RATE LIMITS

FinOps

Resources

🔗
TrustCenter
TrustCenter
🔗
DomainSecurity
DomainSecurity
🔑
Authentication
Authentication
👥
GitHubOrganization
GitHubOrganization
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps
📰
Blog
Blog

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Courier API
  version: 2024-01
request:
  auth:
    type: bearer
    token: '{{apiKey}}'
items:
- info:
    name: Send
    type: folder
  items:
  - info:
      name: Send a message.
      type: http
    http:
      method: POST
      url: https://api.courier.com/send
      body:
        type: json
        data: "{\n  \"message\": {\n    \"to\": { \"user_id\": \"USER_ID\" },\n    \"template\": \"TEMPLATE_ID\",\n    \"\
          data\": {}\n  }\n}"
    docs: Dispatches a single notification to one or more recipients across channels.
- info:
    name: Messages
    type: folder
  items:
  - info:
      name: List messages.
      type: http
    http:
      method: GET
      url: https://api.courier.com/messages
    docs: Fetch the statuses of messages you have previously sent.
  - info:
      name: Get a message.
      type: http
    http:
      method: GET
      url: https://api.courier.com/messages/:message_id
      params:
      - name: message_id
        value: ''
        type: path
        description: The message id.
    docs: Retrieve the status of a single message by id.
  - info:
      name: Get message content.
      type: http
    http:
      method: GET
      url: https://api.courier.com/messages/:message_id/content
      params:
      - name: message_id
        value: ''
        type: path
        description: The message id.
    docs: Retrieve the rendered content of a message.
  - info:
      name: Get message history.
      type: http
    http:
      method: GET
      url: https://api.courier.com/messages/:message_id/history
      params:
      - name: message_id
        value: ''
        type: path
        description: The message id.
    docs: Retrieve delivery and engagement history for a message.
  - info:
      name: Cancel a message.
      type: http
    http:
      method: POST
      url: https://api.courier.com/messages/:message_id/cancel
      params:
      - name: message_id
        value: ''
        type: path
        description: The message id.
    docs: Cancel a message that is currently enqueued.
  - info:
      name: Archive a message.
      type: http
    http:
      method: PUT
      url: https://api.courier.com/messages/:message_id/archive
      params:
      - name: message_id
        value: ''
        type: path
        description: The message id.
    docs: Archive a message.
- info:
    name: Lists
    type: folder
  items:
  - info:
      name: Get all lists.
      type: http
    http:
      method: GET
      url: https://api.courier.com/lists
    docs: Returns all subscription lists in the workspace.
  - info:
      name: Get a list.
      type: http
    http:
      method: GET
      url: https://api.courier.com/lists/:list_id
      params:
      - name: list_id
        value: ''
        type: path
        description: The list id.
    docs: Get a single list by id.
  - info:
      name: Create or replace a list.
      type: http
    http:
      method: PUT
      url: https://api.courier.com/lists/:list_id
      params:
      - name: list_id
        value: ''
        type: path
        description: The list id.
      body:
        type: json
        data: "{\n  \"name\": \"My List\"\n}"
    docs: Create or replace a subscription list.
  - info:
      name: Delete a list.
      type: http
    http:
      method: DELETE
      url: https://api.courier.com/lists/:list_id
      params:
      - name: list_id
        value: ''
        type: path
        description: The list id.
    docs: Delete a subscription list.
  - info:
      name: Get list subscriptions.
      type: http
    http:
      method: GET
      url: https://api.courier.com/lists/:list_id/subscriptions
      params:
      - name: list_id
        value: ''
        type: path
        description: The list id.
    docs: Get the users subscribed to a list.
  - info:
      name: Subscribe a user to a list.
      type: http
    http:
      method: PUT
      url: https://api.courier.com/lists/:list_id/subscriptions/:user_id
      params:
      - name: list_id
        value: ''
        type: path
        description: The list id.
      - name: user_id
        value: ''
        type: path
        description: The user id.
    docs: Subscribe a single user to a list.
- info:
    name: User Profiles
    type: folder
  items:
  - info:
      name: Get a profile.
      type: http
    http:
      method: GET
      url: https://api.courier.com/profiles/:user_id
      params:
      - name: user_id
        value: ''
        type: path
        description: The user id.
    docs: Retrieve a recipient profile.
  - info:
      name: Create or merge a profile.
      type: http
    http:
      method: POST
      url: https://api.courier.com/profiles/:user_id
      params:
      - name: user_id
        value: ''
        type: path
        description: The user id.
      body:
        type: json
        data: "{\n  \"profile\": { \"email\": \"user@example.com\" }\n}"
    docs: Create or merge a recipient profile.
  - info:
      name: Replace a profile.
      type: http
    http:
      method: PUT
      url: https://api.courier.com/profiles/:user_id
      params:
      - name: user_id
        value: ''
        type: path
        description: The user id.
      body:
        type: json
        data: "{\n  \"profile\": { \"email\": \"user@example.com\" }\n}"
    docs: Replace a recipient profile.
  - info:
      name: Delete a profile.
      type: http
    http:
      method: DELETE
      url: https://api.courier.com/profiles/:user_id
      params:
      - name: user_id
        value: ''
        type: path
        description: The user id.
    docs: Delete a recipient profile.
- info:
    name: User Preferences
    type: folder
  items:
  - info:
      name: List user preferences.
      type: http
    http:
      method: GET
      url: https://api.courier.com/users/:user_id/preferences
      params:
      - name: user_id
        value: ''
        type: path
        description: The user id.
    docs: List a user's notification preferences across topics.
  - info:
      name: Update a user topic preference.
      type: http
    http:
      method: PUT
      url: https://api.courier.com/users/:user_id/preferences/:topic_id
      params:
      - name: user_id
        value: ''
        type: path
        description: The user id.
      - name: topic_id
        value: ''
        type: path
        description: The subscription topic id.
      body:
        type: json
        data: "{\n  \"topic\": { \"status\": \"OPTED_IN\" }\n}"
    docs: Update a user's preference for a subscription topic.
- info:
    name: Device Tokens
    type: folder
  items:
  - info:
      name: List a user's device tokens.
      type: http
    http:
      method: GET
      url: https://api.courier.com/users/:user_id/tokens
      params:
      - name: user_id
        value: ''
        type: path
        description: The user id.
    docs: List the push device tokens for a user.
  - info:
      name: Add or update a device token.
      type: http
    http:
      method: PUT
      url: https://api.courier.com/users/:user_id/tokens/:token
      params:
      - name: user_id
        value: ''
        type: path
        description: The user id.
      - name: token
        value: ''
        type: path
        description: The device token.
      body:
        type: json
        data: "{\n  \"provider_key\": \"firebase-fcm\"\n}"
    docs: Add or update a push device token for a user.
  - info:
      name: Delete a device token.
      type: http
    http:
      method: DELETE
      url: https://api.courier.com/users/:user_id/tokens/:token
      params:
      - name: user_id
        value: ''
        type: path
        description: The user id.
      - name: token
        value: ''
        type: path
        description: The device token.
    docs: Delete a push device token.
- info:
    name: Notification Templates
    type: folder
  items:
  - info:
      name: List notification templates.
      type: http
    http:
      method: GET
      url: https://api.courier.com/notifications
    docs: List notification templates designed in the Courier studio.
  - info:
      name: Get notification content.
      type: http
    http:
      method: GET
      url: https://api.courier.com/notifications/:notification_id/content
      params:
      - name: notification_id
        value: ''
        type: path
        description: The notification template id.
    docs: Get the content blocks of a notification template.
- info:
    name: Brands
    type: folder
  items:
  - info:
      name: List brands.
      type: http
    http:
      method: GET
      url: https://api.courier.com/brands
    docs: List brands in the workspace.
  - info:
      name: Create a brand.
      type: http
    http:
      method: POST
      url: https://api.courier.com/brands
      body:
        type: json
        data: "{\n  \"name\": \"My Brand\"\n}"
    docs: Create a brand.
  - info:
      name: Get a brand.
      type: http
    http:
      method: GET
      url: https://api.courier.com/brands/:brand_id
      params:
      - name: brand_id
        value: ''
        type: path
        description: The brand id.
    docs: Get a brand by id.
- info:
    name: Automations
    type: folder
  items:
  - info:
      name: Invoke an ad-hoc automation.
      type: http
    http:
      method: POST
      url: https://api.courier.com/automations/invoke
      body:
        type: json
        data: "{\n  \"automation\": { \"steps\": [] },\n  \"recipient\": \"USER_ID\"\n}"
    docs: Invoke an automation run defined inline.
  - info:
      name: Invoke an automation template.
      type: http
    http:
      method: POST
      url: https://api.courier.com/automations/:template_id/invoke
      params:
      - name: template_id
        value: ''
        type: path
        description: The automation template id.
      body:
        type: json
        data: "{\n  \"recipient\": \"USER_ID\"\n}"
    docs: Invoke a saved automation template by id.
- info:
    name: Audiences
    type: folder
  items:
  - info:
      name: List audiences.
      type: http
    http:
      method: GET
      url: https://api.courier.com/audiences
    docs: List dynamic audiences.
  - info:
      name: Create or update an audience.
      type: http
    http:
      method: PUT
      url: https://api.courier.com/audiences/:audience_id
      params:
      - name: audience_id
        value: ''
        type: path
        description: The audience id.
      body:
        type: json
        data: "{\n  \"name\": \"Power Users\",\n  \"filter\": {}\n}"
    docs: Create or update an audience defined by profile filters.
  - info:
      name: List audience members.
      type: http
    http:
      method: GET
      url: https://api.courier.com/audiences/:audience_id/members
      params:
      - name: audience_id
        value: ''
        type: path
        description: The audience id.
    docs: List the members currently matching an audience.
- info:
    name: Tenants
    type: folder
  items:
  - info:
      name: List tenants.
      type: http
    http:
      method: GET
      url: https://api.courier.com/tenants
    docs: List tenants for multi-tenant applications.
  - info:
      name: Create or replace a tenant.
      type: http
    http:
      method: PUT
      url: https://api.courier.com/tenants/:tenant_id
      params:
      - name: tenant_id
        value: ''
        type: path
        description: The tenant id.
      body:
        type: json
        data: "{\n  \"name\": \"Acme Inc\"\n}"
    docs: Create or replace a tenant.
  - info:
      name: List users in a tenant.
      type: http
    http:
      method: GET
      url: https://api.courier.com/tenants/:tenant_id/users
      params:
      - name: tenant_id
        value: ''
        type: path
        description: The tenant id.
    docs: List the users associated with a tenant.
- info:
    name: Bulk
    type: folder
  items:
  - info:
      name: Create a bulk job.
      type: http
    http:
      method: POST
      url: https://api.courier.com/bulk
      body:
        type: json
        data: "{\n  \"message\": { \"template\": \"TEMPLATE_ID\" }\n}"
    docs: Create a bulk job for a one-to-many send.
  - info:
      name: Add users to a bulk job.
      type: http
    http:
      method: POST
      url: https://api.courier.com/bulk/:job_id
      params:
      - name: job_id
        value: ''
        type: path
        description: The bulk job id.
      body:
        type: json
        data: "{\n  \"users\": []\n}"
    docs: Add recipients to a bulk job.
  - info:
      name: Run a bulk job.
      type: http
    http:
      method: POST
      url: https://api.courier.com/bulk/:job_id/run
      params:
      - name: job_id
        value: ''
        type: path
        description: The bulk job id.
    docs: Start running a bulk job.
  - info:
      name: Get a bulk job.
      type: http
    http:
      method: GET
      url: https://api.courier.com/bulk/:job_id
      params:
      - name: job_id
        value: ''
        type: path
        description: The bulk job id.
    docs: Get the status of a bulk job.
- info:
    name: Audit Events
    type: folder
  items:
  - info:
      name: List audit events.
      type: http
    http:
      method: GET
      url: https://api.courier.com/audit-events
    docs: List workspace audit events.
  - info:
      name: Get an audit event.
      type: http
    http:
      method: GET
      url: https://api.courier.com/audit-events/:audit_event_id
      params:
      - name: audit_event_id
        value: ''
        type: path
        description: The audit event id.
    docs: Get a single audit event by id.
- info:
    name: Translations
    type: folder
  items:
  - info:
      name: Get translations for a locale.
      type: http
    http:
      method: GET
      url: https://api.courier.com/translations/:domain/:locale
      params:
      - name: domain
        value: ''
        type: path
        description: The translation domain.
      - name: locale
        value: ''
        type: path
        description: The locale, e.g. en-US.
    docs: Retrieve the translation (.po) content for a domain and locale.
  - info:
      name: Update translations for a locale.
      type: http
    http:
      method: PUT
      url: https://api.courier.com/translations/:domain/:locale
      params:
      - name: domain
        value: ''
        type: path
        description: The translation domain.
      - name: locale
        value: ''
        type: path
        description: The locale, e.g. en-US.
      body:
        type: text
        data: 'msgid "hello"

          msgstr "hola"'
    docs: Update the translation content for a domain and locale.
bundled: true