HomeGuides → Moving from OpenRouter

Moving from OpenRouter

Both speak the OpenAI format, so the migration itself is small. The parts worth planning are the model names, the features that do not carry over, and how you verify the bill.

The code change

Two strings, assuming you already use the OpenAI SDK:

client = OpenAI(
    api_key="YOUR_APICLAN_KEY",
    base_url="https://apiclan.us/v1",
)

If you are on Claude Code or the Anthropic SDK, the base URL is https://apiclan.us with no /v1 — those clients append /v1/messages themselves. Getting that backwards produces a 404 that never reaches the gateway and therefore never appears in your usage logs, which is the single most common false alarm during a migration.

Model strings

OpenRouter namespaces models as vendor/model. Here the model string is the plain provider name, so anthropic/claude-sonnet-5 becomes claude-sonnet-5. Strip the prefix and check the exact spelling against the price list — some names use hyphens where the vendor's marketing uses dots. claude-fable-5-1 is hyphenated, not claude-fable-5.1.

Keys here are bound to one group, and a group carries one family. A key that works for Claude models will be refused by image models. If a model 404s while others on the same key succeed, that is a group boundary and not an outage.

What does not carry over

Their published fee terms and the price arithmetic between the two are set out in APICLAN vs OpenRouter, with the numbers quoted from their own documentation rather than paraphrased.

Running both while you evaluate

Do not cut over in one commit. Put the base URL and key in environment variables, point a single low-risk workload at the new endpoint, and leave everything else where it is. A week of real traffic on one service tells you more than any benchmark.

When you compare bills, compare cost per unit of work rather than per token. Prompt caching moves per-call cost by a factor of three on the same model — on our own traffic the median claude-sonnet-5 call costs 0.0087 credits and the mean is 0.0255, and the entire gap is cache behaviour. If one side of your comparison caches more effectively than the other, per-token pricing will not show it and the invoice will.

Start using it

No subscription, no monthly minimum, no sales call. Top up with USDT and spend what you use — 1 USDT gives you 2 credits of API balance.

Read the 30-second quickstart

Prices quoted on this page are regenerated automatically from live billing data. Third-party terms are quoted from that party's own published documentation.