Warp

Integrations

Tool integrations

Warp accepts OpenAI Chat Completions, Anthropic Messages and OpenAI Responses, so an existing client works by changing a base URL and a key. All three run the same gateway, so routing, savings, guardrails and the audit trail apply identically.

Which endpoint

Most tools use the OpenAI format. Claude Code speaks only Anthropic Messages and Codex speaks only OpenAI Responses, so each gets a dedicated endpoint — no converter to install.

FormatEndpointAuth headerTools
OpenAIhttps://api.warp.inc/v1Authorization: BearerCursor, OpenClaw, Hermes, AI SDK, OpenAI SDK
Anthropic Messageshttps://api.warp.incx-api-keyClaude Code, Anthropic SDK
OpenAI Responseshttps://api.warp.inc/v1Authorization: BearerCodex CLI

Setup

Pick the tool you use and its own setup appears. The format, the endpoint and the config path are filled in already.

This tool speaks Anthropic Messages and nothing else → https://api.warp.inc/v1/messages

Have the agent do it

Paste this into the tool itself — it applies the change and sends a real request to confirm.

Claude Code · agent prompt
Point Claude Code at Warp as its model provider.

- Base URL (not the full request path): https://api.warp.inc
  ← Claude Code appends /v1/messages itself — do not include it
- API key: sk-warp-...  ← replace with my key
- Model: warp/code
- Config lives at: ~/.claude/settings.json

Put it in that config file rather than a shell export — an export lives only in
the tab it was typed in, which is a common way for this to silently not apply. When you're done run `claude -p "/status"` and confirm it took.

Or set it up by hand

Install

terminal
npm install -g @anthropic-ai/claude-code

Configure

~/.claude/settings.json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.warp.inc",
    "ANTHROPIC_API_KEY": "sk-warp-...",
    "ANTHROPIC_MODEL": "warp/code",
    "ANTHROPIC_SMALL_FAST_MODEL": "warp/auto"
  }
}
Create an API key

Verify

terminal
claude
# then, inside Claude Code:
/status

You should see — Anthropic base URL: https://api.warp.inc · Model: warp/code

Not listed? Pick the tool with the same format, then change the tool name and config path in the prompt.

Routing

warp/auto and warp/code hand model choice over wholesale. The alternative is to anchor the model you already use as the quality ceiling and let only the easy requests route down — add :auto to the model name your config already had. A dial goes in the same place.

model name
anthropic/claude-sonnet-5        # always this model, no routing
anthropic/claude-sonnet-5:auto   # route; never above claude-sonnet-5
anthropic/claude-sonnet-5:balanced
anthropic/claude-sonnet-5:max-savings
warp/auto:balanced               # a router; a dial needs an anchor, so this one is ignored

Hard requests are then always answered by claude-sonnet-5, and only easy ones route down. The anchor is a ceiling, not a selection — nothing climbs above it. If a lower tier returns something unusable, it is automatically re-served once from the tier above (on by default).

Tools that cannot build a request body

A model name is something every tool lets you type, so tools that cannot build a custom request body — Claude Code, Cursor — use this exactly as everything else does. See Anchored routing.

Anthropic Messages directly

For clients implemented directly against the Messages format. Routing options are identical to the OpenAI endpoint — see Warp router.

terminal
curl https://api.warp.inc/v1/messages \
  -H "x-api-key: $WARP_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "warp/auto",
    "max_tokens": 1024,
    "messages": [{ "role": "user", "content": "Hello" }]
  }'

Unsupported fields

These two fields are ignored when present. Accepting a value that is never applied would misrepresent what the endpoint does, so it is stated here instead.

FieldWhy
thinkingThe gateway's internal response shape has no field for reasoning content, so an upstream trace cannot be carried back even when the model produces one. Thinking blocks in your history are accepted and ignored.
cache_controlThere is no path to carry prompt-cache markers upstream, and a request may route to a model that is not Anthropic's.

top_k is forwarded. This table claimed for a while that it had no counterpart, which was not true — the gateway was dropping a knob the target model would have taken.

POST /v1/messages/count_tokens returns an estimate. It is computed before the request resolves to a model, so there is no single tokenizer to be exact against.