Data API
The Data API exposes the same datasets that power the public rankings page and apps marketplace as JSON, so you can republish, analyse, or visualise them in your own tools.
All Data API endpoints are gated by any valid OpenRouter API key (the same key you use for inference) and share the same rate limits: 30 requests/minute per key, 500 requests/day per account.
Rankings Daily
The first endpoint — /api/v1/datasets/rankings-daily — returns the top 50 public models per day by total token usage, plus a single aggregated other row per day summing every model outside that top 50. Each real model row is keyed on (date, model_permaslug). Numbers are token counts (prompt_tokens + completion_tokens), matching what is shown on the rankings page.
The endpoint is gated by any valid OpenRouter API key. The same key you use to call /api/v1/chat/completions works here.
Endpoint
The endpoint accepts only GET requests. There is no request body — pass the date window via query parameters.
Headers
Requests without a valid key receive 401 Unauthorized.
Query parameters
Rules:
- Both bounds are inclusive.
- Dates must be calendar-valid in UTC. Overflow strings like
2026-02-30return400 Bad Requestrather than silently rolling over. start_datemust be on or beforeend_date.- The maximum span between
start_dateandend_dateis 366 days (one year + 1 leap day). Wider windows return400 Bad Request. - The dataset begins on 2025-01-01. A
start_dateearlier than that is silently clamped forward to2025-01-01, and the resolved value is echoed back inmeta.start_date. Anend_dateearlier than2025-01-01returns400 Bad Request.
Omitting both parameters returns the most recent 30-day window. See the Examples section below for fully-formed requests in cURL, Python, and TypeScript.
Rate limits
The dataset updates live as traffic flows through OpenRouter — there is no daily refresh window — so a poll once per minute is more than enough to keep your view fresh. Exceeding either bucket returns 429 Too Many Requests.
Response shape
Notes on the response:
- Up to 51 rows per day — the top 50 public models by total tokens, plus one aggregated
otherrow covering every model outside that top 50. Theotherrow is omitted on days where there are no models beyond the top 50. - Models whose total tokens on a given day sum to zero are omitted from that day before ranking. This filters out transcription / image / embedding endpoints whose activity is measured in non-token units (audio seconds, image counts) and which would otherwise appear as
"0"rows or waste rank slots. - Rows are sorted by
dateascending. Within each date, the top 50 are sorted bytotal_tokensdescending (ties break alphabetically onmodel_permaslugso two models with identical totals always appear in the same order across requests), and theotherrow is pinned last — even when its total exceeds the top 50 — so downstream charts can rely on it being the trailing series. total_tokensis returned as a string so 64-bit values are not truncated by JSON parsers that fall back to floats.model_permaslugmatches the canonical permaslug used elsewhere in the OpenRouter API (e.g.openai/gpt-4o-2024-05-13). Non-default variants include a:variantsuffix (e.g.openai/gpt-4o-2024-05-13:free) and are ranked as their own entry, matching the rankings page. The reserved valueotherdenotes the aggregated long-tail row described above and is the onlymodel_permaslugvalue that is not a real permaslug.meta.as_ofis the wall-clock time the response was generated. The underlying dataset updates continuously as traffic flows through OpenRouter, so successive calls a few minutes apart can return different totals for the current (in-progress) day.- Token counts for each row come from the upstream provider’s own tokenizer — Anthropic counts are what Anthropic reports, OpenAI counts are what OpenAI reports, and so on. Tokenizers differ across providers, so a token in one row is not directly comparable to a token in another row from a different provider. The
otherrow sums tokens across many providers and so should be treated as a coarse magnitude only. - The response stays small — at most 51 rows per day × the requested window. The default 30-day window typically returns under 1,600 rows.
Examples
Acceptable use and attribution
When you republish, quote, or visualise data from this endpoint, OpenRouter must be cited using the canonical citation string below. The {as_of} value comes from meta.as_of in the response.
Source: OpenRouter (openrouter.ai/rankings), as of {as_of}.
A few practical notes:
- The dataset is intended for analysis, reporting, and visualisation. It is not intended to be re-served as a competing free API.
- The dataset only contains public traffic. Private models, private endpoints, and zero-data-retention traffic are excluded at the source.
App Rankings
The /api/v1/datasets/app-rankings endpoint returns the top public apps on OpenRouter ranked by token usage, matching the public apps marketplace. Hidden and private apps are excluded, and traffic from related app aliases is merged into the canonical app.
Endpoint
Query parameters
Sort modes:
popularranks apps by total token volume (prompt_tokens + completion_tokens) inside the date window.trendingranks by absolute excess token growth: window volume minus the average volume of the three equal-length periods before it. Apps with no excess growth are omitted, sotrendingmay return fewer thanlimitrows.
When both category and subcategory are supplied, the subcategory must belong to the category group; an inconsistent pair returns 400.
Date window rules are the same as Rankings Daily: the dataset begins at 2025-01-01, max span is 366 days.
Response shape
Notes:
rankis absolute: the first row atoffset=50hasrank: 51.total_tokensis a string for 64-bit safety, same as Rankings Daily.- Token counts come from each upstream provider’s tokenizer, so cross-app comparisons are approximate.
Examples
Benchmarks
The /api/v1/benchmarks endpoint provides a unified interface to benchmark data from multiple sources. Filter by source to select a specific benchmark provider, or combine with task_type to find models suited for specific workloads (e.g. coding agents querying for the best coding models across all available benchmarks).
Endpoint
Query parameters
Notes:
sourcedetermines the shape of items in the response. Each source has its own set of score fields.task_typefilters cross-source. For Artificial Analysis it returns only models with a non-null score for that task. For Design Arena it maps to the corresponding category (e.g.coding→codecategories).arenaandcategoryapply only whensource=design-arena.
Response shape (Artificial Analysis)
When source=artificial-analysis, each item carries composite index scores:
Response shape (Design Arena)
When source=design-arena, each item carries ELO ratings from head-to-head battles:
Examples
Task Classifications
The /api/v1/classifications/task endpoint returns the market-share breakdown of OpenRouter traffic by task classification — code generation, web search, summarization, and so on — over a trailing time window. Each classification reports its share of total requests and token volume as a fraction between 0 and 1.
The underlying data is sampled, so absolute volumes aren’t exposed. What you get is the relative shape of traffic: which tasks account for the most usage and how they compare within their macro-category.
Endpoint
Query parameters
Only 7d (trailing 7 days) is supported for now. Future windows (e.g. 1d, 30d) may be added.
Response shape
Notes:
classificationsis sorted byusage_sharedescending.usage_shareandtoken_shareare fractions of total classified traffic. The unclassifiedotherbucket is excluded from the denominator, so these shares sum to 1 across all classifications.category_usage_shareandcategory_token_shareare fractions within the classification’s macro-category. They sum to 1 across all classifications that share the samemacro_category.modelslists the top models for this classification by request volume. Each entry reports the model’s share of that classification’s requests (tag_usage_share) and tokens (tag_token_share). Only the top-N models are included, so shares may sum to less than 1.macro_categoriesgroups classifications into four buckets: Code, Data, Agent, and General. Each macro-category’s shares sum to the corresponding total inclassifications.as_ofis the upper bound of the time window (yesterday in UTC). It marks the expected latest date in the snapshot but doesn’t confirm data presence for that specific date.- The response is cached for 60 seconds on the server side. A
Cache-Control: private, max-age=60, stale-while-revalidate=300header is set on every response.
Examples
Acceptable use and attribution
When republishing or quoting data from this endpoint, cite as:
Source: OpenRouter (openrouter.ai/rankings), as of {as_of}.
Versioning
All Data API endpoint paths include a version (/api/v1/...) and every response includes meta.version. Backwards-incompatible changes (renamed/removed fields, changed semantics for an existing field) will only ship behind a new version. Additive changes (new optional fields) can land in v1.