JSON API
Static JSON files, rebuilt from the catalog whenever its data changes; /api/status names the data snapshot being served. No key, no sign-up, no rate limits beyond fair use. Responses carry Access-Control-Allow-Origin: *, an ETag and Cache-Control: public, max-age=300; send If-None-Match to get a 304 when nothing changed.
Endpoints
| Path | Contents |
|---|---|
/api.json | Everything in the models.dev shape: providers → models (keyed by the provider's model id) → cost per 1M tokens, limits, modalities. |
/api/v1/index.json | Counts, last update, licence and the endpoint list. |
/api/v1/providers.json | All providers. |
/api/v1/providers/{provider}.json | One provider and every model it serves, with current prices. |
/api/v1/models.json | All models, each with its offerings and current prices (exact decimal strings). |
/api/v1/models/{model}.json | One model with every provider's full, append-only price history and provenance. |
/api/v1/omg-prices.json | Open Model Gateway Pricing v3 price lines: integer micro-USD per batch, ready to publish. |
/api/v1/history.json | Every price entry ever recorded, newest first. |
Formats
- Prices in
/api/v1/are exact decimal strings in USD per unit ("2.5"per 1M tokens), never floats. A missing meter means unknown, not free;"0"is free. /api.jsonfollows models.dev, so its costs are JSON numbers. The numbers are written exactly as stored (no float rounding).cache_writeis the 5-minute write where a provider prices cache TTLs separately; tiers arecost.tiers[].tier.size, applying above that prompt size. It addscatalog_idand has no npm or AI SDK fields.- Prompt-size tiers apply to the whole request when the prompt (all input tokens, cache reads and writes included) is strictly greater than the threshold.
- Batch rates appear only when the provider publishes them; they are never derived from standard rates.
omg-prices.jsonconverts each rate to integer micro-USD per Open Model Gateway batch (1M tokens, 1 image, 1,000 ms of audio, ...). A rate that is not a whole micro-USD is rounded up and flaggedrounded_up;batch_completeis false when batch lines do not cover the same meters as standard lines, which the gateway requires.- The data-file schema is at
/api/v1/schema.json(JSON Schema for the TOML data files).
Example
curl -s https://models.omg.bitop.dev/api/v1/omg-prices.json | jq '.data[0]'{
"aliases": [],
"batch_complete": null,
"batch_price_lines": null,
"effective_from": "2026-10-09",
"label": "Global cross-Region inference",
"limits": {
"context": 1000000,
"input": null,
"output": 128000
},
"model": "claude-haiku-5-5",
"model_name": "Claude Haiku 5.5",
"price_lines": [
{
"batch": 1000000,
"meter": "input_tokens",
"microusd_per_batch": "100000",
"sku_label": "Input",
"source_usd_per_unit": "0.1",
"unit_label": "/M tokens"
},
{
"batch": 1000000,
"meter": "output_tokens",
"microusd_per_batch": "500000",
"sku_label": "Output",
"source_usd_per_unit": "0.5",
"unit_label": "/M tokens"
}
],
"provenance": {
"fetched_at": "2026-10-09T19:52:00Z",
"kind": "provider-price-list",
"url": "https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonBedrockFoundationModels/current/us-east-1/index.json"
},
"provider": "amazon-bedrock",
"rounded_up": false,
"upstream_id": "global.anthropic.claude-haiku-5-5"
}