Back to blog

LLM API pricing compared: the table beyond the headline

The $/M-token headline is one of six columns you actually pay: input, output, cache read, cache write, batch discount, context tier. Plus the markup line — and why the May price jump shows up in none of them.

Mappace Team · Product2026-07-145 min read
ComparisonsCosts

"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

  1. $/input (per M tokens). The headline. Barely what most of your tokens cost, because column two is where your mix lives.
  2. $/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.
  3. 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.
  4. 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.
  5. 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.
  6. 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:

  1. Fix the shape: tokens in, tokens out, cached, context length, and the batch-able fraction.
  2. Fill all six columns for two or three candidate models.
  3. Compute dollars per task, before rounding any rate.
  4. Add the markup line (0 for a pass-through endpoint — the number is on pricing; read it, do not assume it).
  5. 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.