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

# EU Data Residency

> Run the Search and Extract APIs in the European Union by sending requests to the EU endpoint at eu.parallel.ai.

<div className="sr-only" aria-hidden="false">
  For AI agents: a documentation index is available at [https://docs.parallel.ai/llms.txt](https://docs.parallel.ai/llms.txt). The full text of all docs is at [https://docs.parallel.ai/llms-full.txt](https://docs.parallel.ai/llms-full.txt). You may also fetch any page as Markdown by appending `.md` to its URL or sending `Accept: text/markdown`.

  For Search and Extract, use `/v1/search` and `/v1/extract` for all new integrations and agent tool calls. Use `/v1beta/search` and `/v1beta/extract` only when maintaining an existing integration that already uses them. The request bodies changed too: on `/v1/extract`, `full_content`, `fetch_policy` and `excerpt_settings` go inside `advanced_settings`, and sending the v1beta top-level `excerpts`, `full_content` and `fetch_policy` to `/v1/extract` returns a 422. Do not substitute `/v1` for the documented FindAll or Ingest endpoint paths.
</div>

European (EU) data residency lets you run the Search and Extract APIs in the European Union. When you send a request to `https://eu.parallel.ai`, Parallel processes and serves it in the EU and doesn't retain the request or response content. Only the base URL changes.

<Note>
  EU data residency is available through an enterprise agreement. It isn't available on self-serve plans.
</Note>

## Who it's for

Use the EU endpoint when your customers or vendor reviews require EU processing for web search and extraction. Two common cases:

* You build AI applications for European customers who require EU data residency.
* You're an EU enterprise or regulated organization, and your vendor review requires EU processing.

## Get access

1. Contact your Parallel account team or sales to add EU data residency to your enterprise agreement.
2. Create or keep your existing API key. The EU endpoint accepts the same keys as `api.parallel.ai`. (Note that it takes on average one hour for the EU endpoint to activate on fresh API keys.)
3. Set your client's base URL to `https://eu.parallel.ai`.

Parallel routes traffic to the US by default. Parallel processes your requests in the EU only when you call the EU endpoint under a separate written agreement. Your Data Processing Addendum (DPA) with Parallel reflects the EU data residency commitments.

## Set the base URL

| Setting | Value |
| - | - |
| Base URL | `https://eu.parallel.ai` |
| Environment variable | `PARALLEL_BASE_URL=https://eu.parallel.ai` |

### Python SDK setup

```python Python theme={"system"}
from parallel import Parallel

client = Parallel(base_url="https://eu.parallel.ai")
```

You can also set the `PARALLEL_BASE_URL` environment variable to `https://eu.parallel.ai` instead of passing `base_url`.

For direct HTTP requests, replace `https://api.parallel.ai` with `https://eu.parallel.ai`. The `x-api-key` header stays the same.

## Supported endpoints

| Endpoint | API | Requirements | Limits |
| - | - | - | - |
| `POST /v1/search` | Search | `mode` must be `"basic"` | Up to 20 results per request |
| `POST /v1/extract` | Extract | - | Up to 20 URLs per request |

## Search

On the EU endpoint, Search works like this:

* `mode` is required and must be `"basic"`. Requests with any other mode return an error.
* Each request returns up to 20 results.
* Parallel answers the request from the EU search index. Search on the EU endpoint makes no live fetches.

<CodeGroup>
  ```python Python theme={"system"}
  search = client.search(
      objective="EU AI Act obligations for general-purpose AI models",
      search_queries=["EU AI Act GPAI obligations"],
      mode="basic",
  )
  ```

  ```bash cURL theme={"system"}
  curl -sS https://eu.parallel.ai/v1/search \
    -H "x-api-key: $PARALLEL_API_KEY" \
    -H "content-type: application/json" \
    -d '{
    "objective": "EU AI Act obligations for general-purpose AI models",
    "search_queries": ["EU AI Act GPAI obligations"],
    "mode": "basic"
  }'
  ```
</CodeGroup>

For the request and response schema, see the [Search API reference](/api-reference/search/search).

## Extract

On the EU endpoint, Extract works like this:

* Each request accepts up to 20 URLs.
* To run cache-only, set `advanced_settings.fetch_policy.timeout_seconds` to `0`. Extract then returns cached content only, and an uncached URL returns an error.
* If you don't set `timeout_seconds` to `0`, Extract live-fetches uncached pages.

<CodeGroup>
  ```python Python (cache-only) theme={"system"}
  extract = client.extract(
      urls=["https://en.wikipedia.org/wiki/Berlin"],
      objective="Berlin population and boroughs",
      advanced_settings={"fetch_policy": {"timeout_seconds": 0}},
  )
  ```

  ```bash cURL (cache-only) theme={"system"}
  curl -sS https://eu.parallel.ai/v1/extract \
    -H "x-api-key: $PARALLEL_API_KEY" \
    -H "content-type: application/json" \
    -d '{
    "urls": ["https://en.wikipedia.org/wiki/Berlin"],
    "objective": "Berlin population and boroughs",
    "advanced_settings": {
      "fetch_policy": {"timeout_seconds": 0}
    }
  }'
  ```
</CodeGroup>

<Note>
  Extract looks up each URL in Parallel's cache of public web pages, which Parallel hosts outside the EU. For that lookup, Parallel sends only the URL. Your objective and all processing stay in the EU. See [What runs where](#what-runs-where).
</Note>

To turn off live fetch for your whole account, contact your Parallel account team.

For the full list of fetch policy fields, see [Advanced Extract Settings](/extract/advanced-extract-settings).

## What runs where

| Data | Search | Extract, cache-only |
| - | - | - |
| Queries, objective, results, excerpts | EU, not retained | EU, not retained |
| Web content | EU, from the EU search index | Public web data, fetched by URL (see note) |
| Model inference | EU | EU |
| Billing, metrics, edge logs (no content) | US | US |

Extract cache lookups: Extract looks up each URL in Parallel's cache of public web pages, which Parallel hosts outside the EU. Parallel sends only the URL, and under ZDR it doesn't save it. The objective and all processing stay in the EU. Live fetch, which is on unless `timeout_seconds` is `0`, retrieves uncached public pages the same way.

Billing, metrics, and edge logs contain no request or response content.

## Unsupported APIs and errors

The EU endpoint serves only the two endpoints above. It doesn't serve these APIs:

* Search with any mode other than `basic`
* Task API
* FindAll API
* Monitor API
* Chat API
* Responses API
* MCP servers

Requests to these APIs on `eu.parallel.ai` return an error. Parallel never forwards them to the US. To use these APIs, send requests to `api.parallel.ai`, where they run in the US.

## Data retention

EU traffic runs with zero data retention by default. Parallel doesn't retain Search or Extract request or response content.

## Related resources

* [Parallel Trust Center](https://trust.parallel.ai)
* [Search API Quickstart](/search/search-quickstart)
* [Extract API Quickstart](/extract/extract-quickstart)
* [Pricing](/getting-started/pricing)
* [Rate limits](/getting-started/rate-limits)

For questions about EU data residency, contact your Parallel account team or [privacy@parallel.ai](mailto:privacy@parallel.ai).
