"Model X costs $3/M tokens" is one column of a table that has six, and every vendor's pricing page leads with the column that flatters it most. This is the full table — six columns, filled in for the actual decision — plus the one line that is not on the pricing page at all until it appears on the invoice.
The six columns
- $/input (per M tokens). The headline. Barely what most of your tokens cost, because column two is where your mix lives.
- $/output (per M tokens). 3-5x the input at most providers. Your mix decides. Workloads with long outputs — chatty assistants, code, generated prose — are column-2 workloads, and a comparison run only on column 1 is comparing the wrong number.
- Cache read. Roughly 10% of the input price — but only when it hits. The real variable is the hit rate of your traffic shape, and a 90%-hit workload and a 20%-hit workload differ 2-3x on the same model's headline row.
- Cache write. Roughly 1.25x input. The price of a miss. A low-hit-rate workload that keeps rewriting its prefix pays the write premium and the full input — more than the never-cache baseline.
- Batch discount. Roughly 50% off with a 24-hour SLA. Not every provider, not every model — and the eligibility differs between vendors even where the headline discount is the same.
- Context tiers. Long-context requests sometimes price at a separate, higher tier. A 120K-token request is not 120x a 1K request in every case, so check the tier boundaries on the models you will actually run at length.
Plus two intangibles the columns do not carry: reasoning tokens, which are billed as usage counts whose effective rate you rarely get to precompute, and markup — a gateway's service percentage, which appears on the invoice as a separate line, not as a token rate. A pass-through endpoint's value in that column is 0; "we don't mark up" is a claim to be read, not believed, on the pricing page of whatever you are comparing.
Why the headline lies (the 2026 evidence)
- Headlines are set, not tracked. The roughly 2x list-price jump on GPT-5.5 in May moved entire workload classes' budgets overnight, and much of the "cheapest model" content written around that date was still ranking on pre-jump numbers (OpenRouter's cost analysis of the same period is the useful primary read). The headline is a snapshot; the bill is a stream.
- The frontier has been roughly flat since 2023, in list price, while open-weight pricing falls. That structural fact is why "which family is cheapest" is a question whose answer rotates by construction — the open-weight frontier eroded the token-price gap that separated frontier from mid-tier two years ago, and it keeps eroding.
- Per-task gaps widen past the columns. Since columns 3 and 6 depend on traffic shape, two companies on the same "cheapest" model can differ 2x in bill — because their workloads hit cache rates and context lengths differently. The column is real; the ranking is yours alone.
The per-task method
For the tasks that matter:
- Fix the shape: tokens in, tokens out, cached, context length, and the batch-able fraction.
- Fill all six columns for two or three candidate models.
- Compute dollars per task, before rounding any rate.
- Add the markup line (0 for a pass-through endpoint — the number is on pricing; read it, do not assume it).
- Re-run monthly. Prices move, tiers change, and a ranking is a month's work, not a forever decision.
Live per-model rates for everything on the site, updated as provider pricing moves, are in the model catalog — which is the only way the "it depends" answer stops being an evasive one.