How to use it.

Everything you need to wire up ClaudeOpus — base URLs, authentication, models, streaming, and the IDEs that speak the Anthropic API out of the box.

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:

endpoint
https://api.claudeopus.pro

You'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.

any OS with Node
npx claudeopus

If you prefer a one-liner that pipes straight from the site, the shell scripts do the same thing non-interactively:

macOS / Linux
curl -fsSL https://claudeopus.pro/setup.sh | bash
Windows (PowerShell)
irm https://claudeopus.pro/setup.ps1 | iex

If 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.

request
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:

Opusclaude-opus-4-6Latest reasoning model.
Sonnetclaude-sonnet-4-6Default for most prompts.
Haikuclaude-haiku-4-5Fast, low-cost, high-volume.

You can also list models programmatically:

GET /v1/models
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.

response
{
  "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.

stream
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:

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.

/v1/chat/completions
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-after header.
  • 400 — Malformed request. Usually a missing model or messages field.
  • 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. —