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": {...}}`.
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": {...}}.
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 slug. cs2 is the only populated title today; an un-onboarded game 404s cleanly.
Query Parameters
How many weekly snapshots to return: a whole number from 1 to 52. Default 13. Anything else is a 400 naming the parameter.
1 <= value <= 5213How many ranks each snapshot lists: a whole number from 1 to 25. Default 10. Anything else is a 400 naming the parameter.
1 <= value <= 2510Response 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" }}List players for a game GET
Every player in the game, alphabetically by nickname, cursor-paginated. Filter by `team`, `slug` or `role`, or fetch a specific batch with `?ids=` (1–500 comma-separated ids) — which is the efficient way to resolve the player ids you got back from a match's stats in a single request instead of one call per player.
Round-level figures for the top teams GET
The round-level figures of `/teams/{id}/round-stats` for the top teams of the board, in board order, each with its identity and board position — so one team's rates can be placed among its peers in a single request instead of one per peer. Every row is computed over the same trailing `window` (default 6 months, maximum 12) from the same definitions as the per-team endpoint. A cohort team with no recorded rounds in the window reports `rounds: 0` and null rates. `limit` (default 30, maximum 100) is the number of top teams. The result is computed once per ten minutes per parameter set and shared across callers. Enveloped `{"data": [TeamRoundStatsEntry, ...], "meta": {...}}`.