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

> ## Agent Instructions
> Phaseo Gateway base URL: https://api.phaseo.app/v1. Send `Authorization: Bearer $PHASEO_API_KEY` with every request.
> Model IDs look like `provider/model`, for example `openai/gpt-6-astra`. Do not guess IDs: list them with `GET /v1/models` or check https://phaseo.app/models. `phaseo/free` routes to an available free model and needs no wallet balance.
> For new text integrations prefer `POST /v1/responses`. `POST /v1/chat/completions` (OpenAI format) and `POST /v1/messages` (Anthropic format) suit existing code.
> The full API contract is https://phaseo.app/docs/openapi/v1/openapi.yaml. Official SDKs: `@phaseo/sdk` (TypeScript) and `phaseo` (Python), plus Go, C#, PHP, Ruby and Rust.
> Search these docs over MCP at https://phaseo.app/docs/mcp, and install Phaseo skills with `npx skills add https://phaseo.app/docs`. If a page is wrong or out of date, report it with the MCP `submit_feedback` tool.
> Manage Phaseo accounts with the `phaseo` CLI (`npm install -g @phaseo/cli`, then `phaseo login` or `phaseo login --device-code`), the `/v1` Management API or the MCP server at `https://mcp.phaseo.app/mcp?access=manage`. Do not send users to the dashboard for account tasks. A person is still needed for sign-up, approving a sign-in, paying the first top-up on the checkout link that `phaseo credits add` returns when no card is saved, confirming each saved-card top-up from the emailed link, and account security (password, MFA, passkeys). Create API keys with `phaseo keys create --name <name> --json`; never guess one. Credit top-ups need `phaseo login --scopes billing:write` first. Task map: https://phaseo.app/docs/v1/developers/manage-from-an-agent.md.

# Route only to EU or ZDR-capable providers

> Apply request-level residency and zero-data-retention requirements so a model only routes to compliant provider offers.

Use this recipe when one request needs provider filtering for compliance or data-handling reasons without changing the whole workspace policy.

## Goal

* Require EU execution.
* Require EU data residency.
* Require zero-data-retention-capable providers.

## 1. Add the residency requirements to the request

Set the provider requirements directly on the request body.

```bash cURL theme={null}
curl https://api.phaseo.app/v1/responses \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-3.1-flash-lite",
    "input": "Summarize the ticket in one line.",
    "provider": {
      "required_execution_region": "eu",
      "required_data_region": "eu",
      "require_zero_data_retention": true
    }
  }'
```

```typescript TypeScript SDK theme={null}
import Phaseo from "@phaseo/sdk";

const client = new Phaseo({ apiKey: process.env.PHASEO_API_KEY! });

const response = await client.generateResponse({
  model: "google/gemini-3.1-flash-lite",
  input: "Summarize the ticket in one line.",
  provider: {
    required_execution_region: "eu",
    required_data_region: "eu",
    require_zero_data_retention: true,
  },
});

console.log(response.output_text);
```

```python Python SDK theme={null}
from phaseo import Phaseo

client = Phaseo(api_key="YOUR_API_KEY")

response = client.generate_response(
    {
        "model": "google/gemini-3.1-flash-lite",
        "input": "Summarize the ticket in one line.",
        "provider": {
            "required_execution_region": "eu",
            "required_data_region": "eu",
            "require_zero_data_retention": True,
        },
    }
)

print(response.get("output_text"))
```

Supported request-level filters for this flow:

* `required_execution_region`
* `required_data_region`
* `require_zero_data_retention`

## 2. Use the smallest rule set that matches the policy

Only require what the workload actually needs.

Examples:

* execution locality only:
  * `required_execution_region: "eu"`
* data locality only:
  * `required_data_region: "eu"`
* ZDR (Zero data retention: only providers that meet zero-data-retention constraints.)-capable providers only:
  * `require_zero_data_retention: true`

## 3. Expect the candidate pool to shrink

These filters are applied before provider ranking, so they can remove providers entirely.

That means:

* the request may route to a more expensive regional offer
* the provider list may become much smaller
* the request may fail if no provider for that model satisfies the requirements

## 4. Preflight on the model page when possible

Before shipping the request, use the model page provider cards to inspect:

* regional offers such as `OpenAI EU` or `Google Vertex EU`
* ZDR support
* provider data-policy notes and sources

That helps you confirm there is at least one eligible provider before you enforce the requirement in production traffic.

## 5. Use workspace privacy settings for defaults

If the policy should apply to all requests from a workspace, set it in **Settings -> Privacy** instead of copying the same request-level filters everywhere.

Use the request fields when the rule is:

* per workflow
* per customer
* per request

## Related guides

* [Routing and Fallbacks](https://phaseo.app/docs/v1/guides/routing-and-fallbacks.md)
* [Presets](https://phaseo.app/docs/v1/guides/presets.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.