What this is.
ClaudeOpus is an Anthropic-compatible proxy. It speaks the exact same/v1/messagesprotocol Claude does, accepts the same headers, returns the same SSE events. You pass your ClaudeOpus API key where you'd pass an Anthropic one.
Base URL:
https://api.claudeopus.proYou'll authenticate with a key that starts with sk-ant-co-. Keys are issued by administrators or resellers through the dashboard.
Quick start.
The fastest path is the interactive wizard. It detects your editors and writes the right config to each.
npx claudeopusIf you prefer a one-liner that pipes straight from the site, the shell scripts do the same thing non-interactively:
curl -fsSL https://claudeopus.pro/setup.sh | bashirm https://claudeopus.pro/setup.ps1 | iexIf you'd rather write config by hand, the rest of this page walks through the shape of every request and response.
Authentication.
Send your key in the x-api-key header, the same way the Anthropic SDK does. Authorization: Bearer works too.
curl https://api.claudeopus.pro/v1/messages \
-H "x-api-key: sk-ant-co-YOUR_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello, world."}]
}'Models.
Any Claude model ID Anthropic publishes is accepted. The current lineup:
| Tier | Model ID | Notes |
|---|---|---|
| Opus | claude-opus-4-6 | Latest reasoning model. |
| Sonnet | claude-sonnet-4-6 | Default for most prompts. |
| Haiku | claude-haiku-4-5 | Fast, low-cost, high-volume. |
You can also list models programmatically:
curl https://api.claudeopus.pro/v1/models \
-H "x-api-key: sk-ant-co-YOUR_KEY"Messages API.
Identical shape to Anthropic's /v1/messages. If it works with the Anthropic SDK, it works here unchanged.
{
"id": "msg_abc123",
"type": "message",
"role": "assistant",
"content": [{"type": "text", "text": "Hello, world."}],
"model": "claude-opus-4-6",
"stop_reason": "end_turn",
"usage": {
"input_tokens": 12,
"output_tokens": 6,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0
}
}Prompt caching
Pass a cache_control: {"type": "ephemeral"} block on any large system prompt or tool definition. Cached tokens never count against your budget — they're charged at roughly a tenth of the normal rate upstream, and we pass that through as zero.
Streaming.
Set "stream": true in your request body and read the response as SSE. The proxy pipes upstream events directly — no buffering, no aggregation, same events you'd get from Anthropic.
data: {"type":"message_start","message":{...}}
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}}
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":", world."}}
data: {"type":"content_block_stop","index":0}
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"}}
data: {"type":"message_stop"}IDE setup.
Every supported editor uses the same two facts: a base URL and an API key. The npx claudeopus wizard writes the right config for each — but here's what it sets, in case you want to do it yourself.
Claude Code (CLI)
In ~/.claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.claudeopus.pro",
"ANTHROPIC_AUTH_TOKEN": "sk-ant-co-YOUR_KEY",
"ANTHROPIC_MODEL": "claude-opus-4-6"
}
}Cursor
Open Settings → Models → Add custom OpenAI-compatible model. Use:
- — Base URL:
https://api.claudeopus.pro/v1 - — API Key: your ClaudeOpus key
- — Model name:
claude-opus-4-6
Windsurf, Cline, Roo Code
Use the wizard — each stores config in a slightly different place, and it handles them for you.
OpenAI-compatible.
For clients that only speak OpenAI's API, there's a compatibility layer at /v1/chat/completions. Requests are translated to and from Anthropic's format internally.
curl https://api.claudeopus.pro/v1/chat/completions \
-H "Authorization: Bearer sk-ant-co-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [{"role": "user", "content": "Hello"}]
}'Errors & limits.
Responses use Anthropic's error shape. Rate-limit and budget errors come back as a normal 200 with a text message explaining the situation — this keeps clients that don't handle 429s well from crashing.
- 401 — The key is missing, invalid, or disabled.
- 429 — Per-minute rate limit. Check the
retry-afterheader. - 400 — Malformed request. Usually a missing
modelormessagesfield. - window — A 200 with a budget-exceeded message means you've hit the 5-hour token window.
— Questions? Check the status page first, then reach your admin. —