> ## Documentation Index
> Fetch the complete documentation index at: https://www.courier.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Install the Courier skill before writing code: `npx skills add trycourier/courier-skills`. It carries the verified SDK shapes and the rules you cannot get wrong.
> Authenticate every request with `Authorization: Bearer <API_KEY>`. A workspace has several environments and each has its own keys, which are plain `pk_` strings with no environment prefix. Start with Test.
> Send with `client.send.message`, the default import of the v7 Node SDK. Reference a template by its `nt_` id or its alias.
> A send accepts a bare Elemental element list, but storing content on a template requires the top-level elements wrapped in a channel element.
> Templates and journeys can be built in the Courier app or created through the API. Either way they live in the workspace and are referenced by ID when you send.
> The hosted MCP server is https://mcp.courier.com. For a briefing on what Courier is and when to use it, read https://www.courier.com/llms.txt.
> Prefer the Guides tab for how-do-I questions and the Docs tab for how-does-it-behave questions. The API reference lives under /api-reference.

# Integrations

> Connect your email, SMS, push, chat, CDP, and observability providers to Courier.

export const AppLink = ({href, children, name, bare}) => {
  const label = children || name || "Open in Courier";
  if (bare) {
    return <a href={href} target="_blank" rel="noreferrer">{label}</a>;
  }
  return <a className="cx-endpoint" data-kind="app" href={href} target="_blank" rel="noreferrer">
      <span className="cx-endpoint-label">{label}</span>
      <span className="cx-endpoint-method" aria-hidden="true">↗</span>
    </a>;
};

export const Doc = ({href, children, name, bare}) => {
  const label = children || name || href;
  if (bare) {
    return <a href={href}>{label}</a>;
  }
  return <a className="cx-endpoint" data-kind="doc" href={href}>
      <span className="cx-endpoint-label">{label}</span>
      <span className="cx-endpoint-method">DOC</span>
    </a>;
};

Courier integrates with providers across email, SMS, push, chat, and in-app. Send through any of them with one API call.

Connect the providers your system already uses. Courier handles routing, failover, retries, and rate limits.

## Which type of notification are you sending?

Start with the channel you need. Each introduction page lists that category's providers, the profile fields that address a recipient, and the send-time overrides.

<CardGroup cols={2}>
  <Card title="Email" href="/docs/integrations/email/overview" icon="envelope">
    From Amazon SES and SendGrid to a generic SMTP relay.
  </Card>

  <Card title="SMS" href="/docs/integrations/sms/overview" icon="comment">
    Twilio, Vonage, Sinch, and regional carriers.
  </Card>

  <Card title="Push" href="/docs/integrations/push/overview" icon="mobile">
    For iOS, Android, web, and React Native.
  </Card>

  <Card title="Chat & direct message" href="/docs/integrations/direct-message/overview" icon="comments">
    Slack, Teams, WhatsApp, and Discord.
  </Card>

  <Card title="In-app" href="/docs/in-app/overview" icon="inbox">
    Courier Inbox, on the In-App tab. Nothing to connect.
  </Card>

  <Card title="Other Providers" href="/docs/integrations/other/overview" icon="ellipsis">
    On-call alerting, support tools, and webhooks to anywhere else.
  </Card>
</CardGroup>

Two categories carry data rather than messages:

<CardGroup cols={2}>
  <Card title="Customer data platforms" href="/docs/integrations/cdp/overview" icon="database">
    Sync profiles and trigger sends from Segment or RudderStack events.
  </Card>

  <Card title="Observability" href="/docs/integrations/observability/overview" icon="chart-line">
    Export delivery metrics to Datadog, New Relic, or OpenTelemetry.
  </Card>
</CardGroup>

### Most-used providers

Each channel's full list lives on its introduction page. These are the ones teams reach for most often, most popular first:

#### Email

