> ## 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` from the Node SDK (`@trycourier/courier` v7 and later, where the client is the default import). 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.
> To translate a template, write one locale at a time with `PUT /notifications/{id}/locales/{localeId}`, which merges into the existing translations. `PUT /notifications/{id}/content` and `PUT /notifications/{id}/elements/{elementId}` overwrite translations along with the content, so send each element's `id` and `locales` back, and first remove every `checksum` and any `locales` key that starts with an underscore.
> 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.

# Regional datacenters: US and EU

> Courier runs separate US and EU datacenters. Send EU users' notifications through the EU datacenter to keep their data in Europe for data residency.

Courier has two datacenters: US and EU (Ireland). All data in the two datacenters is separate, and none of it is shared. Each keeps its own templates, brands, users, logs, and API keys. Your team signs in to both with the same email address.

| | US | EU |
| - | - | - |
| Console | `https://app.courier.com` | `https://app.eu.courier.com` |
| API | `https://api.courier.com` | `https://api.eu.courier.com` |
| Inbox | `https://inbox.courier.com` | `https://inbox.eu.courier.io` |
| Inbox real-time | `wss://realtime.courier.io` | `wss://realtime.eu.courier.io` |

Every SDK and the CLI use the US unless you point them at the EU. For certifications and subprocessors, see [Compliance](/docs/workspaces/compliance).

## Set up the EU datacenter

The EU datacenter is available on every paid plan: Business and Enterprise.

<Steps>
  <Step title="Create your account">
    Sign up at [app.courier.com](https://app.courier.com) if you don't have an account yet.
  </Step>

  <Step title="Sign in to the EU console">
    Sign in at [app.eu.courier.com](https://app.eu.courier.com) with the same email address, and open your workspace.
  </Step>

  <Step title="Set up your EU workspace">
    Set it up the way you set up your US workspace: copy its API keys, connect your providers, and add your templates and brands. Then send through the [EU API](#send-through-the-eu) and [connect your inbox to the EU](#connect-your-inbox-to-the-eu).
  </Step>
</Steps>

## Send through the EU

Every server SDK and the CLI read `COURIER_BASE_URL`. Set it to the EU API, and use an API key from your EU workspace:

```bash theme={null}
export COURIER_BASE_URL="https://api.eu.courier.com"
export COURIER_API_KEY="YOUR_COURIER_API_KEY"   # an API key from app.eu.courier.com
```

To set it in code instead, pass the base URL when you create the client:

| SDK | Option |
| - | - |
| Node.js | `baseURL` |
| Python | `base_url` |
| Ruby | `base_url:` |
| Go | `option.WithBaseURL(...)` |
| Java | `.baseUrl(...)` |
| PHP | `baseUrl:` |
| C# | `BaseUrl` |
| CLI | `--base-url` |

The [hosted MCP server](/docs/resources/mcp) works with your EU API key too.

## Connect your inbox to the EU

1. Your backend creates each user's inbox token with your EU API key, through `https://api.eu.courier.com`.
2. Your app signs the inbox in with the EU URLs.

[Connect to the EU datacenter](/docs/in-app/authenticate-users#connect-to-the-eu-datacenter) has the code for every SDK.

## FAQ

<AccordionGroup>
  <Accordion title="Can I move my data from the US to the EU?">
    Data you've already sent through the US stays in the US. [Set up your EU workspace](#set-up-the-eu-datacenter), then send new notifications through `https://api.eu.courier.com`.
  </Accordion>
</AccordionGroup>
