# Anthropic protocol

> Point the Anthropic SDK or Claude Code at TokRouter's /v1/messages endpoint and call any vendor's model with the same key.

The gateway speaks Anthropic Messages natively (`POST /v1/messages`). That means **the Anthropic SDK
and Claude Code only need a different base URL** — no adapter layer.

## Anthropic Python SDK

```python
import os
import anthropic

client = anthropic.Anthropic(
    api_key=os.environ["TOKROUTER_API_KEY"],
    base_url="https://api.tokrouter.dev",   # the SDK appends /v1/messages itself
)

msg = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain SSE in one sentence"}],
)
print(msg.content[0].text)
```

## TypeScript SDK

```ts

const client = new Anthropic({
  apiKey: process.env.TOKROUTER_API_KEY!,
  baseURL: 'https://api.tokrouter.dev',
})
```

## Raw HTTP

```bash
curl https://api.tokrouter.dev/v1/messages \
  -H "x-api-key: $TOKROUTER_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-opus-5-5",
    "max_tokens": 512,
    "messages": [{"role": "user", "content": "Hello"}]
  }'
```

<Callout type="info" title="Both auth headers work">
The Anthropic protocol uses `x-api-key`; the OpenAI protocol uses `Authorization: Bearer`. The gateway
accepts either — use whichever your SDK sends by default, and do not send both.
</Callout>

## Call other vendors with the Anthropic protocol

The `model` field decides the upstream vendor, independent of the inbound protocol:

```python
msg = client.messages.create(
    model="gpt-5.4",        # Anthropic protocol → OpenAI model
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
```

<Callout type="warn" title="Bridging has boundaries">
Fields are interpreted as Anthropic Messages semantics and then mapped onto the target vendor. If the
target model lacks a capability (vision, tool use), the gateway returns an error instead of silently
degrading. See [Protocol bridging](/en/guides/protocol-interop/).
</Callout>