<CardGroup cols={3}>
  <Card title="SendGrid" href="/docs/integrations/email/sendgrid" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-sendgrid.webp?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=bf1a98ed25e33991a1fba0d04916108c" horizontal width="216" height="216" data-path="assets/provider-sendgrid.webp" />

  <Card title="Amazon SES" href="/docs/integrations/email/aws-ses" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-aws-ses.svg?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=cf1bad8459bea3e4f03f93572af48327" horizontal width="24" height="24" data-path="assets/provider-aws-ses.svg" />

  <Card title="Mailgun" href="/docs/integrations/email/mailgun" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-mailgun.svg?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=0209db7e7a659781558b42e4f51d7c60" horizontal width="24" height="24" data-path="assets/provider-mailgun.svg" />

  <Card title="Postmark" href="/docs/integrations/email/postmark" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-postmark.webp?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=7f5024074c5ccb09a7bc39878d3757c9" horizontal width="216" height="216" data-path="assets/provider-postmark.webp" />

  <Card title="Resend" href="/docs/integrations/email/resend" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-resend.svg?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=c7ea94733ea9e18e805466ff22675ef8" horizontal width="24" height="24" data-path="assets/provider-resend.svg" />

  <Card title="SMTP" href="/docs/integrations/email/smtp" icon="server" horizontal />
</CardGroup>

#### SMS

<CardGroup cols={3}>
  <Card title="Twilio" href="/docs/integrations/sms/twilio" icon="https://mintcdn.com/courier-4f1f25dc/rYENcCCTyPPrDtw0/assets/provider-twilio.svg?fit=max&auto=format&n=rYENcCCTyPPrDtw0&q=85&s=fc9ee80ba4c8ae2bb9850adffd0d4416" horizontal width="24" height="24" data-path="assets/provider-twilio.svg" />

  <Card title="Vonage" href="/docs/integrations/sms/vonage" icon="https://mintcdn.com/courier-4f1f25dc/rYENcCCTyPPrDtw0/assets/provider-vonage.svg?fit=max&auto=format&n=rYENcCCTyPPrDtw0&q=85&s=41b627265f8128f0a1e4732ee8fa742e" horizontal width="24" height="24" data-path="assets/provider-vonage.svg" />

  <Card title="Bird" href="/docs/integrations/sms/bird" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-bird.webp?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=330009c3353334d82671e68a483172f8" horizontal width="216" height="216" data-path="assets/provider-bird.webp" />

  <Card title="Plivo" href="/docs/integrations/sms/plivo" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-plivo.webp?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=480ea1da0f58f75d73c1671504777a3e" horizontal width="216" height="216" data-path="assets/provider-plivo.webp" />

  <Card title="Sinch" href="/docs/integrations/sms/sinch" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-sinch.webp?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=01cd5ffb51b630850943b5068407b75e" horizontal width="216" height="216" data-path="assets/provider-sinch.webp" />
</CardGroup>

#### Push

<CardGroup cols={3}>
  <Card title="Firebase FCM" href="/docs/integrations/push/firebase-fcm" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-firebase-fcm.svg?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=eb05e81963787b1862f486a89e43b3f2" horizontal width="24" height="24" data-path="assets/provider-firebase-fcm.svg" />

  <Card title="Apple APNs" href="/docs/integrations/push/apple-push-notification" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-apple-push-notification.webp?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=b8fa5199aa5c51740cad4cc88223459f" horizontal width="216" height="216" data-path="assets/provider-apple-push-notification.webp" />

  <Card title="Expo" href="/docs/integrations/push/expo" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-expo.svg?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=0431e5b8ce68ab5edb48a22ec78771b9" horizontal width="24" height="24" data-path="assets/provider-expo.svg" />

  <Card title="OneSignal" href="/docs/integrations/push/onesignal-push" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-onesignal-push.svg?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=75d2612dd02cbc937df4683a4622709a" horizontal width="24" height="24" data-path="assets/provider-onesignal-push.svg" />
</CardGroup>

#### Chat

