Migrate

Migrate from OpenRouter

If you're on OpenRouter, switching to Ollima is a base URL change. We adopt OpenRouter's HTTP-Referer + X-Title attribution convention, accept the same OpenAI-compat request shapes, and add a few things OpenRouter doesn't have. Routing through us tends to be 2-7× cheaper for the same model on the same provider.

The one-line change

client = OpenAI(
  base_url="https://api.ollima.com/v1",  # was https://openrouter.ai/api/v1
  api_key="sk-t0-…",
)

# Your existing default_headers carry over verbatim.

The headers you already set keep working

OpenRouter's customer convention is HTTP-Referer + X-Title for app attribution. We capture these headers exactly the same way — you don't change a thing.

client = OpenAI(
  base_url="https://api.ollima.com/v1",
  api_key="sk-t0-…",
  default_headers={
    "HTTP-Referer": "https://your-app.com",
    "X-Title": "your-app-name",
  },
)

They show up in Dashboard → Logs under the App column. See App attribution.

Model name mapping

Most OpenRouter slugs map to an Ollima alias:

OpenRouter slugOllima alias (recommended)
deepseek/deepseek-chatdeepseek-v4
qwen/qwen-2.5-coder-32b-instructqwen3-32b
z-ai/glm-4.6glm-5.1
minimaxai/minimax-m1minimax-m3

If we don't have an alias for a model you use, set up a custom one on the dashboard's Routes page — alias any short name to one or more upstream targets with failover.

What you keep

Where we differ

FeatureOpenRouterOllima
BillingUSD, prepaid creditsINR + GST invoices, post-paid via Razorpay (USD on Enterprise)
BYOK fee5% of provider costFlat ₹0.10 per 1k output tokens
Per-key spend capWallet-level onlyPer-key hard cap, settable at mint time
Per-key time-series chartAggregate Activity pagePer-key line chart on Usage page — find the runaway key visually
App attributionX-Title + HTTP-RefererX-Title + HTTP-Referer (identical convention)
Auto-routerYes — NotDiamond / Fusion / ParetoNot yet — on roadmap, see GitHub
Model marketplace UIYes/models page with INR pricing
Provider fallback chainsYes via provider.orderNot yet in request body; configurable per-route on dashboard
Compression layerNoPhase-1 observability shipped; active compression rolling out

Why customers move

The structural reasons we hear most: