Methodology
Model prices are read from the OpenRouter public models API. Each prompt and completion string is a USD price per token. TokenRate multiplies by 1,000,000 and does not type prices in by hand.
Missing, negative, or unreadable rates are skipped. If a fetch fails or the exchange rate is unusable, the previous data/models.json file stays in place. An empty table is not published over a good snapshot.
INR without GST is the USD amount times the daily USD→INR rate. INR with GST is that amount plus 18%. The currency menu uses the other rates stored from the same Frankfurter response. Those conversions do not add GST. The USD column is the source rate and does not include GST.
Consumer plan prices in India are manual. They stay unverified until a person checks the source URL and records the amount, the GST treatment, and the date. The currency menu does not convert those rows.
Sources
This snapshot has 452 models, rate 95.74 from Frankfurter (2026-10-13).
Questions
Where do model prices come from?
TokenRate reads the public OpenRouter models API and converts each model's per-token USD prompt and completion rates into USD per 1 million tokens. Prices are not typed in by hand.
How are INR prices and GST calculated?
A daily USD to INR rate comes from Frankfurter, with the fawazahmed0 currency API as fallback. The currency menu can also show other stored rates from that same response. INR without GST is the USD price times the INR rate. INR with GST adds 18%. Other currencies are the USD price times their stored rate, with no GST added. The USD column is the source rate and is not a GST-inclusive price.
Why are some consumer plan prices blank?
India subscription prices are manual. A row stays blank until someone checks the source URL, records the INR amount, and sets a last-verified date. TokenRate does not invent those prices.
How often is this updated?
GitHub Actions fetches OpenRouter and the exchange rate once a day, writes data/models.json, and can rebuild the site. Every page shows the snapshot timestamp. If a fetch fails, the previous snapshot stays in place.
Which models get comparison pages?
Comparison pages cover unordered pairs from data/popular-ids.json, capped at 30 models that are still present in the snapshot. That list is selection metadata, not a price source. The daily price job does not rewrite it, so those URLs stay stable.
Last updated: