Guides / openrouter api cost
OpenRouter API cost, where one model has several prices
OpenRouter routes a single model to several upstream providers, and they don't all charge the same. Claude Opus 4.7 bills $5.00 or $5.50 per million input depending on which one served the call, a 10% spread you don't pick. Culpa, a local-first LLM cost, margin, and forecast ledger, prices each call by the route that served it.
Why this happens
A rate card implies one price per model. On a routing layer it's a range. OpenRouter lists each model against several upstream providers, most at the same rate the model costs direct and some at a premium of about 10%, and the request goes wherever availability sends it unless you pin a provider. The cached read does pass through at the direct rate, so caching isn't what routing costs you. What it costs you is the difference between the cheapest listed provider and whichever one actually served the call.
What this usually looks like
- Your routed cost per call moves month to month with no change on your side.
- Nobody can say which upstream provider served your traffic last week.
- A spend forecast built on the headline rate reads low by a few percent and nobody can explain the gap.
- Routed spend and direct quotes look identical on paper and differ on the invoice.
Free, no card, no account
Run the free Cost Leak Scan
It shows your most expensive conversation before you install anything.
Mistakes that cost the most
| Mistake | Why it hurts | Do instead |
|---|---|---|
| Treating an aggregator's headline rate as the price you'll pay. | The headline is the cheapest listed provider, and your traffic doesn't always land there. | Price against the dearest listed provider, and treat anything better as upside. |
| Leaving provider routing unpinned on high-volume traffic. | Availability decides your rate, so cost per call drifts with no deploy behind it. | Pin the provider on your stable path and let routing float only on long-tail work. |
| Assuming a routed listing loses the cached rate. | It doesn't on the Anthropic re-listings, so a decision made on that basis rests on a wrong fact. | Read the cache-read column per provider row, and confirm it against your own routed invoice. |
Run this check tonight
- For each routed model, list every upstream provider and its three rates. Note the spread.
- Check which providers actually served your calls last month, and in what share.
- Reprice last month at the dearest listed provider. That's your realistic worst case.
- Confirm whether your cached reads are billing at the cached rate on the routed path.
- Decide, per workload, whether the routing flexibility is worth the price variance it carries.
The same Opus workload on two upstream providers
Illustrative example
300,000 calls a month on Claude Opus 4.7 through OpenRouter, each sending a 5,000-token repeated prompt at an 80% cache hit rate and returning 400 tokens. OpenRouter lists this model at $5.00 input, $25.00 output and $0.50 cache read on most providers, and at $5.50, $27.50 and $0.55 on others. Volumes are modelled.
Routing sits level with direct on the standard provider and 10% above it on the premium one. The variable deciding which you pay is availability, and it sits outside your control unless you pin.
Every number, with its confidence and source
| Figure | What it means | Confidence | Source |
|---|---|---|---|
| $5.00 / $25.00 per million | OpenRouter Claude Opus 4.7 standard upstream rate, with a $0.50 cache read matching the direct route | calculated | OpenRouter's Claude Opus 4.7 model page, rendered and read 2026-08-01. Level with the anthropic/claude-opus-4-7 price book row at $0.005 and $0.025 per 1k, effective 2026-07-02. |
| $5,100 to $5,610 | modelled monthly cost of one repeated-prompt workload on the standard against the premium upstream provider | estimated | Both endpoints from the teardown arithmetic at rates read from OpenRouter's Claude Opus 4.7 page on 2026-08-01. A range because call volume and cache hit rate are modelled. |
What a generic answer can’t know
An aggregator reports what it billed in total. Which upstream provider served each call, what share of your month landed on the dearer one, and what that cost against the headline are answerable only per call. Culpa records them on your infrastructure, keeps your prompts and responses there, and counts the calls to run your plan.
Questions founders ask next
Does OpenRouter lose the cached input rate?
No. The Anthropic re-listings pass the cached read through at the direct rate, $0.50 per million on Opus 4.7 and $0.30 on Sonnet 4.6, read from OpenRouter's own model pages on 2026-08-01. Culpa's price book had no cached rate for those rows until migration 0034 seeded them on 2026-08-03, which was a gap in the book rather than a fact about the platform.
Why does the same model have several prices on OpenRouter?
Because several upstream providers serve it and they price differently. Most match the direct rate and some sit about 10% above. Your request goes wherever availability sends it unless you pin a provider explicitly.
When does routing through an aggregator make sense?
For exploratory work, failover across providers, and long-tail models you wouldn't otherwise integrate. It makes least sense where a few percent of unit cost matters more than availability, because that spread is exactly what routing takes.
On your infrastructure
Culpa runs on your infrastructure. Your prompts and responses never leave it. Culpa counts calls to run your plan, and it fails open, so if it ever breaks your app keeps running.
How Culpa works
Find the culprit. Not just the total.
Your dashboard shows what you spent. It stops short of who spent it. Culpa shows the conversation, the user and the feature behind it.
Your prompts stay local.
Culpa runs on your own infrastructure. What you send to a model reaches us at no point.
Every dollar has a name.
Follow any charge to the conversation, the user, the feature and the customer behind it.
See the bill before it lands.
Cost your next feature before you ship it. You get the likely bill and the worst case, at best, median, p90 and p99.
Three steps to your first answer.
Change one base URL.
Or drop in the Python or TypeScript library.
Find your most expensive conversation.
In the first session, not the first week.
Cost your next feature before you ship it.
Why the bill went up
Example dashboardCalls traced
418,209
across 3 projects
Spend this week
$378.41
+ $182 vs last week
Failed calls
312
74% retried, and you paid for all of them
+ $182 this week traced to one culprit
Spend over 14 days
Most expensive users
Next week forecast
Graded against reality. Accuracy shown as results land.
Keep reading
Sources: OpenRouter models, Anthropic pricing. Last reviewed 2026-08-01, rates effective 2026-07-02. Plain text version.