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.

Run the free Cost Leak ScanStart 14-day trial

Mistakes that cost the most

MistakeWhy it hurtsDo 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

  1. For each routed model, list every upstream provider and its three rates. Note the spread.
  2. Check which providers actually served your calls last month, and in what share.
  3. Reprice last month at the dearest listed provider. That's your realistic worst case.
  4. Confirm whether your cached reads are billing at the cached rate on the routed path.
  5. 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.

Cached input 1,200M, uncached input 300M, output 120M
Standard provider: (1,200 x $0.50) + (300 x $5.00) + (120 x $25.00) = $600 + $1,500 + $3,000 = $5,100
Premium provider: (1,200 x $0.55) + (300 x $5.50) + (120 x $27.50) = $660 + $1,650 + $3,300 = $5,610
Difference = $510 a month, which is 10% and nothing to do with caching
Buying the same workload direct from Anthropic costs $5,100, level with the standard provider

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

FigureWhat it meansConfidenceSource
$5.00 / $25.00 per millionOpenRouter Claude Opus 4.7 standard upstream rate, with a $0.50 cache read matching the direct routecalculatedOpenRouter'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,610modelled monthly cost of one repeated-prompt workload on the standard against the premium upstream providerestimatedBoth 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.

1

Change one base URL.

Or drop in the Python or TypeScript library.

2

Find your most expensive conversation.

In the first session, not the first week.

3

Cost your next feature before you ship it.

Base URLhttp://localhost:4545/v1Your traffic keeps flowing if Culpa ever stops.

Why the bill went up

Example dashboard

Calls 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

$0$20$40$60$8024262830020406
user_384report_generatorconv_91fprompt_v1894,220 tokens3 retries$6.81

Most expensive users

user_384$38.42
user_119$21.07
user_562$14.90
user_204$8.30
user_871$5.10

Next week forecast

Best$180
Median$240
p90$310
p99$395

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.