Proxy Station
Sign Up

Connect your tool

Point the editor or CLI you already use at this endpoint. No app to install — a base URL, a key, and one command to prove it works.

Two base URLs, one key

OpenAI-compatiblethe client appends /chat/completions
https://proxystation.co/v1
Anthropic-compatiblethe client appends /v1/messages itself
https://proxystation.co

The difference is not cosmetic. OpenAI-shaped clients append /chat/completions to what you give them, so they need the versioned path. Claude Code and the Anthropic SDK append /v1/messages themselves, so they need the bare origin. Getting it backwards produces /v1/v1/messages, which answers 404 — and most clients report that as a connection failure rather than a wrong path.

Terminal

Claude Code

https://proxystation.co

Install

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

Configure~/.claude/settings.json

export ANTHROPIC_BASE_URL=https://proxystation.co
export ANTHROPIC_AUTH_TOKEN=sk-XXXXXXXXXXXXXXXX

# Persist it in ~/.claude/settings.json instead of your shell profile:
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://proxystation.co",
    "ANTHROPIC_AUTH_TOKEN": "sk-XXXXXXXXXXXXXXXX"
  }
}

Verify before you open it

curl -X POST "https://proxystation.co/v1/messages" \
  -H "Authorization: Bearer sk-XXXXXXXXXXXXXXXX" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":8,"messages":[{"role":"user","content":"ok"}]}'

