Docs
Two minutes to your first token.
Three values — base URL, API key, model id. Every client on this page wants them. Find yours below, paste them in, restart it.
https://api.ultracode.insk-uc-your-api-keyclaude-opus-5-5choose a client
Find yours. Read one guide. Ignore the other eight.
The first five have a setup script — install, run, restart. The last four are a short form you fill in by hand.
the command does it
The setup command writes the same configuration you would write yourself. Run it, or skip it and edit the file — the result on disk is identical either way.
the command
One command, every client it finds.
Open a terminal anywhere and run it.
It asks for your key, checks it, looks for clients installed on this machine, writes each one’s configuration and keeps a copy of whatever it replaced. Node.js is the only prerequisite.
PowerShell says running scripts is disabled? Run npx.cmd ultracode-live instead — the same command through cmd’s shim.
what it does
- Checks the key against
api.ultracode.inbefore writing anything - Writes
~/.claude/settings.json— the CLI and the VS Code extension both read it - Writes a Claude Desktop profile, if the app is installed
- Clears stale model variables left behind by other setups
- Backs up every file it touches before changing it
- Installs the Claude Code CLI if it is missing
Add --only cli or --only desktop to configure a single surface, or --yes to take every default without being asked.
the same thing, in powershell
An alternative to the command above, if you would rather run a script.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser irm https://api.ultracode.in/setup.ps1 | iex
Or take the file: setup-ultracode.ps1
Safe to re-run. It merges rather than replacing, and backs up whatever it touches — so changing your key later is one more run.
Nothing is written until the key has answered. A refused key leaves the machine exactly as it found it.
the file
Or write the file yourself.
Two steps, and no tool between you and the configuration.
Write the settings file
Create or edit
%USERPROFILE%\.claude\settings.jsonso it reads:{ "env": { "ANTHROPIC_AUTH_TOKEN": "sk-uc-your-api-key", "ANTHROPIC_BASE_URL": "https://api.ultracode.in", "CLAUDE_CODE_OAUTH_TOKEN": "sk-uc-your-api-key", "CLAUDE_CODE_SUBSCRIPTION_TYPE": "max", "CLAUDE_CODE_REMOTE": "1" } }Restart
Claude Code and any IDE holding it open read this file at startup, so a restart is what applies it.
Web search, image understanding, PDF reading and extended thinking come with every key. Point the client at the base URL and all four work — nothing further to switch on.
These five have a setup script. What differs is which script, and where each one keeps its configuration.
claude code cli
The official terminal client.
Two commands and you are coding.
Install Claude Code
Globally, from npm.
Run the setup
It asks for your key and writes the configuration for you.
Start
Run
claudein any project directory.
The full account of what the setup writes is section 01. This guide only sequences it.
claude code · vs code
The extension reads the CLI's file.
If the setup has already run on this machine, step two is nothing.
Install the extension
Search for
Claude Codein the Extensions panel (Ctrl+Shift+X) and install the one published by Anthropic.Point it here
Skip this if you already ran it for the CLI — it writes the one file the two of them share.
Reload VS Code
The extension reads
%USERPROFILE%\.claude\settings.jsonat startup. Open the Claude Code panel and start a session.
One file, both surfaces. Changing your key once is enough for either of them.
claude desktop
The app keeps its own profile.
This is a separate step even if Claude Code is already pointed here.
The desktop app supports third-party inference: you give it a gateway and it uses that instead. It keeps its own configuration, separate from the file the CLI and the VS Code extension share.
Install Claude Desktop
Download it from claude.ai/download and sign in once, so the app creates its configuration directory.
Point it here
The plain setup command detects the app and writes the desktop profile alongside everything else;
--only desktopwrites just this one.Quit, reopen, pick a model
Quit the app completely rather than closing the window — the profile is read at launch. The model picker will then list the four models in section 13.
%LOCALAPPDATA%\Claude-3p\configLibraryNot ~/.claude/settings.json — that file belongs to Claude Code.
Not sure it took? npx ultracode-live doctor reads the profile back and reports what the app will actually use.
A per-user profile, so no administrator rights are involved, and npx ultracode-live reset removes it again.
openclaw
An open-source alternative CLI.
Install it, run its setup, start it.
Install OpenClaw
Globally, from npm.
Run the setup
A wizard: it asks for your key, then writes the provider, the models and the key into OpenClaw’s own configuration.
Start
Open a fresh terminal, move into any project and run it.
The script registers UltraCode as a custom provider carrying every Claude model. Type /model inside OpenClaw to move between tiers.
opencode
A terminal agent, same three moves.
Install it, run its setup, start it.
Install OpenCode
With the project’s own install script.
Run the setup
The same wizard shape: your key, then the provider, models and key written into OpenCode’s configuration.
Start
Open a fresh terminal, move into your project and run it.
The script registers UltraCode as the Anthropic provider in OpenCode. Type /models to move between tiers.
These four have no setup script. Each wants the same address and the same key; what changes is which provider slot the pair goes into, and what that client calls the fields.
cline · roo code
Two extensions, one set of values.
Both speak the Anthropic API, so both take the Anthropic provider.
Install the extension
ClineorRoo Code, from the VS Code Marketplace.Open its provider settings
In Cline: the icon in the sidebar, then the gear at the top. In Roo Code: its own provider settings.
Fill in four fields
API ProviderAnthropicBase URLhttps://api.ultracode.inAPI Keysk-uc-your-api-keyModel IDclaude-opus-5-5Save
Click Save. That is the whole of it.
Roo Code takes the same four in the same order under slightly shorter names: Provider, Base URL, API Key and Model.
cursor
Cursor goes through its OpenAI override.
The override carries the pair; you name the model yourself.
Open Cursor Settings
Ctrl + ,, then go to
Models→OpenAIand turn on Override OpenAI Base URL.Fill in the pair
Base URLhttps://api.ultracode.inAPI Keysk-uc-your-api-keyAdd the model by name
Scroll to Model Names, click
+ Add Modeland type the id exactly.model idclaude-opus-5-5
You can add more than one and switch between them — claude-opus-5-5 and claude-sonnet-5, for instance.
windsurf
Cascade, under its own setting names.
The same override, spelled the way Cascade spells it.
Open settings
Ctrl + ,, then search for
openai.Fill in three settings
Cascade: OpenAI Base URLhttps://api.ultracode.inCascade: OpenAI API Keysk-uc-your-api-keyCascade: Modelclaude-opus-5-5
The Claude Code setup command also runs in Windsurf’s integrated terminal, if you would rather not type any of this.
sdks · anything else
An SDK, or any chat-completions client.
Nothing in your code has to change — only the two values it reads from the environment.
an anthropic sdk
ANTHROPIC_BASE_URL=https://api.ultracode.in ANTHROPIC_AUTH_TOKEN=sk-uc-your-api-key
a client that speaks the openai format
Four values and nothing else. The route it will call is /v1/chat/completions, which is section 14.
https://api.ultracode.insk-uc-your-api-keyclaude-opus-5-5OpenAI CompatibleThe Anthropic SDKs read the host and the credential from the environment, so the pair below is the whole edit. Every call you have already written keeps compiling and keeps streaming.
Continue, Aider, Open Interpreter, LiteLLM, LibreChat, OpenClaw — and anything else built on the same request format.
Three routes, four model ids, and the HTTP surface underneath every client above.
the wire
Three routes. You have already written against all of them.
Nothing here is a translation layer you have to learn.
/v1/messagesAnthropic Messages API format
/v1/chat/completionsChat-completions format
/v1/modelsthe models this key may ask for
message_startthe envelope: id, model, role, usage so farcontent_block_startone per block — text, tool use, thinkingcontent_block_delta×nthe tokens, as they are producedcontent_block_stopthat block is closedmessage_deltastop reason and the final usage countmessage_stopthe turn is overand the stream comes back in the same order
The paths, the shapes and the order of the events are the ones in the Anthropic reference, which means the parser you wrote for the official endpoint is the parser you keep.
the four tiers
Four models, one key.
Every tier answers on the same key.
Put the id into the client’s model field exactly as it is printed here. There is no second endpoint for the bigger model and no second key for the cheaper one — the tier is a string in the request body.
Opus 5.5
default1,000,000 tokens of contextWhole-repo work. Long refactors that touch forty files, and agentic runs that have to hold the plan from the first tool call to the last.
claude-opus-5-5Fable 5.1
thinks longest1,000,000 tokens of contextThinks the longest of the four. Reach for it when being wrong is expensive — a migration plan, a race nobody can reproduce, a schema you pick once.
claude-fable-5-1Sonnet 5
everyday1,000,000 tokens of contextThe middle you will actually live in. Reviews, edits, test scaffolding and the glue code that makes up a working day.
claude-sonnet-5Haiku 4.5
volume200,000 tokens of contextBuilt for the tight loop. Classification, extraction, routing and labelling — the calls you make ten thousand times and never read one by one.
claude-haiku-4-5-20251001on every plan, nothing to wire
- Live web searchthe model looks things up mid-turn
- Image understandingscreenshots and diagrams in the same content array
- PDF and document readingthe file goes in the request
- Extended thinkingask for more reasoning on the turns that deserve it
Server-side, on all four tiers, on every plan including the trial. No flag, no second vendor, no tool schema to hand-write.
Older Claude model names resolve to the nearest tier, so an integration written before you moved keeps working without an edit.
The settings file in section 02 pins Haiku by its dated name, claude-haiku-4-5-20251001. Same tier, written the long way.
http
When there is no client in the way.
Nothing here is a wrapper — it is the API your client was already calling.
https://api.ultracode.inauthentication
Send one of the first two, not both — an SDK written for either convention needs no adapter here.
sk-uc-your-api-keyBearer sk-uc-your-api-key2023-06-01application/jsonHeader names are case-insensitive. The values are not.
your first request
Put your key in and paste it into a terminal. A reply proves the address, the key and the model id are all correct — the whole of setup, checked in one line.
curl https://api.ultracode.in/v1/messages \
-H "x-api-key: sk-uc-your-api-key" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-opus-5-5",
"max_tokens": 256,
"messages": [{ "role": "user", "content": "Say hello in five words." }]
}'what comes back
{
"id": "msg_01Xa7bK...",
"type": "message",
"role": "assistant",
"model": "claude-opus-5-5",
"content": [{ "type": "text", "text": "Hello there, good to meet you." }],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": { "input_tokens": 14, "output_tokens": 9 }
}It is the Anthropic Messages API. Anything already written against that runs here unchanged.
The response below is a shape, not a transcript. Add "stream": true to the body for server-sent events, in the format your client already parses.
Two commands nobody needs until they do.
doctor · reset
What the machine actually has.
From the outside, a stale variable and a bad key look identical.
An old install, a leftover environment variable or a company policy pointing somewhere else all fail the same way a refused key does. The first command reads back what is actually configured and names whatever is fighting it. The second puts the machine back the way it was.
npx ultracode-live doctornpx ultracode-live resetStill stuck? Section 14 has a single curl that tells you whether the fault is the configuration or the key.
reset removes only what the setup wrote. Anything you set by hand is left exactly where you put it.
still not answering
Send the doctor output and we will read it.
Run the first command in section 15, copy what it prints, and mail it over. It names the file it read, the value it found and whatever else on the machine is overriding it — and shows only the start of your key.