Skip to main content
GET
/
datasets
/
rankings-daily
Daily token totals for top 50 models
curl --request GET \
  --url https://openrouter.ai/api/v1/datasets/rankings-daily \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://openrouter.ai/api/v1/datasets/rankings-daily"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch('https://openrouter.ai/api/v1/datasets/rankings-daily', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://openrouter.ai/api/v1/datasets/rankings-daily",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://openrouter.ai/api/v1/datasets/rankings-daily"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("Authorization", "Bearer <token>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://openrouter.ai/api/v1/datasets/rankings-daily")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://openrouter.ai/api/v1/datasets/rankings-daily")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
{
  "data": [
    {
      "date": "2026-05-11",
      "model_permaslug": "openai/gpt-4o-2024-05-13",
      "total_tokens": "12345678"
    },
    {
      "date": "2026-05-11",
      "model_permaslug": "anthropic/claude-3.5-sonnet-20241022",
      "total_tokens": "9876543"
    },
    {
      "date": "2026-05-11",
      "model_permaslug": "other",
      "total_tokens": "4321098"
    }
  ],
  "meta": {
    "as_of": "2026-05-12T02:00:00Z",
    "end_date": "2026-05-11",
    "start_date": "2026-04-12",
    "version": "v1"
  }
}
{
"error": {
"code": 400,
"message": "Invalid request parameters"
}
}
{
"error": {
"code": 401,
"message": "Missing Authentication header"
}
}
{
"error": {
"code": 429,
"message": "Rate limit exceeded"
}
}
{
"error": {
"code": 500,
"message": "Internal Server Error"
}
}

Authorizations

Authorization
string
header
required

API key as bearer token in Authorization header

Query Parameters

start_date
string

Start of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to 30 days before end_date. The dataset begins at 2025-01-01; earlier values are clamped forward to that floor and the resolved value is echoed in meta.start_date.

Pattern: ^\d{4}-\d{2}-\d{2}$
Example:

"2026-04-12"

end_date
string

End of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to the most recent completed UTC day. Must be on or after 2025-01-01; earlier values are rejected with a 400.

Pattern: ^\d{4}-\d{2}-\d{2}$
Example:

"2026-05-11"

period
enum<string>

Time grain of each row. day (default) returns the per-UTC-day series; week buckets by ISO week start; month buckets by month start. With category or language_type only week (default) and month are available — day is rejected with a 400 because those datasets are aggregated weekly. For those sampled datasets period=month buckets each week by its week-start month, so totals are approximate at month boundaries.

Available options:
day,
week,
month
Example:

"day"

modality
enum<string>

Restrict to models for a modality surface: text / image_output match output modality, image / audio match input modality, and tool_calling keeps only rows that recorded at least one tool call. Exact dataset — cannot be combined with category or language_type.

Available options:
text,
image,
image_output,
audio,
tool_calling
Example:

"text"

context_bucket
enum<string>

Restrict to requests whose context length falls in this bucket (1K, 10K, 100K, 1M, or 10M). Exact dataset — cannot be combined with category or language_type.

Available options:
1K,
10K,
100K,
1M,
10M
Example:

"100K"

category
enum<string>

Restrict to a use-case category (e.g. programming, roleplay). Sourced from a sampled, upsampled dataset, so total_tokens is an estimate and is aggregated weekly (the trailing weekly bucket may include traffic past end_date). Cannot be combined with modality, context_bucket, or language_type.

Available options:
programming,
roleplay,
marketing,
marketing/seo,
technology,
science,
translation,
legal,
finance,
health,
trivia,
academia
Example:

"programming"

language_type
enum<string>

Restrict to natural-language or programming-language tagged activity. Sourced from a sampled, upsampled dataset, so total_tokens is an estimate and is aggregated weekly (the trailing weekly bucket may include traffic past end_date). Cannot be combined with modality, context_bucket, or category.

Available options:
natural,
programming
Example:

"natural"

Response

Up to 51 rows per day — the top 50 public models by total_tokens plus a single aggregated other row covering every model outside that top 50. Sorted by date ascending, then by total_tokens descending, with other pinned last within its date.

data
object[]
required

Up to 51 rows per day — the top 50 public models by total_tokens for each UTC calendar date in the window, plus one aggregated other row summing every model outside that top 50 (omitted when the long tail is empty). Rows are sorted by date ascending, then by total_tokens descending, with other pinned last within its date. Ties between real models break alphabetically on model_permaslug so the order is stable across requests.

meta
object
required
Example:
{
"as_of": "2026-05-12T02:00:00Z",
"end_date": "2026-05-11",
"start_date": "2026-04-12",
"version": "v1"
}