Team or player rankings (leaderboard)
Ranked leaderboard over a rolling **3-month** window. `?type=team` (default) or `?type=player` — the two are ranked on different metrics, reported in each row's `metric` field. **Teams** rank on `glicko2_conservative`: a Glicko-2 rating discounted by twice its rating deviation (`rating − 2·RD`), so a team with a volatile, thinly-evidenced rating sorts below an equally-rated team the model is confident about. **Players** rank on `rating`. Sorting rows by `value` reproduces `rank` exactly. Entities below the sample floor are omitted rather than ranked on noise: teams need at least 5 rated matches in the window, players at least 30 rated maps. This is always our own rating, never a third party's — a team's separately-sourced `external_rank` is reported alongside for comparison, not used for ordering. Not cursor-paginated: `limit` truncates the computed board and `meta.next_cursor` is always null.
Ranked leaderboard over a rolling 3-month window. ?type=team (default) or ?type=player — the two are ranked on different metrics, reported in each row's metric field.
Teams rank on glicko2_conservative: a Glicko-2 rating discounted by twice its rating deviation (rating − 2·RD), so a team with a volatile, thinly-evidenced rating sorts below an equally-rated team the model is confident about. Players rank on rating.
Sorting rows by value reproduces rank exactly. Entities below the sample floor are omitted rather than ranked on noise: teams need at least 5 rated matches in the window, players at least 30 rated maps. This is always our own rating, never a third party's — a team's separately-sourced external_rank is reported alongside for comparison, not used for ordering. Not cursor-paginated: limit truncates the computed board and meta.next_cursor is always null.
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
Which leaderboard to return: team (the default) or player. The two rank on different metrics — teams on a confidence-discounted Glicko-2 rating, players on their rating — and each row reports which in its metric field.
"team"Value in
- "team"
- "player"
Filter to one circuit region. Values are full names, not codes — Europe, North America, South America, Asia, CIS, Oceania, Africa. Exact match, so EU matches nothing.
Filter by player role (type=player).
Ordering. rank (default), value or name, each reversible with a - prefix. Re-sorting changes the order rows come back in, never the rank each entity holds — so sort=-rank returns the bottom of the board with its real ranks. An unrecognised key returns 400.
Page size. The default and maximum vary per endpoint — this shared definition documents the common case (default 100, max 500); each operation that differs states its own numbers. cursor carries the page position, not limit.
A value above the endpoint's maximum is silently clamped, not rejected. A missing, zero, negative or non-numeric value silently falls back to the default — so ?limit=abc and ?limit=0 both return the default page size rather than a 400. Read meta.count if you need to know how many rows you actually got.
1 <= value100Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/cs2/rankings"{ "data": [ { "rank": 1, "entity_type": "team", "entity_id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6", "name": "Vitality", "slug": "vitality", "region": "Europe", "country_code": "FR", "role": null, "metric": "glicko2_conservative", "value": 1922.5, "window": "3mo", "external_rank": 3, "form": [ "L", "L" ], "rank_delta": 0 }, { "rank": 2, "entity_type": "team", "entity_id": "019f23d1-fb5c-7a98-97da-542fb409d0ad", "name": "Spirit", "slug": "spirit", "region": "CIS", "country_code": "RU", "role": null, "metric": "glicko2_conservative", "value": 1909.5, "window": "3mo", "external_rank": 1, "form": [ "W", "L" ], "rank_delta": 0 } ], "meta": { "count": 2, "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": "not_found", "message": "not found", "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.
Head-to-head record between two teams GET
Completed-match record between the path team and `opponent`. Enveloped `{"data": HeadToHead}`.