Expect: A body starting {"id":"msg_… — the URL and the credential both work.

  • No /v1 in the base URL. Claude Code appends /v1/messages itself; adding it yields /v1/v1/messages, which this endpoint answers 404.
  • ANTHROPIC_AUTH_TOKEN and ANTHROPIC_API_KEY both work here — tested. Prefer AUTH_TOKEN: API_KEY triggers a one-time approval prompt in interactive sessions, and if it was ever declined the key is ignored with no error.
  • A value in ~/.claude/settings.json BEATS a shell export, which is the opposite of what most people expect. A stale entry there will quietly override a fresh export.
  • Setting only the base URL does not switch billing. Without a credential variable a saved claude.ai login stays active — run /status inside the CLI and check it names an auth token, not a login method.

Codex CLI

https://proxystation.co/v1

Install

npm install -g @openai/codex

Configure~/.codex/config.toml

# 1. Put the key in your shell, under the name config.toml will reference:
export PROXYSTATION_API_KEY=sk-XXXXXXXXXXXXXXXX

# 2. ~/.codex/config.toml
model_provider = "proxystation"
model = "gpt-5.6-luna"

[model_providers.proxystation]
name = "proxystation"
base_url = "https://proxystation.co/v1"
env_key = "PROXYSTATION_API_KEY"
wire_api = "responses"

Verify before you open it

curl -X POST "https://proxystation.co/v1/responses" \
  -H "Authorization: Bearer sk-XXXXXXXXXXXXXXXX" \
  -H "content-type: application/json" \
  -d '{"model":"gpt-5.6-luna","input":"ok"}'

Expect: A body with "status":"completed" — the Responses API is what Codex speaks.

  • wire_api accepts only "responses". Chat Completions support was removed from Codex; a config that names it will not start.
  • env_key names an environment variable, it does not hold the key. The string here must match the variable you exported, or Codex reports no credential.
  • The base URL keeps /v1 here, unlike Claude Code above. Same key, same host, different string.

aider

https://proxystation.co/v1

Install

python -m pip install aider-install && aider-install

Configure~/.aider.conf.yml

export OPENAI_API_BASE=https://proxystation.co/v1
export OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXX

aider --model openai/gpt-5.6-luna

Verify before you open it

curl "https://proxystation.co/v1/models" -H "Authorization: Bearer sk-XXXXXXXXXXXXXXXX"

Expect: A JSON list under "data" — aider reads the same catalogue.

  • OPENAI_API_BASE, not OPENAI_BASE_URL. aider passes the value to litellm, which uses the API_BASE name.
  • The model needs the openai/ prefix so litellm routes it to the OpenAI-compatible client rather than guessing the vendor from the name.

Editors and extensions

Continue

https://proxystation.co/v1

Install

Install the Continue extension from the VS Code or JetBrains marketplace.

Configure~/.continue/config.yaml

# ~/.continue/.env
PROXYSTATION_API_KEY=sk-XXXXXXXXXXXXXXXX

# ~/.continue/config.yaml
models:
  - name: Proxy Station
    provider: openai
    model: gpt-5.6-luna
    apiBase: https://proxystation.co/v1
    apiKey: ${{ secrets.PROXYSTATION_API_KEY }}

Verify before you open it

curl -X POST "https://proxystation.co/v1/chat/completions" \
  -H "Authorization: Bearer sk-XXXXXXXXXXXXXXXX" \
  -H "content-type: application/json" \
  -d '{"model":"gpt-5.6-luna","messages":[{"role":"user","content":"ok"}],"max_tokens":8}'

Expect: A body with "choices" — the same call the extension makes.

  • apiBase keeps /v1 even when you set provider: anthropic. Continue appends only the method path, unlike the Anthropic SDK.
  • The same config.yaml is read by the VS Code extension, the JetBrains plugin and the cn CLI — configure once.

Cline

https://proxystation.co/v1

Install

Install the Cline extension from the VS Code marketplace.

Configure~/.cline/data/settings/providers.json

In the extension: Settings → API Provider → OpenAI Compatible

  Base URL   https://proxystation.co/v1
  API Key    sk-XXXXXXXXXXXXXXXX
  Model ID   gpt-5.6-luna

The CLI and the extension share ~/.cline/data/settings/providers.json.

Verify before you open it

curl -X POST "https://proxystation.co/v1/chat/completions" \
  -H "Authorization: Bearer sk-XXXXXXXXXXXXXXXX" \
  -H "content-type: application/json" \
  -d '{"model":"gpt-5.6-luna","messages":[{"role":"user","content":"ok"}],"max_tokens":8}'

Expect: A body with "choices" before you touch the extension at all.

  • There is no VS Code settings.json key for this. Settings named cline.openAiCompatible.* do not exist — configure it in the extension panel.
  • Choose the "OpenAI Compatible" provider, not "OpenAI". The plain OpenAI provider ignores a custom base URL.

Cursor

https://proxystation.co/v1

Install

Cursor itself is the editor; nothing extra to install.

Configure

Settings → Models → API Keys

  Override OpenAI Base URL    https://proxystation.co/v1
  OpenAI API Key              sk-XXXXXXXXXXXXXXXX

Then press Verify.

Verify before you open it

curl -X POST "https://proxystation.co/v1/chat/completions" \
  -H "Authorization: Bearer sk-XXXXXXXXXXXXXXXX" \
  -H "content-type: application/json" \
  -d '{"model":"gpt-5.6-luna","messages":[{"role":"user","content":"ok"}],"max_tokens":8}'

Expect: A body with "choices". Cursor keeps the key in secure storage, so this curl is the only way to check the endpoint separately from the editor.

  • No environment variable and no config file. The key lives in Cursor’s secure storage, so there is nothing to edit by hand and nothing to commit by accident.
  • Add the model id to the model list first, or the override has nothing to apply to.

SDKs

OpenAI SDK

https://proxystation.co/v1

Install

pip install openai · npm install openai

Configure

export OPENAI_BASE_URL=https://proxystation.co/v1
export OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXX

# or in code
from openai import OpenAI
client = OpenAI(api_key="sk-XXXXXXXXXXXXXXXX", base_url="https://proxystation.co/v1")

Verify before you open it

curl "https://proxystation.co/v1/models" -H "Authorization: Bearer sk-XXXXXXXXXXXXXXXX"

Expect: A JSON list under "data".

  • OPENAI_BASE_URL ends in /v1. The SDK appends /chat/completions to whatever you give it.

Anthropic SDK

https://proxystation.co

Install

pip install anthropic · npm install @anthropic-ai/sdk

Configure

export ANTHROPIC_BASE_URL=https://proxystation.co
export ANTHROPIC_API_KEY=sk-XXXXXXXXXXXXXXXX

# or in code — note the base URL carries no /v1
from anthropic import Anthropic
client = Anthropic(api_key="sk-XXXXXXXXXXXXXXXX", base_url="https://proxystation.co")

Verify before you open it

curl -X POST "https://proxystation.co/v1/messages" \
  -H "x-api-key: sk-XXXXXXXXXXXXXXXX" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":8,"messages":[{"role":"user","content":"ok"}]}'

Expect: A body starting {"id":"msg_…

  • No /v1 here. The SDK adds it, and a base URL that already carries one produces /v1/v1/messages — a 404.

Every configuration on this page was checked against this endpoint on 2026-08-30, and every verify command above was run. Tools change: Codex dropped Chat Completions support this year. If one of these stops matching, the verify command is what tells you.

The station also answers on regional entry points. They work with the same key, but the uptime and latency published on the status page are measured against this origin only — those numbers do not describe a different entry point.