Rankings

The team board over time

The top of the team board at each of the last `weeks` weekly marks, oldest first, the newest being now. Always exactly `weeks` snapshots (default 13, maximum 52), each listing the top `top` teams (default 10, maximum 25). Each snapshot is the board `/rankings` would have served at that instant: every team's latest rating then, its deviation inflated for the idle time since, and the same activity floor (at least 5 rated matches in the three months ending then), so a team appears only if it was active at the time. A mark at which no team met the floor has an empty `entries` list. `value` is the board's own metric, `glicko2_conservative`. The result is computed once per ten minutes and shared across callers, so the newest snapshot's `as_of` can be up to ten minutes old. Enveloped `{"data": [RankingSnapshot, ...], "meta": {...}}`.

GET
/v1/{game}/rankings/history

The top of the team board at each of the last weeks weekly marks, oldest first, the newest being now. Always exactly weeks snapshots (default 13, maximum 52), each listing the top top teams (default 10, maximum 25).

Each snapshot is the board /rankings would have served at that instant: every team's latest rating then, its deviation inflated for the idle time since, and the same activity floor (at least 5 rated matches in the three months ending then), so a team appears only if it was active at the time. A mark at which no team met the floor has an empty entries list. value is the board's own metric, glicko2_conservative.

The result is computed once per ten minutes and shared across callers, so the newest snapshot's as_of can be up to ten minutes old. Enveloped {"data": [RankingSnapshot, ...], "meta": {...}}.

Authorization

AuthorizationBearer <token>

Primary auth (live). Authorization: Bearer <api-key> — the header takes precedence over the query fallback. The raw key is hashed (SHA-256, hex) and looked up in api.keys.key_hash; the raw value is never stored.

In: header

Path Parameters

game*string

Game slug. cs2 is the only populated title today; an un-onboarded game 404s cleanly.

Query Parameters

weeks?integer

How many weekly snapshots to return: a whole number from 1 to 52. Default 13. Anything else is a 400 naming the parameter.

Range1 <= value <= 52
Default13
top?integer

How many ranks each snapshot lists: a whole number from 1 to 25. Default 10. Anything else is a 400 naming the parameter.

Range1 <= value <= 25
Default10

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/cs2/rankings/history"
{  "data": [    {      "as_of": "2026-07-18T14:04:49.812942Z",      "entries": [        {          "rank": 1,          "team_id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6",          "name": "Vitality",          "slug": "vitality",          "value": 1943.2        },        {          "rank": 2,          "team_id": "019f23d1-fb5c-7a98-97da-542fb409d0ad",          "name": "Spirit",          "slug": "spirit",          "value": 1914.2        },        {          "rank": 3,          "team_id": "019f23d1-fb5c-7c64-bcb1-a61914dfa190",          "name": "Falcons",          "slug": "falcons-esports",          "value": 1885.4        }      ]    },    {      "as_of": "2026-10-10T14:04:49.812942Z",      "entries": [        {          "rank": 1,          "team_id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6",          "name": "Vitality",          "slug": "vitality",          "value": 1930.6        },        {          "rank": 2,          "team_id": "019f23d1-fb5c-7a98-97da-542fb409d0ad",          "name": "Spirit",          "slug": "spirit",          "value": 1913.2        },        {          "rank": 3,          "team_id": "019f23d1-fb5c-738b-8ca9-2e78eaeb5b42",          "name": "MOUZ",          "slug": "mouz-cs2",          "value": 1884.7        }      ]    }  ],  "meta": {    "count": 13,    "next_cursor": null  }}
{  "error": {    "code": "not_found",    "message": "not found",    "request_id": "019f3d18-c15f-7319-81a7-343e8a80a578"  }}
{  "error": {    "code": "not_found",    "message": "not found",    "request_id": "019f3d18-c15f-7319-81a7-343e8a80a578"  }}

{  "error": {    "code": "rate_limited",    "message": "rate limit exceeded",    "request_id": "019f3d18-c15f-7319-81a7-343e8a80a578"  }}