Open data

Live model pricing, in one call

Current prices, context windows and API identifiers for 125 models across 10 providers. No key, no account, CORS open, MIT licensed. Use the package, the MCP server, or just the JSON.

The package

npm i statlyte
import { costOf, getModel, rankByCost } from 'statlyte';

// what a call actually cost
await costOf('claude-sonnet-5', { input: 12_000, output: 800 });

// look up by statlyte id or the vendor's own api id
const m = await getModel('gpt-5-mini');
m.contextWindow;      // 400000
m.prices.input;       // 0.25 per MTok

// cheapest for a real monthly workload
await rankByCost({ inputPerMonth: 620e6, outputPerMonth: 210e6 });

Zero dependencies. Node, Bun, Deno, Workers, browser. Ships a bundled snapshot so a flaky network never throws in your request path.

The MCP server

claude mcp add statlyte --   npx -y github:richardwilkinson9/statlyte-data

An assistant's training data goes stale on prices within weeks, and a guessed number is worse than no number. This gives it the current figures, with the vendor page they came from.

list_models · get_model_pricing · estimate_cost · cheapest_for_workload · scheduled_price_changes

Listed in the official MCP Registry.

Source on GitHub

Fail your build before the invoice does

scheduledChanges() returns increases vendors have announced but not yet applied. Wire it into CI and a price rise becomes a failing check rather than a surprise line item.

const soon = (await scheduledChanges())
  .filter(c => MODELS_WE_USE.includes(c.id))
  .filter(c => new Date(c.effectiveOn) - Date.now() < 60 * 86400_000);

if (soon.length) process.exit(1);

Or just the JSON

GET https://statlyte.com/api/v1/models
GET https://statlyte.com/api/v1/models/anthropic/claude-opus-5
GET https://statlyte.com/api/v1/changes

Paid endpoints

Current prices are free and will stay free — that is the point of the project. What Pro adds is the archive: the full observation series per model, filtered change streams, and bulk CSV. Nobody can reconstruct that after the fact, which is the only part worth charging for. Pass your key as Authorization: Bearer sk_live_…

GET https://statlyte.com/api/v1/history/anthropic/claude-sonnet-5
GET https://statlyte.com/api/v1/changes?limit=500&kind=price_rise&provider=openai
GET https://statlyte.com/api/v1/export.csv

Fair use and caveats

1,000 requests a day on open endpoints, 50,000 on Pro. Attribution appreciated, not required. Two things to hold in mind: these are list prices, and negotiated or regional rates differ; and cheaper is not substitutable — this records what models cost, not what they can do.

Get a key