Set up in under a minute.
One command configures every client below. Same endpoints, same request shape, same streaming — a base URL and a key are the only two things that change.
npx codemax-proRequires Node.js. macOS, Linux and Windows.
- base url
- https://api.codemax.pro
- endpoints
- /v1/messages · /v1/chat/completions · /v1/models
- models
- 4 tiers, one key
- clients
- 9 documented below
choose your client
automatic setup
One command. It asks for your key, writes the config and installs the CLI if it is missing. Requires Node.js.
$ npx codemax-pronpx codemax-proWrites the config for every client it finds, and installs Claude Code if it is missing.
npx codemax-pro doctorReports what is configured and what is fighting it — a stale variable, an old install, a policy.
npx codemax-pro resetRemoves only what this tool wrote. Anything you set yourself is left alone.
Add --only cli or --only desktop to configure one surface, or --yes to skip every prompt.
alternative: PowerShell script
$ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
irm https://api.codemax.pro/setup.ps1 | iex- Checks the key before writing anything
- Configures ~/.claude/settings.json
- Configures Claude Desktop, if installed
- Clears stale model variables
- Backs up every file it touches
- Installs Claude Code CLI if missing
Idempotent. Re-run any time to update your key or reconfigure — it merges into your existing config rather than overwriting it, and takes a backup first either way.
manual configuration
If you would rather write the file yourself. Two steps.
Configure environment
Create or edit %USERPROFILE%\.claude\settings.json:
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "sk-cp-your-api-key",
"ANTHROPIC_BASE_URL": "https://api.codemax.pro",
"ANTHROPIC_MODEL": "claude-opus-5",
"ANTHROPIC_SMALL_FAST_MODEL": "claude-haiku-4-5-20251001",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5-20251001",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
}
}Restart
Restart Claude Code or your IDE to apply the settings.
Web search and image understanding are included with every key. Point the client at https://api.codemax.pro and both work — no additional configuration.
claude code cli
The official Anthropic terminal client. Recommended.
Install Claude Code
Install the CLI globally via npm:
$ npm install -g @anthropic-ai/claude-codeRun setup and start coding
Run the one-liner. It asks for your API key, configures everything, and you are ready.
$ npx codemax-proalternative: PowerShell script
$ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
irm https://api.codemax.pro/setup.ps1 | iexAfter setup completes, run claude in any project directory to start coding.
- Checks the key against api.codemax.pro before 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 by other setups
- Backs up every file it touches before changing it
- Installs the Claude Code CLI if it is missing
claude code for vs code
The official extension reads the same configuration file as the CLI, so if you have already run the setup command there is nothing further to set.
Install the extension
Search for Claude Code in the VS Code Extensions panel (Ctrl+Shift+X) and install the one published by Anthropic.
Point it at codemax
Skip this if you already ran it for the CLI — it writes the one file both share.
$ npx codemax-proRestart VS Code
The extension reads %USERPROFILE%\.claude\settings.json at startup, so a reload is what applies it. Open the Claude Code panel and start a session.
One file, both surfaces — the CLI and the extension read the same settings, so changing your key once is enough for either.
claude desktop
The desktop app supports third-party inference: you point it at a gateway and it uses that instead of Anthropic. It keeps its own configuration — the settings file the CLI and the VS Code extension share does not apply here, so this is a separate step even if you have already set up Claude Code.
Install Claude Desktop
Download it from claude.ai/download and sign in once, so the app creates its config directory.
Point it at codemax
The same command. It detects the app and writes the desktop profile alongside everything else — add --only desktop to configure just this.
$ npx codemax-pro --only desktopRestart the app and pick a model
Quit Claude Desktop completely and open it again — the profile is read at launch. The model picker will list the four models below; Opus 5, Fable 5 and Sonnet 5 each appear twice, the second entry being the 1M context window.
Not sure it took? Run npx codemax-pro doctor — it reads the profile back and reports what the app will actually use.
- %LOCALAPPDATA%\Claude-3p\configLibrary
- Not ~/.claude/settings.json — that file is for Claude Code
- A per-user profile, so no administrator rights are needed
- npx codemax-pro reset removes it again
cline / roo code
Both extensions speak the Anthropic API, so both take the same two values.
Install extension
Search and install Cline from the VS Code Marketplace.
Open settings
Click the Cline icon in the sidebar, then the gear icon at the top.
Configure provider
| setting | value | |
|---|---|---|
| API Provider | Anthropic | |
| Base URL | https://api.codemax.pro | |
| API Key | sk-cp-your-api-key | |
| Model ID | claude-opus-5 |
Save and start
Click Save — you are ready to code.
Install extension
Search and install Roo Code from the VS Code Marketplace.
Configure provider
| setting | value | |
|---|---|---|
| Provider | Anthropic | |
| Base URL | https://api.codemax.pro | |
| API Key | sk-cp-your-api-key | |
| Model | claude-opus-5 |
cursor
Cursor reaches codemax through its OpenAI base URL override.
Open settings
Press Ctrl + , to open Cursor Settings.
Configure OpenAI override
Go to Models → OpenAI and enable Override OpenAI Base URL.
| setting | value | |
|---|---|---|
| Base URL | https://api.codemax.pro | |
| API Key | sk-cp-your-api-key |
Add model
Scroll to Model Names, click + Add Model, type:
claude-opus-5
Ensure it shows a green checkmark after adding.
You can add several models and switch between them: claude-opus-5, claude-sonnet-5.
windsurf
Cascade takes the same override, under its own setting names.
Open settings
Press Ctrl + , and search for openai.
Configure Cascade
| setting | value | |
|---|---|---|
| Cascade: OpenAI Base URL | https://api.codemax.pro | |
| Cascade: OpenAI API Key | sk-cp-your-api-key | |
| Cascade: Model | claude-opus-5 |
You can also run the Claude Code CLI setup in Windsurf's integrated terminal.
openclaw
Open-source Claude Code alternative. One command configures it.
Install OpenClaw
Install via npm globally:
$ npm install -g openclawRun the Codemax setup for OpenClaw
The setup script configures OpenClaw automatically — provider, models and API key:
$ npx codemax-openclaw-setupThe wizard asks for your API key and sets up everything for you.
Start coding
Open a new terminal, go to any project and run:
$ openclawThe script registers Codemax as a custom provider with all Claude models. Use /model inside OpenClaw to switch between Opus, Sonnet and Haiku.
opencode
Terminal coding agent. Same shape: install, run our setup, go.
Install OpenCode
Install via the official install script:
$ powershell -c "irm https://opencode.ai/install.ps1 | iex"Run the Codemax setup for OpenCode
The setup script configures OpenCode automatically — provider, models and API key:
$ npx codemax-opencode-setupThe wizard asks for your API key and sets up everything for you.
Start coding
Open a new terminal, go to your project and run:
$ opencodeThe script registers Codemax as the Anthropic provider in OpenCode. Use /models to switch between Opus, Sonnet and Haiku.
other clients
Anything that speaks the OpenAI API format takes these four values.
| setting | value | |
|---|---|---|
| API Base URL | https://api.codemax.pro | |
| API Key | sk-cp-your-api-key | |
| Model Name | claude-opus-5 | |
| API Type | OpenAI Compatible |
Works with Continue, Aider, Open Interpreter, LiteLLM, LibreChat, OpenClaw, and any other OpenAI-compatible tool.
models
Every tier is on the same key. Drop the literal id straight into the model field.
| model | tier | use | |
|---|---|---|---|
claude-opus-5 | Default | Best for everyday, complex tasks | |
claude-fable-5 | Most capable | Most capable for your hardest and longest-running tasks | |
claude-sonnet-5 | Efficient | Efficient for routine tasks | |
claude-haiku-4-5-20251001 | Fast | Fastest for quick answers |
Older Claude model names resolve to the nearest tier, so an existing integration keeps working without an edit.
api reference
For direct integration, without a client in the way. It is the Anthropic Messages API — anything already written against that works unchanged.
https://api.codemax.proEither header works, so an SDK written for either convention needs no adapter. Send one, not both.
| setting | value | |
|---|---|---|
| x-api-key | sk-cp-your-api-key | |
| Authorization | Bearer sk-cp-your-api-key | |
| anthropic-version | 2023-06-01 | |
| content-type | application/json |
| method | path | format | |
|---|---|---|---|
| POST | /v1/messages | Anthropic Messages API format | |
| POST | /v1/chat/completions | OpenAI Chat Completions format | |
| GET | /v1/models | List available models |
Swap in your key and paste it into a terminal. A reply means the base URL, the key and the model id are all correct — the whole of setup, checked in one line.
curl https://api.codemax.pro/v1/messages \
-H "x-api-key: sk-cp-your-api-key" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-opus-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",
"content": [
{ "type": "text", "text": "Hello there, good to meet you." }
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": { "input_tokens": 14, "output_tokens": 9 }
}Shape, not a transcript — the text and the counts are whatever your own call returns. Add "stream": true to the body for server-sent events instead, in the same format your client already parses.