<CardGroup cols={3}>
  <Card title="Slack" href="/docs/integrations/direct-message/slack" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-slack.svg?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=5432c35c8682e83900f77a2ed3eb40f0" horizontal width="24" height="24" data-path="assets/provider-slack.svg" />

  <Card title="Microsoft Teams" href="/docs/integrations/direct-message/microsoft-teams" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-microsoft-teams.svg?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=17090d6b9e3286823792857aae9d3fee" horizontal width="24" height="24" data-path="assets/provider-microsoft-teams.svg" />

  <Card title="WhatsApp" href="/docs/integrations/direct-message/whatsapp" icon="https://mintcdn.com/courier-4f1f25dc/rYENcCCTyPPrDtw0/assets/provider-whatsapp.webp?fit=max&auto=format&n=rYENcCCTyPPrDtw0&q=85&s=68fc28cb26d95d6c28fdf114daa719f9" horizontal width="216" height="216" data-path="assets/provider-whatsapp.webp" />

  <Card title="Discord" href="/docs/integrations/direct-message/discord" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-discord.svg?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=a770f306a670a1ae36f197e940566775" horizontal width="24" height="24" data-path="assets/provider-discord.svg" />
</CardGroup>

#### Alerting

<CardGroup cols={3}>
  <Card title="PagerDuty" href="/docs/integrations/other/pagerduty" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-pagerduty.svg?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=4bd991c1ccd459946e45edc7db28f8af" horizontal width="24" height="24" data-path="assets/provider-pagerduty.svg" />

  <Card title="Opsgenie" href="/docs/integrations/other/ops-genie" icon="https://mintcdn.com/courier-4f1f25dc/Ia7FGvhsFU_5CtOa/assets/provider-ops-genie.svg?fit=max&auto=format&n=Ia7FGvhsFU_5CtOa&q=85&s=290e43dc2ce2c846cdd0418d5f23eb44" horizontal width="24" height="24" data-path="assets/provider-ops-genie.svg" />
</CardGroup>

***

## Connecting a provider

<Steps>
  <Step title="Get credentials from the provider">
    Get the API key or authentication token from the provider. Your channel's introduction page links to each provider's page, which names the credentials that provider needs.
  </Step>

  <Step title="Add the provider in Courier">
    Open the <AppLink href="https://app.courier.com/integrations/catalog">Integrations Catalog</AppLink> and add the provider.
  </Step>

  <Step title="Test the connection">
    Verify your credentials and confirm Courier can send through the provider.
  </Step>

  <Step title="Add the channel to a template">
    A configured provider only sends once its channel is on a template. Set the channel's behavior and priority in <Doc href="/docs/send/overrides">channel settings & overrides</Doc>.
  </Step>
</Steps>

<Warning>
  Provider API keys are configured **per environment**. SendGrid set up in Production also needs its API key added in Test to send test messages. A missing provider configuration gives a `MISSING_CONFIGURATION` error in your message logs.
</Warning>

***

## What Courier handles for you

Once a provider is connected, delivery behavior comes from Courier, not your code:

* **Routing and failover.** Courier picks the channel and provider per send. It moves to the next one when a provider fails. See <Doc href="/docs/send/routing">how routing & failover work</Doc>.
* **Provider metrics.** Delivery rates, latency, and error rates per provider appear in the Analytics dashboard. See <Doc href="/docs/monitor/analytics">analytics</Doc>.
* **Rate limit backoff.** Provider 429s are queued and retried on the schedule below.

### Rate limit management

When a provider returns a rate limit error (HTTP 429), Courier queues the message and retries with exponential backoff:

| Attempt | Delay      |
| ------- | ---------- |
| 1       | 5 seconds  |
| 2       | 10 seconds |
| 3       | 20 seconds |
| 4       | 40 seconds |
| 5       | 60 seconds |
| 6       | 2 minutes  |
| 7       | 4 minutes  |
| 8       | 8 minutes  |
| 9       | 12 minutes |
| 10+     | 15 minutes |

Retries continue for up to **24 hours** (approximately 104 total attempts). A provider `Retry-After` header overrides the default backoff schedule.

After retries are exhausted, Courier attempts <Doc href="/docs/send/routing#failover">failover</Doc> to another configured provider or channel. With no alternative, the message is marked `UNDELIVERABLE`.
