Free LLM Pricing API
Structured JSON endpoints · Free tier: 100 req/day (no key) · CORS enabled · Rate limit headers included
Base URL
https://modelpricewatch.com/api/v1
All endpoints return JSON. Append the endpoint path to the base URL.
Free tier: No API key required — 100 requests/day per IP. No signup.
Paid tiers: Include your API key in the X-API-Key header for higher limits. See plans →
Every response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-Tier headers. When you exceed the limit, you get a 429 with a JSON body describing when to retry.
The free tier and dataset are kept free and open. If they save you time, you can support upkeep on Ko-fi ☕ — entirely optional, no key or account gets gated behind it.
Embeddable live badges
Drop a live, auto-updating price badge into any README, blog, or dashboard — SVG, cached 6h, no key:
<!-- Markdown -->   
Every model page has a one-click "Embed this price" box with its own badge.
MCP server for AI agents
Let Claude, GPT, Cursor, and other agents query live model pricing directly, in-conversation, via the Model Context Protocol. Streamable-HTTP transport, no key required:
https://modelpricewatch.com/mcp
Add it to Claude Desktop / claude.ai (Settings → Connectors → Add custom connector) or any MCP client. It exposes five tools:
search_models— find models by name, provider, or categoryget_model_pricing— full price + spec detail for one modelcompare_models— side-by-side with a cheapest-for verdictcheapest_models— rank by input, output, or blended costlist_providers— all tracked providers
Speaks JSON-RPC 2.0. A quick smoke test:
curl -s https://modelpricewatch.com/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
GET /mcp returns a discovery document (capabilities + tool list, including the live limits below). Backed by the same dataset as the REST endpoints below, so numbers never drift.
Fair-use allowances
Expressed per minute, not per day — agent traffic is bursty, and a daily quota would either cut a live conversation short or fail to stop a client stuck in a retry loop. Tool calls: Free 20/min · Pro 240/min · Startup 2,400/min · Enterprise unmetered. This is a separate budget from the REST tiers below — the 20/min free MCP allowance is not drawn from the 100 requests/day REST free tier.
These are allowances to design against, not hard caps. We would rather tell you that than publish a precise number we do not actually hold you to. Tool-call metering inside the Worker is deliberately loose and will usually let a burst through; sustained excess may be blocked at the network edge without warning. If you go over, the reply is a normal MCP tool result flagged isError rather than a transport error, carrying Retry-After and an explanation of how to raise the ceiling — so your agent can tell you what happened instead of surfacing an opaque failure. Responses carry X-RateLimit-Limit and X-RateLimit-Scope but deliberately no X-RateLimit-Remaining: there is no exact running counter behind this, and we would rather omit the header than print a number you would size a client against.
Please don't poll GET /mcp on a short timer — sustained polling may be throttled at the edge. The discovery document only changes when we deploy, so fetch it once per session and cache it — it now ships an ETag and Cache-Control: max-age=300, and a conditional request with If-None-Match gets a 304. Please do not poll it on a short timer; a liveness check every few minutes is plenty. Higher ceilings for tool calls: API plans.
Endpoints
/models.json
All 198 models with pricing, context window, modality, and metadata.
Response schema
{
"count": 156,
"updated": "2026-06-25",
"data": [
{
"id": "openai-gpt-5-5",
"provider": "OpenAI",
"model": "GPT-5.5",
"category": "flagship",
"input_per_mtok": 5.0,
"output_per_mtok": 15.0,
"cached_input_per_mtok": 1.25,
"promo": false,
"promo_until": null,
"context_window": 270000,
"modality": ["text", "image", "audio"],
"released": "2025-11-15",
"status": "Current",
"open_source": false,
"parameters": null,
"blended_cost_per_mtok": 10.0,
"pricing_url": "https://openai.com/api/pricing/",
"last_updated": "2026-06-25",
"detail_url": "https://modelpricewatch.com/models/openai-gpt-5-5/"
},
...
]
}
/providers.json
All 31 providers with metadata, URLs, and founding info.
/stats.json
Aggregate statistics: total models, providers, cheapest prices, largest context window, category breakdown.
/price-index.json
The LLM Price Index — headline $4.32/Mtok as of 2026-08-09, with constituents, sub-indices, the chain-linked trend series, and a ready-made citation block (the same dated citation line as /price-index/).
/price-index-levels.json
The index's as-published level archive — one row per deploy day with the headline exactly as published, on that day's basket basis, never restated. Use it to verify a dated citation after a rebalance re-levels the live series (policy).
/price-history.json
Historical price snapshots for all tracked models. Each entry contains an array of daily snapshots with input/output prices and change events (price drops, increases, new models).
/changelog.json
Recent pricing changes detected by the scraper pipeline. Includes provider pricing page updates and Google News signals.
/best-for/{slug}.json
Use-case-specific model rankings with top-10 models per category.
Available slugs: coding, chatbot, cheap-api, long-context, multimodal, reasoning, open-source, fast-inference, embedding, enterprise
/compare/{slug}.json
Model comparison data with side-by-side pricing, specs, and cost-at-scale projections. 97 comparison endpoints available.
Slug format: {model-a-id}-vs-{model-b-id} using model IDs from /models.json. Example: openai-gpt-5-5-vs-anthropic-claude-opus-4-8
Available comparison slugs (97)
ai21-labs-jamba-mini-vs-ai21-labs-jamba-large alibaba-qwen-flash-vs-alibaba-qwen-plus alibaba-qwen-flash-vs-alibaba-qwen3-32b alibaba-qwen-flash-vs-alibaba-qwen3-6-flash alibaba-qwen-plus-vs-alibaba-qwq-plus alibaba-qwen-plus-vs-mistral-mistral-large-3 alibaba-qwen-plus-vs-perplexity-sonar alibaba-qwen-plus-vs-z-ai-glm-4-5 alibaba-qwen-turbo-vs-alibaba-qwen-flash alibaba-qwen-turbo-vs-mistral-ministral-3-3b alibaba-qwen-turbo-vs-reka-reka-edge alibaba-qwen3-7-flash-vs-alibaba-qwen-turbo alibaba-qwen3-7-flash-vs-amazon-nova-micro alibaba-qwen3-7-flash-vs-baichuan-baichuan-m2-32b alibaba-qwen3-7-flash-vs-mistral-ministral-3-3b alibaba-qwen3-7-max-vs-anthropic-claude-sonnet-5 alibaba-qwen3-7-max-vs-deepseek-deepseek-v4-pro alibaba-qwen3-7-max-vs-google-gemini-3-1-pro alibaba-qwen3-7-plus-vs-mistral-mistral-large-3 alibaba-qwen3-7-plus-vs-perplexity-sonar alibaba-qwen3-8-max-vs-google-gemini-3-6-flash alibaba-qwen3-8-max-vs-reka-reka-core alibaba-qwen3-max-vs-google-gemini-3-5-flash alibaba-qwen3-max-vs-google-gemini-3-6-flash alibaba-qwen3-max-vs-reka-reka-core alibaba-qwen3-max-vs-xai-grok-4-5 alibaba-qwq-plus-vs-perplexity-sonar-deep-research alibaba-qwq-plus-vs-perplexity-sonar-reasoning-pro amazon-nova-lite-vs-amazon-nova-pro amazon-nova-micro-vs-alibaba-qwen-turbo amazon-nova-micro-vs-amazon-nova-lite amazon-nova-micro-vs-baichuan-baichuan-m2-32b amazon-nova-micro-vs-mistral-ministral-3-3b amazon-nova-micro-vs-reka-reka-edge anthropic-claude-fable-5-vs-anthropic-claude-opus-4-8 anthropic-claude-fable-5-vs-anthropic-claude-sonnet-5 anthropic-claude-fable-5-vs-deepseek-deepseek-v4-pro anthropic-claude-fable-5-vs-google-gemini-3-1-pro anthropic-claude-fable-5-vs-openai-gpt-5-5 anthropic-claude-fable-5-vs-openai-gpt-5-6-sol anthropic-claude-fable-5-vs-xai-grok-4-5 anthropic-claude-haiku-4-5-vs-anthropic-claude-sonnet-5 anthropic-claude-mythos-5-vs-anthropic-claude-fable-5 anthropic-claude-mythos-5-vs-anthropic-claude-opus-4-8 anthropic-claude-mythos-5-vs-anthropic-claude-sonnet-5 anthropic-claude-mythos-5-vs-google-gemini-3-1-pro anthropic-claude-mythos-5-vs-openai-gpt-5-5 anthropic-claude-mythos-5-vs-openai-gpt-5-6-sol anthropic-claude-mythos-5-vs-xai-grok-4-5 anthropic-claude-opus-4-8-vs-anthropic-claude-sonnet-4-6 anthropic-claude-opus-4-8-vs-google-gemini-3-1-pro anthropic-claude-opus-5-vs-anthropic-claude-fable-5 anthropic-claude-opus-5-vs-anthropic-claude-opus-4-8 anthropic-claude-opus-5-vs-anthropic-claude-sonnet-5 anthropic-claude-opus-5-vs-deepseek-deepseek-v4-pro anthropic-claude-opus-5-vs-google-gemini-3-1-pro anthropic-claude-opus-5-vs-openai-gpt-5-5 anthropic-claude-opus-5-vs-openai-gpt-5-6-sol anthropic-claude-opus-5-vs-xai-grok-4-5 anthropic-claude-sonnet-4-5-vs-anthropic-claude-sonnet-4-6 anthropic-claude-sonnet-4-6-vs-anthropic-claude-haiku-4-5 anthropic-claude-sonnet-4-6-vs-google-gemini-2-5-pro anthropic-claude-sonnet-4-6-vs-google-gemini-3-1-pro anthropic-claude-sonnet-5-vs-anthropic-claude-opus-4-8 anthropic-claude-sonnet-5-vs-anthropic-claude-sonnet-4-5 anthropic-claude-sonnet-5-vs-anthropic-claude-sonnet-4-6 anthropic-claude-sonnet-5-vs-deepseek-deepseek-v4-pro anthropic-claude-sonnet-5-vs-google-gemini-3-1-pro anthropic-claude-sonnet-5-vs-google-gemini-3-5-flash anthropic-claude-sonnet-5-vs-openai-gpt-5-4 anthropic-claude-sonnet-5-vs-openai-gpt-5-5 anthropic-claude-sonnet-5-vs-xai-grok-4-3 baichuan-baichuan-m2-32b-vs-alibaba-qwen-turbo baichuan-baichuan-m2-32b-vs-mistral-ministral-3-3b baichuan-baichuan-m2-32b-vs-reka-reka-edge cohere-command-r-08-2024-vs-cohere-command-a cohere-rerank-3-5-vs-cohere-embed-4 cohere-rerank-3-5-vs-ibm-granite-embedding-278m-multilingual cohere-rerank-3-5-vs-openai-text-embedding-3-small cohere-rerank-3-5-vs-voyage-ai-rerank-2-5 cohere-rerank-3-5-vs-voyage-ai-rerank-2-5-lite cohere-rerank-3-5-vs-voyage-ai-voyage-4 cohere-rerank-3-5-vs-voyage-ai-voyage-4-lite deepinfra-deepseek-v4-flash-vs-deepinfra-qwen3-32b deepinfra-llama-4-maverick-vs-meta-llama-3-3-70b deepinfra-llama-4-maverick-vs-together-llama-3-3-70b deepinfra-llama-4-scout-vs-deepinfra-llama-4-maverick deepinfra-llama-4-scout-vs-meta-llama-3-3-70b deepinfra-llama-4-scout-vs-meta-llama-4-scout deepinfra-llama-4-scout-vs-together-llama-3-3-70b deepinfra-qwen3-32b-vs-deepinfra-llama-4-scout deepseek-deepseek-v4-flash-vs-deepseek-deepseek-v4-pro deepseek-deepseek-v4-flash-vs-google-gemini-2-5-flash deepseek-deepseek-v4-pro-vs-alibaba-qwen-plus deepseek-deepseek-v4-pro-vs-alibaba-qwen3-7-plus deepseek-deepseek-v4-pro-vs-anthropic-claude-sonnet-4-6 deepseek-deepseek-v4-pro-vs-google-gemini-3-1-flash-lite deepseek-deepseek-v4-pro-vs-meta-llama-3-3-70b deepseek-deepseek-v4-pro-vs-mistral-mistral-large-3 deepseek-deepseek-v4-pro-vs-openai-gpt-5-4 deepseek-deepseek-v4-pro-vs-perplexity-sonar deepseek-deepseek-v4-pro-vs-z-ai-glm-4-5 fireworks-deepseek-v4-flash-vs-fireworks-gpt-oss-120b fireworks-gpt-oss-120b-vs-fireworks-minimax-2-5 fireworks-gpt-oss-20b-vs-fireworks-deepseek-v4-flash fireworks-kimi-k2-7-code-vs-moonshot-kimi-k2-7-code fireworks-kimi-k2-7-code-vs-moonshot-kimi-k2-7-code-highspeed fireworks-kimi-k2-7-code-vs-together-kimi-k2-7-code google-gemini-2-5-flash-vs-anthropic-claude-haiku-4-5 google-gemini-3-1-flash-image-vs-google-gemini-3-1-flash-lite-image google-gemini-3-1-pro-vs-google-gemini-2-5-flash google-gemini-3-1-pro-vs-xai-grok-4 google-gemini-3-5-flash-lite-vs-anthropic-claude-haiku-4-5 google-gemini-3-5-flash-lite-vs-google-gemini-2-5-flash google-gemini-3-5-flash-lite-vs-google-gemini-3-flash-preview google-gemini-3-6-flash-vs-anthropic-claude-sonnet-4-6 google-gemini-3-6-flash-vs-google-gemini-3-5-flash google-gemini-3-6-flash-vs-reka-reka-core google-gemini-3-6-flash-vs-xai-grok-4-5 google-gemini-3-flash-preview-vs-alibaba-qwen3-8-max google-gemini-3-flash-preview-vs-alibaba-qwen3-max google-gemini-3-flash-preview-vs-google-gemini-3-6-flash google-gemini-3-flash-preview-vs-meta-muse-spark-1-1 google-gemini-3-flash-preview-vs-meta-muse-spark-1-2 google-gemini-3-flash-preview-vs-reka-reka-core google-gemini-3-flash-preview-vs-xai-grok-4-3 google-gemini-3-flash-preview-vs-xai-grok-4-5 google-gemini-3-flash-preview-vs-z-ai-glm-5-2 google-gemini-3-pro-image-vs-google-gemini-3-1-flash-image groq-gpt-oss-120b-vs-groq-qwen3-32b groq-gpt-oss-20b-vs-groq-gpt-oss-120b groq-qwen3-32b-vs-groq-qwen-3-6-27b ibm-granite-4-0-micro-vs-alibaba-qwen-turbo ibm-granite-4-0-micro-vs-alibaba-qwen3-7-flash ibm-granite-4-0-micro-vs-amazon-nova-micro ibm-granite-4-0-micro-vs-baichuan-baichuan-m2-32b ibm-granite-4-0-micro-vs-mistral-ministral-3-3b ibm-granite-4-0-micro-vs-reka-reka-edge ibm-granite-4-h-large-vs-alibaba-qwen-plus ibm-granite-4-h-large-vs-alibaba-qwen3-7-plus ibm-granite-4-h-large-vs-deepseek-deepseek-v4-pro ibm-granite-4-h-large-vs-mistral-mistral-large-3 ibm-granite-4-h-large-vs-perplexity-sonar ibm-granite-4-h-large-vs-z-ai-glm-4-5 ibm-granite-4-h-medium-vs-alibaba-qwen-plus ibm-granite-4-h-medium-vs-alibaba-qwen3-7-plus ibm-granite-4-h-medium-vs-deepseek-deepseek-v4-pro ibm-granite-4-h-medium-vs-mistral-mistral-large-3 ibm-granite-4-h-medium-vs-openai-gpt-5-6-luna ibm-granite-4-h-medium-vs-perplexity-sonar ibm-granite-4-h-medium-vs-upstage-solar-pro-3 ibm-granite-4-h-medium-vs-z-ai-glm-4-5 ibm-granite-4-h-small-vs-ibm-granite-4-h-medium ibm-granite-embedding-278m-multilingual-vs-cohere-embed-4 meituan-longcat-2-0-vs-fireworks-kimi-k2-7-code meituan-longcat-2-0-vs-moonshot-kimi-k2-7-code meituan-longcat-2-0-vs-relace-relace-search meituan-longcat-2-0-vs-together-kimi-k2-7-code meta-llama-3-1-8b-vs-deepinfra-llama-4-maverick meta-llama-3-1-8b-vs-deepinfra-llama-4-scout meta-llama-3-1-8b-vs-meta-llama-4-scout meta-llama-3-1-8b-vs-together-llama-3-3-70b meta-llama-3-3-70b-vs-anthropic-claude-sonnet-4-6 meta-llama-3-3-70b-vs-meta-muse-spark-1-1 meta-llama-3-3-70b-vs-openai-gpt-5-4 meta-llama-3-3-70b-vs-together-llama-3-3-70b meta-llama-4-scout-vs-deepinfra-llama-4-maverick meta-llama-4-scout-vs-meta-llama-3-3-70b meta-llama-4-scout-vs-together-llama-3-3-70b meta-muse-spark-1-1-vs-alibaba-qwen3-8-max meta-muse-spark-1-1-vs-alibaba-qwen3-max meta-muse-spark-1-1-vs-anthropic-claude-sonnet-4-6 meta-muse-spark-1-1-vs-google-gemini-3-1-pro meta-muse-spark-1-1-vs-google-gemini-3-6-flash meta-muse-spark-1-1-vs-openai-gpt-5-6-terra meta-muse-spark-1-1-vs-reka-reka-core meta-muse-spark-1-1-vs-xai-grok-4-5 meta-muse-spark-1-1-vs-z-ai-glm-5-2 meta-muse-spark-1-2-vs-alibaba-qwen3-8-max meta-muse-spark-1-2-vs-alibaba-qwen3-max meta-muse-spark-1-2-vs-google-gemini-3-6-flash meta-muse-spark-1-2-vs-z-ai-glm-5-2 minimax-minimax-m2-7-vs-minimax-minimax-m3 minimax-minimax-m3-vs-deepseek-deepseek-v4-flash minimax-minimax-m3-vs-deepseek-deepseek-v4-pro minimax-minimax-m3-vs-google-gemini-2-5-flash minimax-minimax-m3-vs-google-gemini-3-1-flash-lite minimax-minimax-m3-vs-z-ai-glm-5-2 mistral-codestral-2508-vs-fireworks-kimi-k2-7-code mistral-codestral-2508-vs-meituan-longcat-2-0 mistral-codestral-2508-vs-moonshot-kimi-k2-7-code mistral-codestral-2508-vs-moonshot-kimi-k2-7-code-highspeed mistral-codestral-2508-vs-relace-relace-apply-3 mistral-codestral-2508-vs-relace-relace-search mistral-codestral-2508-vs-together-kimi-k2-7-code mistral-codestral-2508-vs-xai-grok-build-0-1 mistral-codestral-vs-fireworks-kimi-k2-7-code mistral-codestral-vs-meituan-longcat-2-0 mistral-codestral-vs-moonshot-kimi-k2-7-code mistral-codestral-vs-moonshot-kimi-k2-7-code-highspeed mistral-codestral-vs-relace-relace-apply-3 mistral-codestral-vs-relace-relace-search mistral-codestral-vs-together-kimi-k2-7-code mistral-codestral-vs-xai-grok-build-0-1 mistral-ministral-3-3b-vs-mistral-voxtral-small-24b mistral-ministral-3-3b-vs-reka-reka-edge mistral-mistral-large-3-vs-anthropic-claude-sonnet-4-6 mistral-mistral-large-3-vs-perplexity-sonar mistral-mistral-large-3-vs-z-ai-glm-4-5 mistral-mistral-medium-3-5-vs-openai-gpt-5-4 mistral-mistral-small-4-vs-mistral-codestral mistral-voxtral-small-24b-vs-mistral-mistral-small-4 moonshot-kimi-k2-5-vs-moonshot-kimi-k2-6 moonshot-kimi-k2-6-vs-moonshot-kimi-k2-7-code moonshot-kimi-k2-7-code-highspeed-vs-meituan-longcat-2-0 moonshot-kimi-k2-7-code-highspeed-vs-openai-gpt-5-3-codex moonshot-kimi-k2-7-code-vs-moonshot-kimi-k2-7-code-highspeed moonshot-kimi-k2-7-code-vs-together-kimi-k2-7-code moonshot-kimi-k3-vs-anthropic-claude-sonnet-5 moonshot-kimi-k3-vs-deepseek-deepseek-v4-pro moonshot-kimi-k3-vs-google-gemini-3-1-pro moonshot-kimi-k3-vs-moonshot-kimi-k2-7-code moonshot-kimi-k3-vs-openai-gpt-5-6-sol moonshot-kimi-k3-vs-z-ai-glm-5-2 openai-gpt-4-1-mini-vs-anthropic-claude-haiku-4-5 openai-gpt-4-1-mini-vs-google-gemini-2-5-flash openai-gpt-5-4-vs-anthropic-claude-opus-4-8 openai-gpt-5-4-vs-anthropic-claude-sonnet-4-6 openai-gpt-5-4-vs-google-gemini-3-1-pro openai-gpt-5-4-vs-openai-gpt-4-1-mini openai-gpt-5-5-vs-anthropic-claude-opus-4-8 openai-gpt-5-5-vs-google-gemini-3-1-pro openai-gpt-5-5-vs-google-gemini-3-6-flash openai-gpt-5-5-vs-openai-gpt-5-4 openai-gpt-5-6-luna-vs-alibaba-qwen-plus openai-gpt-5-6-luna-vs-alibaba-qwen3-7-plus openai-gpt-5-6-luna-vs-anthropic-claude-haiku-4-5 openai-gpt-5-6-luna-vs-deepseek-deepseek-v4-pro openai-gpt-5-6-luna-vs-google-gemini-2-5-flash openai-gpt-5-6-luna-vs-ibm-granite-4-h-large openai-gpt-5-6-luna-vs-mistral-mistral-large-3 openai-gpt-5-6-luna-vs-openai-gpt-5-4-nano openai-gpt-5-6-luna-vs-perplexity-sonar openai-gpt-5-6-luna-vs-z-ai-glm-4-5 openai-gpt-5-6-sol-vs-anthropic-claude-opus-4-8 openai-gpt-5-6-sol-vs-google-gemini-3-1-pro openai-gpt-5-6-sol-vs-openai-gpt-5-5 openai-gpt-5-6-sol-vs-openai-gpt-5-6-terra openai-gpt-5-6-sol-vs-xai-grok-4-5 openai-gpt-5-6-terra-vs-anthropic-claude-sonnet-5 openai-gpt-5-6-terra-vs-google-gemini-3-1-pro openai-gpt-5-6-terra-vs-openai-gpt-5-6-luna openai-o4-mini-vs-anthropic-claude-sonnet-4-6 openai-o4-mini-vs-google-gemini-2-5-pro openai-o4-mini-vs-xai-grok-4 openai-text-embedding-3-small-vs-cohere-embed-4 openai-text-embedding-3-small-vs-ibm-granite-embedding-278m-multilingual openai-text-embedding-3-small-vs-openai-text-embedding-3-large openai-text-embedding-3-small-vs-voyage-ai-rerank-2-5 openai-text-embedding-3-small-vs-voyage-ai-rerank-2-5-lite openai-text-embedding-3-small-vs-voyage-ai-voyage-4 openai-text-embedding-3-small-vs-voyage-ai-voyage-4-lite perplexity-sonar-deep-research-vs-perplexity-sonar-reasoning-pro perplexity-sonar-reasoning-pro-vs-perplexity-sonar-pro perplexity-sonar-vs-perplexity-sonar-deep-research perplexity-sonar-vs-z-ai-glm-4-5 reka-reka-core-vs-google-gemini-3-5-flash reka-reka-core-vs-xai-grok-4-5 reka-reka-edge-vs-reka-reka-flash reka-reka-flash-vs-reka-reka-core relace-relace-apply-3-vs-fireworks-kimi-k2-7-code relace-relace-apply-3-vs-meituan-longcat-2-0 relace-relace-apply-3-vs-moonshot-kimi-k2-7-code relace-relace-apply-3-vs-relace-relace-search relace-relace-apply-3-vs-xai-grok-build-0-1 relace-relace-search-vs-fireworks-kimi-k2-7-code relace-relace-search-vs-moonshot-kimi-k2-7-code sakana-ai-fugu-ultra-vs-anthropic-claude-fable-5 sakana-ai-fugu-ultra-vs-anthropic-claude-opus-5 sakana-ai-fugu-ultra-vs-google-gemini-3-1-pro sakana-ai-fugu-ultra-vs-openai-gpt-5-5 thinking-machines-inkling-small-vs-anthropic-claude-haiku-4-5 thinking-machines-inkling-small-vs-google-gemini-3-5-flash-lite thinking-machines-inkling-small-vs-thinking-machines-inkling thinking-machines-inkling-vs-fireworks-nvidia-nemotron-3-ultra thinking-machines-inkling-vs-meta-muse-spark-1-1 together-gemma-4-31b-it-pearl-vs-together-minimax-m3 together-gpt-oss-120b-vs-together-gemma-4-31b-it-pearl together-kimi-k2-7-code-vs-moonshot-kimi-k2-7-code-highspeed together-minimax-m3-vs-together-qwen3-7-plus upstage-solar-pro-3-vs-alibaba-qwen-plus upstage-solar-pro-3-vs-alibaba-qwen3-7-plus upstage-solar-pro-3-vs-deepseek-deepseek-v4-pro upstage-solar-pro-3-vs-ibm-granite-4-h-large upstage-solar-pro-3-vs-mistral-mistral-large-3 upstage-solar-pro-3-vs-openai-gpt-5-6-luna voyage-ai-rerank-2-5-lite-vs-cohere-embed-4 voyage-ai-rerank-2-5-lite-vs-ibm-granite-embedding-278m-multilingual voyage-ai-rerank-2-5-lite-vs-voyage-ai-voyage-4-lite voyage-ai-rerank-2-5-vs-cohere-embed-4 voyage-ai-rerank-2-5-vs-ibm-granite-embedding-278m-multilingual voyage-ai-rerank-2-5-vs-voyage-ai-voyage-4 voyage-ai-voyage-4-lite-vs-cohere-embed-4 voyage-ai-voyage-4-lite-vs-ibm-granite-embedding-278m-multilingual voyage-ai-voyage-4-lite-vs-voyage-ai-rerank-2-5 voyage-ai-voyage-4-vs-cohere-embed-4 voyage-ai-voyage-4-vs-ibm-granite-embedding-278m-multilingual xai-grok-4-1-fast-vs-google-gemini-2-5-flash xai-grok-4-20-vs-xai-grok-4-3 xai-grok-4-3-vs-alibaba-qwen3-8-max xai-grok-4-3-vs-alibaba-qwen3-max xai-grok-4-3-vs-google-gemini-3-5-flash xai-grok-4-3-vs-google-gemini-3-6-flash xai-grok-4-3-vs-meta-muse-spark-1-1 xai-grok-4-3-vs-meta-muse-spark-1-2 xai-grok-4-3-vs-reka-reka-core xai-grok-4-3-vs-xai-grok-4-5 xai-grok-4-3-vs-z-ai-glm-5-2 xai-grok-4-5-vs-anthropic-claude-sonnet-5 xai-grok-4-5-vs-google-gemini-3-1-pro xai-grok-4-5-vs-google-gemini-3-5-flash xai-grok-4-5-vs-openai-gpt-5-4 xai-grok-4-5-vs-xai-grok-4 xai-grok-4-vs-anthropic-claude-opus-4-8 xai-grok-4-vs-openai-gpt-5-5 xai-grok-4-vs-xai-grok-4-3 xai-grok-build-0-1-vs-fireworks-kimi-k2-7-code xai-grok-build-0-1-vs-meituan-longcat-2-0 xai-grok-build-0-1-vs-moonshot-kimi-k2-7-code xai-grok-build-0-1-vs-moonshot-kimi-k2-7-code-highspeed xai-grok-build-0-1-vs-relace-relace-search xai-grok-build-0-1-vs-together-kimi-k2-7-code xai-grok-build-0-1-vs-xai-grok-4-20 z-ai-glm-4-32b-0414-vs-z-ai-glm-4-7-flashx z-ai-glm-4-7-flash-vs-alibaba-qwen-turbo z-ai-glm-4-7-flash-vs-alibaba-qwen3-7-flash z-ai-glm-4-7-flash-vs-amazon-nova-micro z-ai-glm-4-7-flash-vs-baichuan-baichuan-m2-32b z-ai-glm-4-7-flash-vs-ibm-granite-4-0-micro z-ai-glm-4-7-flash-vs-mistral-ministral-3-3b z-ai-glm-4-7-flash-vs-reka-reka-edge z-ai-glm-4-7-flash-vs-z-ai-glm-ocr z-ai-glm-5-2-vs-alibaba-qwen3-7-max z-ai-glm-5-2-vs-alibaba-qwen3-8-max z-ai-glm-5-2-vs-alibaba-qwen3-max z-ai-glm-5-2-vs-anthropic-claude-sonnet-5 z-ai-glm-5-2-vs-deepseek-deepseek-v4-pro z-ai-glm-5-2-vs-google-gemini-3-1-pro z-ai-glm-5-2-vs-google-gemini-3-5-flash z-ai-glm-5-2-vs-google-gemini-3-6-flash z-ai-glm-5-2-vs-openai-gpt-5-4 z-ai-glm-5-2-vs-reka-reka-core z-ai-glm-5-2-vs-xai-grok-4-5 z-ai-glm-ocr-vs-alibaba-qwen-turbo z-ai-glm-ocr-vs-alibaba-qwen3-7-flash z-ai-glm-ocr-vs-amazon-nova-micro z-ai-glm-ocr-vs-baichuan-baichuan-m2-32b z-ai-glm-ocr-vs-ibm-granite-4-0-micro z-ai-glm-ocr-vs-mistral-ministral-3-3b z-ai-glm-ocr-vs-reka-reka-edge z-ai-glm-ocr-vs-z-ai-glm-4-32b-0414
/benchmarks.json
Benchmark performance scores for 111 models across 16 benchmarks (GPQA Diamond, SWE-Bench Verified, Terminal-Bench 2.1, LiveCodeBench, MCP Atlas, BrowseComp, OSWorld-Verified, Humanity's Last Exam, ARC-AGI 2, AIME 2025, MMMLU, BFCL, HumanEval, MATH 500, AutoBench, AIME 2026), plus independent composite indices (Artificial Analysis Intelligence & Agentic, AA-Omniscience, GDPval-AA, LMArena ELO) and operational metrics (throughput, TTFT latency). Includes computed average benchmark score and performance-per-dollar metric. Auto-updated daily from the Vellum LLM Leaderboard, Artificial Analysis, LMArena and the HuggingFace Open LLM Leaderboard.
Response schema
{
"anthropic-claude-opus-5": {
"model_name": "Claude Opus 5",
"provider": "Anthropic",
"category": "flagship",
"avg_benchmark": 84.2,
"avg_benchmark_norm": 97.2,
"n_bench": 7,
"blended_cost": 10,
"perf_per_dollar": 8.4,
"swe_bench": 97,
"browsecomp": 90.8,
"hles": 64.7,
"autobench": 26,
"aa_intelligence_index": 63.1,
"aa_agentic_index": 59.2,
"aa_omniscience_index": 37.1,
"gdpval_aa_elo": 1846.2,
"sources": [
"Vellum LLM Leaderboard",
"Artificial Analysis"
],
"source": "Vellum LLM Leaderboard",
"last_updated": "2026-08-09"
}
}
Interactive Feature APIs
These endpoints power the interactive tools on modelpricewatch.com. They use the Cloudflare Worker (not static JSON) and accept POST requests.
/api/alerts/create
Create a price drop alert. Stores the alert in Cloudflare KV and emails the user when the model's blended price drops to or below their target. Checked twice daily by the automated pipeline.
Request / response
POST /api/alerts/create
Content-Type: application/json
{
"model_id": "openai-gpt-5-5",
"target_price": 5.00,
"email": "user@example.com"
}
// Response (200):
{
"success": true,
"alert_id": "alert_1719...abc",
"message": "Price alert created. We'll email you when..."
}
/api/alerts/unsubscribe?id={alert_id}
Unsubscribe from a specific price alert. Also accepts ?email=user@... to unsubscribe from all alerts for that email address.
/api/subscribe
Subscribe to the ModelPriceWatch newsletter via MailerLite. Adds the email to the mailing list.
Request / response
POST /api/subscribe
Content-Type: application/json
{
"email": "user@example.com",
"name": "Optional Name"
}
// Response (200):
{ "success": true, "message": "Subscribed successfully" }
/api/contact
Submit a contact form message. Stored securely with 90-day retention.
Request / response
POST /api/contact
Content-Type: application/json
{
"name": "Jane Doe",
"email": "jane@example.com",
"subject": "API Access",
"message": "I'd like to discuss..."
}
// Response (200):
{ "success": true, "message": "Message received..." }
Authentication
The free tier requires no authentication — just start making requests. Rate limits are enforced per IP address (100 requests/day).
For paid tiers (Pro, Startup, Enterprise), include your API key in the X-API-Key header:
X-API-Key: mpw_your_api_key_here
Invalid keys return 401 {"error":"Invalid API key"}. Revoked keys return 403 {"error":"API key has been revoked"}.
To get a key, contact us.
Usage examples
cURL
curl https://modelpricewatch.com/api/v1/models.json | jq '.data[] | select(.category=="flagship") | {model, input_per_mtok, output_per_mtok}'
Python (with API key)
import requests
headers = {"X-API-Key": "mpw_your_api_key_here"}
resp = requests.get("https://modelpricewatch.com/api/v1/models.json", headers=headers)
models = resp.json()["data"]
# Check rate limit headers
print(f"Remaining: {resp.headers.get('X-RateLimit-Remaining')}/{resp.headers.get('X-RateLimit-Limit')}")
print(f"Tier: {resp.headers.get('X-Tier')}")
# Find cheapest models
cheapest = sorted(models, key=lambda m: m["blended_cost_per_mtok"])[:10]
for m in cheapest:
print(f"{m['model']:30s} ${m['blended_cost_per_mtok']}/Mtok")
JavaScript (with API key)
const headers = { "X-API-Key": "mpw_your_api_key_here" };
const res = await fetch("https://modelpricewatch.com/api/v1/models.json", { headers });
const { data: models } = await res.json();
// Check rate limit headers
console.log(`Remaining: ${res.headers.get('X-RateLimit-Remaining')}/${res.headers.get('X-RateLimit-Limit')}`);
const cheapest = models
.sort((a, b) => a.blended_cost_per_mtok - b.blended_cost_per_mtok)
.slice(0, 10);
console.table(cheapest.map(m => ({
model: m.model,
provider: m.provider,
blended: m.blended_cost_per_mtok
})));
Error handling (429 rate limit)
// When you exceed your daily limit, you get:
// HTTP 429
// {
// "error": "Rate limit exceeded",
// "limit": 100,
// "used": 100,
// "tier": "free",
// "reset": "midnight UTC"
// }
//
// Headers also include:
// X-RateLimit-Limit: 100
// X-RateLimit-Remaining: 0
// Retry-After: 3600
Terms & fair use
- Free — 100 requests/day per IP, no API key, no signup
- Paid — API key required, higher limits (10K–unlimited/day). See plans →
- CORS enabled —
Access-Control-Allow-Origin: *, safe for browser-side usage - Rate limit headers — every response includes
X-RateLimit-Limit,X-RateLimit-Remaining, andX-Tier - 429 response — JSON body with
{ error, limit, used, tier, reset }+Retry-Afterheader - Attribution — please link to modelpricewatch.com when displaying this data
- Data freshness — pricing verified against official sources twice daily (09:20 & 21:20 UTC). Benchmarks auto-scraped from Vellum Leaderboard.
- No SLA on free tier — for production-critical integrations, use a paid tier or mirror the data
Need higher rate limits, historical data exports, or a SLA? See our paid API tiers or contact us.