A player's recent matches
The player's recent completed matches, newest first: the team they played for, the opponent, the series score from their side, the tournament and its tier, and their own kills, deaths and ADR for the whole match. Walkovers and matches from before Counter-Strike 2 are left out. When the player's line names no team, `team`, `opponent` and both scores are `null`. `limit` default 10, maximum 25; not paginated. Enveloped `{"data": [PlayerMatch, ...], "meta": {...}}`.
The player's recent completed matches, newest first: the team they played for, the opponent, the series score from their side, the tournament and its tier, and their own kills, deaths and ADR for the whole match. Walkovers and matches from before Counter-Strike 2 are left out. When the player's line names no team, team, opponent and both scores are null. limit default 10, maximum 25; not paginated. Enveloped {"data": [PlayerMatch, ...], "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.
Resource identifier — either a UUID or the resource's human-readable slug, scoped to {game}. /v1/cs2/teams/natus-vincere and /v1/cs2/teams/019f23d1-fb5c-7987-b522-47c3a5e72111 address the same row, so you can go straight from a slug you already have without first looking up its id.
Slugs work on teams, players and tournaments. Matches have no slug, so a match id must be a UUID. Either way, an identifier that resolves to nothing returns 404 not_found.
A team or a player also answers to a slug it was renamed away from, as long as no current team or player holds that slug — so a link made before a rename keeps working. The row returned carries its current slug.
Query Parameters
How many matches to return. Default 10, maximum 25. Not paginated.
1 <= value <= 2510Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/cs2/players/019f2858-e253-7f3d-bdff-bc7738bd1036/matches"{ "data": [ { "match_id": "01a120d6-9348-7993-ae4e-fbf7ad3a8b87", "date": "2026-10-10T13:47:56Z", "team": { "id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6", "name": "Vitality", "slug": "vitality" }, "opponent": { "id": "019f23d1-fb5c-74cf-9744-2e881407d170", "name": "Aurora", "slug": "aurora-gaming" }, "tournament": { "name": "ESL Pro League S24", "tier": null }, "format": "bo3", "score_for": 2, "score_against": 1, "kills": 52, "deaths": 36, "adr": 83.9 }, { "match_id": "01a1182b-0872-7c7e-ae11-1d773417293f", "date": "2026-10-09T11:34:05Z", "team": { "id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6", "name": "Vitality", "slug": "vitality" }, "opponent": { "id": "019f23d1-fb5b-7ea3-b633-bea71926e9a4", "name": "PARIVISION", "slug": "parivision" }, "tournament": { "name": "ESL Pro League Season 24", "tier": "S" }, "format": "bo3", "score_for": 2, "score_against": 0, "kills": 33, "deaths": 15, "adr": 86.3 }, { "match_id": "01a10875-b1e1-7490-8d83-779f5827114f", "date": "2026-10-05T16:30:56Z", "team": { "id": "019f23d1-fb5c-7be8-b53d-f9801eb21ee6", "name": "Vitality", "slug": "vitality" }, "opponent": { "id": "019f23d1-fb5c-7c64-bcb1-a61914dfa190", "name": "Falcons", "slug": "falcons-esports" }, "tournament": { "name": "ESL Pro League Season 24", "tier": "S" }, "format": "bo3", "score_for": 2, "score_against": 1, "kills": 28, "deaths": 22, "adr": 50 } ], "meta": { "count": 3, "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" }}A player's figures per map GET
Per competitive map the player has at least one recorded map on in the last 12 months: the maps played, ADR and KAST weighted by rounds, and kills per death. Each figure is `null` below 10 maps on that map; `n_adr` and `n_kast` count the maps that carry it. `active_pool` says whether the map is in the current Active Duty pool. Most played first; a map the player has not played in the window is absent. Enveloped `{"data": PlayerMaps}`.
A player's team history GET
The player's team history as stints, newest first. A stint is a run of consecutive matches for one team, taken from the team named on the player's line in each completed match. A run of fewer than `min_matches` (3) matches is a stand-in appearance and is left out unless it is the current one, and two runs for the same team split only by a left-out run are one stint. The newest stint is `current` only while its last match is within 90 days of the newest result in our data; otherwise no stint is current. Enveloped `{"data": PlayerTeams}`.