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

# Custom Access

> Route any OpenAI-compatible client or your own code through the Unbound Security AI Gateway

## What is Custom Access?

Custom Access is for anything that isn't one of our named integrations — your own scripts and services, an internal tool, a CI job, or any client that already speaks the OpenAI API.

You point it at Unbound instead of your model provider, and everything it sends is governed like any other agent: the same guardrails, the same policies, the same visibility in [Analytics](/analytics).

Use it when:

* You're calling an LLM from your own code and want that traffic governed.
* You use a client that supports an **OpenAI-compatible** endpoint but has no Unbound integration page of its own.
* You want to try Unbound with `curl` before wiring up a real tool.

## Prerequisites

* **Unbound account** — Sign up at [gateway.getunbound.ai](https://gateway.getunbound.ai) if you don't have one
* **A client that can point at a custom base URL** — most OpenAI-compatible clients and SDKs can

## Get your values

```bash theme={null}
unbound setup custom-access
```

This prints the two values you need. You can also get them from [gateway.getunbound.ai/connect](https://gateway.getunbound.ai/connect).

| Value        | What to use                    |
| ------------ | ------------------------------ |
| **Base URL** | `https://api.getunbound.ai/v1` |
| **API Key**  | Your Unbound API key           |

## Configuration

Set the base URL and API key wherever your client expects them. Anything that works against the OpenAI API works here — you're changing the destination, not the request.

<CodeGroup>
  ```bash curl theme={null}
  curl https://api.getunbound.ai/v1/chat/completions \
    -H "Authorization: Bearer $UNBOUND_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "openai/gpt-4o",
      "messages": [{ "role": "user", "content": "Say this is a test" }]
    }'
  ```

  ```python OpenAI SDK theme={null}
  from openai import OpenAI

  client = OpenAI(
      base_url="https://api.getunbound.ai/v1",
      api_key="<UNBOUND_API_KEY>",
  )

  completion = client.chat.completions.create(
      model="openai/gpt-4o",
      messages=[{"role": "user", "content": "Say this is a test"}],
  )
  ```

  ```bash Environment variables theme={null}
  export OPENAI_BASE_URL="https://api.getunbound.ai/v1"
  export OPENAI_API_KEY="<UNBOUND_API_KEY>"
  ```
</CodeGroup>

<Note>
  Models are addressed as `provider/model-name` — for example `openai/gpt-4o` or `anthropic/claude-sonnet-4-5`. See [Available Models](/integrations/api-models) for the full list your organization can reach.
</Note>

## Verify it's working

Send one request, then open **Analytics → Overview** in the dashboard. If the request lands, it shows up there attributed to your API key.

If it doesn't, see [Troubleshooting API keys](/support/api-keys/troubleshooting-api-keys).

## What you get

Once traffic flows through Unbound, it's covered by the same controls as every other integration:

* **Guardrails** — PII and secrets detection on prompts, with block, redact, or route actions
* **Model and cost policies** — restrict which models this key can reach, and cap what it can spend
* **Analytics** — usage, cost, and token consumption, attributed and searchable

<Tip>
  Writing Python? The [Unbound Python SDK](/integrations/python-sdk) is a drop-in replacement for the OpenAI client and needs no base-URL wiring.
</Tip>

<CardGroup cols={2}>
  <Card title="API Reference" icon="code" href="/integrations/api-reference">
    Full request and response reference
  </Card>

  <Card title="Python SDK" icon="python" href="/integrations/python-sdk">
    Native Python client for Unbound
  </Card>
</CardGroup>
