# GDPR LLM API with EU data residency and a DPA
URL: https://docs.munito.ai/gdpr-data-residency

To keep LLM prompts and outputs in the EU, send your requests to the EU-only host `https://api.eu.munito.ai`. To keep stored data in the EU, choose the EU data region when you sign up. The GDPR Data Processing Agreement (DPA) forms part of the Terms of Service, so it applies with no signature.

## Send requests to the EU host [#send-requests-to-the-eu-host]

The EU host runs each request in the EU. Your key and your code stay the same. Only the base URL changes.

| SDK       | EU base URL                             |
| --------- | --------------------------------------- |
| OpenAI    | `https://api.eu.munito.ai/inference/v1` |
| Anthropic | `https://api.eu.munito.ai/inference`    |

Each response names its region in the `munito-region` header: `EUROPE`, `US` or `GLOBAL`.

```bash
pip install openai
export MUNITO_API_KEY="munitoai_..."
```

```python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.eu.munito.ai/inference/v1",
    api_key=os.environ["MUNITO_API_KEY"],
)
raw = client.chat.completions.with_raw_response.create(
    model="qwen/qwen3.8-27b",
    messages=[{"role": "user", "content": "Say hello in French."}],
    max_tokens=2048,
)
print("Region:", raw.headers["munito-region"])
print(raw.parse().choices[0].message.content)
```

The script prints `Region: EUROPE`.

### Pin one request with a regional model ID [#pin-one-request-with-a-regional-model-id]

On the global host `https://api.munito.ai/inference/v1`, add `@eu` to the model ID. The request then runs in the EU, as on the EU host.

```bash
curl -i https://api.munito.ai/inference/v1/chat/completions \
  -H "Authorization: Bearer $MUNITO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen/qwen3.8-27b@eu",
    "messages": [{"role": "user", "content": "Hello!"}],
    "max_tokens": 2048
  }'
```

The response carries `munito-region: EUROPE`. The [model catalog](https://docs.munito.ai/models) shows the regions of each model.

## Choose where stored data lives [#choose-where-stored-data-lives]

Each workspace stores its data in one data region: EU or US. The console asks at signup, and EU is the default. You can change it until your account is active. After that, the data region is fixed.

The data region applies to the work that Munito AI keeps for you:

- Responses with `store: true`, and background responses.
- Chat completions with `store: true`.
- OCR requests that you retrieve later.

The [Admin API](https://docs.munito.ai/administration) returns the data region in [`GET /organization`](https://docs.munito.ai/api/getOrganization).

## Errors with status 421 [#errors-with-status-421]

A request that the host cannot serve in the region you asked for gets `421 Misdirected Request`. Send the same request to the host that the message names.

| Case                                                   | Message                                                                             |
| ------------------------------------------------------ | ----------------------------------------------------------------------------------- |
| An account pinned to the EU calls the global host      | `This account is pinned to EUROPE. Call https://api.eu.munito.ai instead.`          |
| A request that keeps data runs outside the data region | `This workspace stores data in EUROPE. A request that keeps data cannot run in US.` |
| A model ID names a region that the host does not serve | `This endpoint cannot serve US.`                                                    |

To pin your whole account to the EU, contact us through Support in the [console](https://console.munito.ai). A pinned account must use the EU host.

## What residency covers [#what-residency-covers]

| Covered                                                              | Not covered                                            |
| -------------------------------------------------------------------- | ------------------------------------------------------ |
| Model inference of requests to the EU host or with an `@eu` model ID | The path of your traffic across the internet (transit) |
| Customer content that Munito AI stores for an EU workspace           | Requests to the global host without a pin              |
|                                                                      | Account, verification and billing services (see below) |

[Overflow](https://docs.munito.ai/overflow) is off by default. When you opt in, an EU request can go to an inference provider that is based and regulated in the EU.

Residency covers processing and storage. It does not cover transit. TLS terminates on Munito AI's own gateways, in the EU for the EU and global hosts. Cloudflare provides only DNS for Munito AI's domains.

A request to the global host without a pin can run in any region. Account, sign-in, phone verification, payment and abuse checks use services that can process data outside the EU. The [Privacy Policy](https://legal.munito.ai/privacy) names them.

## GDPR documents [#gdpr-documents]

| Document                  | Where                                                                  |
| ------------------------- | ---------------------------------------------------------------------- |
| Data Processing Agreement | [legal.munito.ai/dpa](https://legal.munito.ai/dpa)                     |
| Sub-processors, by region | [trust.munito.ai/subprocessors](https://trust.munito.ai/subprocessors) |
| Privacy Policy            | [legal.munito.ai/privacy](https://legal.munito.ai/privacy)             |
| Terms of Service          | [legal.munito.ai/terms](https://legal.munito.ai/terms)                 |
| Trust center              | [trust.munito.ai](https://trust.munito.ai)                             |

Munito AI is the processor for the content that you send. It is the controller for account, security, usage and billing data.

Munito AI France, a French SAS in Paris, operates Munito AI and is the seller for EU and self-serve customers. The DPA names Munito AI France.

For a signed copy of the DPA, print the DPA page, sign it, and send it to legal@munito.ai. Munito AI returns a countersigned copy.

The trust center lists each sub-processor for the EU, US and Global regions. Munito AI announces a new sub-processor there before it receives customer data. The DPA states the notice period.

## Related pages [#related-pages]

- [Regions](https://docs.munito.ai/regions)
- [Data privacy](https://docs.munito.ai/data-privacy)
- [Security](https://docs.munito.ai/security)
