Diese Seite ist noch nicht auf Deutsch übersetzt. Es wird das englische Original angezeigt.

GET /datasets/rankings-daily

Daily model usage snapshots

A per-day ranking of models by tokens processed — which models are actually being used, and how much, day by day.

GET https://openrouter.myip.co.kr/api/v1/datasets/rankings-daily

What this data is, and what it is not

The room to switch to our own usage is already there. A row's source reads openrouter for the external snapshot, internal for figures aggregated from our own usage records, and fixture for sample data.

Authentication

Authorization: Bearer <key> is required. Both inference and management keys are accepted. Without a key you get 401 invalid_api_key.

Request parameters

start_datestring

YYYY-MM-DD. Returns rows on or after this date. Omitted, the window is 30 days back from end_date. A malformed value returns 400.

end_datestring

YYYY-MM-DD. Returns rows up to and including this date. Omitted, it is the most recent date present for that modality.

modalitystring

Defaults to text. Keeps only rows whose stored modality matches exactly.

limitnumber

Maximum rows to return: an integer from 1 to 5000, default 1000. Rows are ordered by date descending, then rank ascending, so a small limit fills up with the top of the most recent day first.

Request example

curl "https://openrouter.myip.co.kr/api/v1/datasets/rankings-daily?start_date=2026-08-28&end_date=2026-09-03&limit=50" \
  -H "Authorization: Bearer $MYIP_API_KEY"

Response

The body is {"data": [ … ], "meta": { … }}.

datestring

The day the figures cover (YYYY-MM-DD).

model_permaslugstring

The model identifier used by the source dataset. Models we do not serve appear here too.

model_idstring | null

The result of matching model_permaslug against our catalogue. null when there is no match, in which case display model_permaslug as-is. Only rows with a model_id link through to GET /models.

total_tokensstring

Tokens processed that day. Stored as NUMERIC(30,0), which can exceed what a double precision float represents exactly, so it is emitted as a string. Parse it as a BigInt.

ranknumber | null

Rank for that day, starting at 1. We re-compute it rather than trusting the source's rank, because merging a model's variant rows would leave the source's ordering inconsistent.

modalitystring

text, and so on.

categorystring | null

The category for a per-category ranking; null in the global ranking.

sourcestring

One of openrouter, internal, fixture. fixture means sample data.

synced_atstring

When this row was last refreshed (ISO 8601, UTC).

meta reports the window that was actually read.

meta.as_ofstring | null

The most recent synced_at among the returned rows, or null when there are none.

meta.start_datestring | null

The start of the window actually applied — this is where you see what we filled in when you omitted it.

meta.end_datestring | null

The end of the window actually applied, or null when there is no data at all.

meta.modalitystring

The modality that was applied.

meta.versionstring

Fixed at v1. It changes if the response shape changes.

Response example

json
{
  "data": [
    {
      "date": "2026-09-03",
      "model_permaslug": "google/gemma-4-26b-a4b",
      "model_id": "google/gemma-4-26b-a4b",
      "total_tokens": "11948458704035",
      "rank": 1,
      "modality": "text",
      "category": null,
      "source": "fixture",
      "synced_at": "2026-09-04T20:12:54.274Z"
    },
    {
      "date": "2026-09-03",
      "model_permaslug": "lgai/exaone-4.0-32b",
      "model_id": "lgai/exaone-4.0-32b",
      "total_tokens": "11597347917470",
      "rank": 2,
      "modality": "text",
      "category": null,
      "source": "fixture",
      "synced_at": "2026-09-04T20:12:54.274Z"
    }
  ],
  "meta": {
    "as_of": "2026-09-04T20:12:54.274Z",
    "start_date": "2026-08-05",
    "end_date": "2026-09-03",
    "modality": "text",
    "version": "v1"
  }
}

When the data is empty, or a sample

The sync job needs OPENROUTER_API_KEY to fetch real data. Without it the job ends as skipped, and if policy selects fixture mode it loads the sample snapshot kept in the repository instead.

SituationResponseHow you can tell
Normal syncReal datasource: "openrouter"
No key, fixture mode onSample datasource: "fixture", and the site shows a "sample data" badge
No key, fixture mode off{"data": [], "meta": {"end_date": null, …}} with status 200An empty array

Errors

Statuserror_typeWhen
400invalid_requeststart_date or end_date is not YYYY-MM-DD; start_date is later than end_date; limit is not an integer from 1 to 5000
401invalid_api_keyNo header. A token without one of our prefixes. An unknown, switched-off, or revoked key
401expired_api_keyThe key has expired
402insufficient_creditsThe key is suspended_no_credit
403key_suspendedAn administrator suspended the key
500serverAny other server-side failure

No data is not an error: it comes back as {"data": []} with status 200.

Zuletzt aktualisiert am 05.09.2026