Most agent tooling built in the last few years speaks the OpenAI Chat Completions protocol. That was a deliberate industry choice, and it means switching where your tool gets its models is usually a one-line change: the base URL.
The universal pattern
Every OpenAI-compatible client has two knobs you care about: the endpoint base and the API key. Point the first at AtmoRouter, paste a key from the dashboard, and you are done — the model catalogue behind it is the same model string you pass today.
pythonfrom openai import OpenAI
client = OpenAI(
base_url="https://atmorouter.dev/v1",
api_key="ar-xxxxxxxxxxxx",
)
resp = client.chat.completions.create(
model="zai/glm-5.3",
messages=[{"role": "user", "content": "Say hello in one word."}],
)
print(resp.choices[0].message.content)The same request in plain HTTP:
bashcurl https://atmorouter.dev/v1/chat/completions \
-H "Authorization: Bearer ar-xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "zai/glm-5.3",
"messages": [{"role": "user", "content": "Say hello in one word."}]
}'Tool-by-tool
- Cursor — Settings → Models → add an OpenAI-compatible provider with base URL
https://atmorouter.dev/v1and your AtmoRouter key. The model list populates from the catalogue. - Cline / Roo Code — choose "OpenAI Compatible" as the provider, paste the same base URL and key, then pick a model id from the models page.
- Continue — in
config.json, setapiBasetohttps://atmorouter.dev/v1,apiKeyto your key, and use any AtmoRouter model id as thetitle/model. - Codex CLI and other agents — anywhere a tool asks for an OpenAI base URL and key, the same pair works.
Claude-flavored tooling is covered too: an Anthropic-compatible Messages endpoint serves the entire catalogue, so tools wired for the Anthropic SDK run unchanged after the base URL swap.
Choosing a model for coding work
For day-to-day agent loops, the economics favor strong mid-tier models over flagships: the quality gap in routine edits is small and the price gap is not. Our model pages list live per-token pricing next to the official rate, so the tradeoff is a number you can check rather than a vibe.
Two practical notes from running this setup ourselves:
- 1.Streaming works everywhere — server-sent events on both protocols, which most agents need for responsiveness.
- 2.Failed requests are never billed — retries during long agent sessions do not quietly drain the balance.
Verify it works
bashcurl https://atmorouter.dev/v1/models \
-H "Authorization: Bearer ar-xxxxxxxxxxxx"That returns the catalogue your key can use. If the list comes back, everything else will.