CS2 Maps and Rounds API
Map-level data: the active duty pool, the map catalog, and for each map played in a series its player stats, round history and events.
6 endpoints in this section. Authenticate with the x-api-key header; every response is { success, data, meta }. Other sections: Live, Player props, Odds, Matches, Rankings, Teams, Players, Events, Stats & leaderboards, Skins, Transfers, Search & reference.
Map player stats
Per-player stats for one map (game). These routes are equivalent; use whichever reads best.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| gameId (path)* | string | Game (map) id from /cs2/matches/{matchId}/games. |
Example
curl "https://api.citoapi.com/api/v1/cs2/games/GAME_ID/stats" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"entityType": "cs2_player_stat",
"id": "live-source-match-2399511-map-1-ICY",
"mapId": "cs2-match-2399511-map-1",
"matchId": "cs2-match-2399511",
"playerId": "cs2-player-21439",
"playerName": "ICY",
"teamId": "cs2-team-14079",
"teamName": "6yuBoJlbl",
"kills": 19,
"deaths": 8,
"assists": 4,
"plusMinus": 11,
"adr": 93.3,
"kast": 1,
"rating": 1.48,
"ratingVersion": "cito_rating_1",
"headshots": 9,
"headshotPercent": 0.474,
"firstKills": 3,
"firstDeaths": 0,
"lastSyncedAt": "2026-10-26T23:00:08.365Z",
"player": {
"id": "cs2-player-21439",
"nickname": "ICY",
"slug": "icy",
"realName": "Kaisar Faiznurov",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/fc696bbd45c54583432f75464b364bb1.webp",
"countryName": "Kazakhstan",
"countryCode": "KZ",
"age": 21,
"rating": 1.08,
"mapsPlayed": 72,
"careerStats": {
"rating": 1.08,
"lastKnownRating": 1.08
},
"currentTeamId": "cs2-team-14079",
"status": "active",
"primaryRole": "rifler",
"roleConfidence": "low",
"statusUpdatedAt": "2026-10-26T18:51:24.964Z",
"lastSyncedAt": "2026-10-26T21:03:24.662Z",
"lastVerified": "2026-10-26T21:03:24.662Z"
},
"team": {
"id": "cs2-team-14079",
"name": "6yuBoJlbl",
"slug": "6yubojlbl",
"teamTag": "6YUBOJLB",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/2bd9b801afba9b3dc5c28afd15014756.webp",
"countryName": "Kazakhstan",
"countryCode": "KZ",
"region": "Europe",
"worldRanking": 168,
"lastSyncedAt": "2026-10-26T23:00:07.690Z",
"lastVerified": "2026-10-26T23:00:07.690Z",
"confidence": "high",
"vrsRanking": 127
},
"availableSubresources": [],
"…": "6 more fields"
},
{
"entityType": "cs2_player_stat",
"id": "live-source-match-2399511-map-1-Pump",
"mapId": "cs2-match-2399511-map-1",
"matchId": "cs2-match-2399511",
"playerId": "cs2-player-23292",
"playerName": "Pump",
"teamId": "cs2-team-14079",
"teamName": "6yuBoJlbl",
"kills": 20,
"deaths": 10,
"assists": 2,
"plusMinus": 10,
"adr": 83,
"kast": 0.8,
"rating": 1.32,
"ratingVersion": "cito_rating_1",
"headshots": 11,
"headshotPercent": 0.55,
"firstKills": 3,
"firstDeaths": 1,
"lastSyncedAt": "2026-10-26T23:00:08.550Z",
"player": {
"id": "cs2-player-23292",
"nickname": "Pump",
"slug": "pump",
"realName": "Daniyar Buldybayev",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/fca11a766c59fe8c40d3eef11dce528e.webp",
"countryName": "Kazakhstan",
"countryCode": "KZ",
"age": 19,
"rating": 1,
"mapsPlayed": 33,
"careerStats": {
"rating": 1,
"lastKnownRating": 1
},
"currentTeamId": "cs2-team-14079",
"status": "active",
"primaryRole": "AWPer",
"roleConfidence": "high",
"statusUpdatedAt": "2026-10-26T18:51:25.865Z",
"lastSyncedAt": "2026-10-26T21:03:24.662Z",
"lastVerified": "2026-10-26T21:03:24.662Z"
}
…Map rounds
Round-by-round results for one map: winner, side and how each round ended. These routes are equivalent; use whichever reads best.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| gameId (path)* | string | Game (map) id from /cs2/matches/{matchId}/games. |
Example
curl "https://api.citoapi.com/api/v1/cs2/games/GAME_ID/rounds" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_map_round_timeline",
"mapId": "cs2-match-2399511-map-1",
"dataScope": "round_summaries_kill_damage_utility_purchase_equipment_events",
"unavailableEventTypes": [],
"rounds": [
{
"id": "7d78bad5-321b-4407-a009-c1293fb1a955",
"matchId": "cs2-match-2399511",
"mapId": "cs2-match-2399511-map-1",
"round": 1,
"startTick": 1817,
"endTick": 7136,
"durationTicks": 5319,
"winnerSide": "T",
"winnerTeamId": "cs2-team-13759",
"winnerTeamName": "mellren",
"winReason": "bomb_exploded",
"firstKillPlayerId": "cs2-player-26060",
"firstKillPlayerName": "Maksilvl",
"firstKillTeamId": "cs2-team-13759",
"firstDeathPlayerId": "cs2-player-11940",
"firstDeathPlayerName": "krao",
"firstDeathTeamId": "cs2-team-14079",
"tKills": 4,
"ctKills": 2,
"killCount": 6,
"events": [
{
"id": "270957a5-0d96-456b-a7ba-9d7cecad014f",
"matchId": "cs2-match-2399511",
"mapId": "cs2-match-2399511-map-1",
"round": 1,
"type": "purchase",
"tick": 600,
"seconds": 9.375,
"actor": {
"…": "…"
},
"target": {
"…": "…"
},
"assister": {
"…": "…"
},
"weapon": "Kevlar Vest",
"headshot": false,
"tradeKill": false,
"damage": null,
"confidence": "high",
"lastSyncedAt": "2026-10-26T21:03:39.836Z",
"details": {
"…": "…"
}
},
{
"id": "549807d0-8f33-4dcc-a10a-b7afad6d7db1",
"matchId": "cs2-match-2399511",
"mapId": "cs2-match-2399511-map-1",
"round": 1,
"type": "purchase",
"tick": 632,
"seconds": 9.875,
"actor": {
"…": "…"
},
"target": {
"…": "…"
},
"assister": {
"…": "…"
},
"weapon": "Smoke Grenade",
"headshot": false,
"tradeKill": false,
"damage": null,
"confidence": "high",
"lastSyncedAt": "2026-10-26T21:03:39.836Z",
"details": {
"…": "…"
}
}
],
"confidence": "high",
"lastSyncedAt": "2026-10-26T21:03:49.370Z"
},
{
"id": "aa909fd9-68dd-4bcb-b8c6-9e8413bff6e9",
"matchId": "cs2-match-2399511",
"mapId": "cs2-match-2399511-map-1",
"round": 2,
"startTick": 8736,
"endTick": 17228,
"durationTicks": 8492,
"winnerSide": "T",
"winnerTeamId": "cs2-team-13759",
"winnerTeamName": "mellren",
"winReason": "bomb_exploded",
"firstKillPlayerId": "cs2-player-25735",
"firstKillPlayerName": "mdl",
"firstKillTeamId": "cs2-team-13759",
"firstDeathPlayerId": "cs2-player-26683",
"firstDeathPlayerName": "stratefly",
"firstDeathTeamId": "cs2-team-14079",
"tKills": 4,
"ctKills": 2,
"killCount": 6,
"events": [
{
"id": "7e230903-a9d3-4e9b-bf39-e000f927e4fd",
"matchId": "cs2-match-2399511",
"mapId": "c
…Map events
Kills, utility, bomb and round events for one map, where demo data exists.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| gameId (path)* | string | Game (map) id from /cs2/matches/{matchId}/games. |
| limit | integer | Rows to return. Maximum 5000; larger values are reduced to 5000. |
Example
curl "https://api.citoapi.com/api/v1/cs2/games/GAME_ID/events" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"id": "270957a5-0d96-456b-a7ba-9d7cecad014f",
"matchId": "cs2-match-2399511",
"mapId": "cs2-match-2399511-map-1",
"round": 1,
"type": "purchase",
"tick": 600,
"seconds": 9.375,
"actor": {
"playerId": "cs2-player-13980",
"playerName": "lollipop21k",
"teamId": "cs2-team-13759",
"teamName": "mellren",
"side": "T"
},
"target": {
"playerId": null,
"playerName": null,
"teamId": null,
"teamName": null,
"side": null
},
"assister": {
"playerId": null,
"playerName": null,
"teamId": null,
"teamName": null
},
"weapon": "Kevlar Vest",
"headshot": false,
"tradeKill": false,
"damage": null,
"confidence": "high",
"lastSyncedAt": "2026-10-26T21:03:39.836Z",
"details": {
"itemName": "Kevlar Vest",
"cost": 650,
"wasSold": false,
"inventory": [
"Butterfly Knife",
"Glock-18"
],
"equipmentValue": 850,
"cashSpentThisRound": 650,
"buyType": "eco_or_pistol",
"hasHelmet": false,
"hasDefuser": false
}
},
{
"id": "549807d0-8f33-4dcc-a10a-b7afad6d7db1",
"matchId": "cs2-match-2399511",
"mapId": "cs2-match-2399511-map-1",
"round": 1,
"type": "purchase",
"tick": 632,
"seconds": 9.875,
"actor": {
"playerId": "cs2-player-25735",
"playerName": "mdl",
"teamId": "cs2-team-13759",
"teamName": "mellren",
"side": "T"
},
"target": {
"playerId": null,
"playerName": null,
"teamId": null,
"teamName": null,
"side": null
},
"assister": {
"playerId": null,
"playerName": null,
"teamId": null,
"teamName": null
},
"weapon": "Smoke Grenade",
"headshot": false,
"tradeKill": false,
"damage": null,
"confidence": "high",
"lastSyncedAt": "2026-10-26T21:03:39.836Z",
"details": {
"itemName": "Smoke Grenade",
"cost": 300,
"wasSold": false,
"inventory": [
"Karambit",
"Glock-18"
],
"equipmentValue": 500,
"cashSpentThisRound": 300,
"buyType": "eco_or_pistol",
"hasHelmet": false,
"hasDefuser": false
}
}
],
"meta": {
"count": 2,
"dataAvailable": true,
"dataScope": "kill_damage_utility_purchase_equipment_events",
"eventTypesAvailable": [
"kill",
"damage"
],
"unavailableEventTypes": [],
"limit": 2,
"total": 2,
"page": 1,
"totalPages": 1,
"hasNext": false,
"hasPrev": false
}
}Game details
One map (game) of a match with score, halves and winner.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| gameId (path)* | string | Game (map) id from /cs2/matches/{matchId}/games. |
Example
curl "https://api.citoapi.com/api/v1/cs2/games/GAME_ID" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"id": "cs2-match-2399511-map-1",
"entityType": "cs2_game",
"matchId": "cs2-match-2399511",
"mapNumber": 1,
"map": "Ancient",
"pickTeamId": null,
"winnerTeamId": "cs2-team-14079",
"score": {
"team1": 13,
"team2": 7
},
"halfScores": null,
"team1Halves": null,
"team2Halves": null,
"overtime": null,
"durationRounds": 20,
"duration": {
"rounds": 20,
"source": "stored"
},
"status": "completed",
"resultType": "played",
"resultStatus": "completed",
"isForfeit": false,
"statsEligible": true,
"unavailableReason": null,
"playerStatsAvailable": true,
"playerStats": [
{
"playerId": "cs2-player-21439",
"playerName": "ICY",
"teamId": "cs2-team-14079",
"teamName": "6yuBoJlbl",
"kills": 19,
"deaths": 8,
"assists": 4,
"plusMinus": 11,
"adr": 93.3,
"kast": 1,
"rating": 1.48,
"ratingVersion": "cito_rating_1",
"headshots": 9,
"headshotPercent": 0.474,
"openingKills": 3,
"openingDeaths": 0,
"ratingProfile": {
"rating": 1.48,
"ratingVersion": "cito_rating_1",
"components": {
"killsPerMap": 19,
"adr": 93.3,
"kast": 1,
"killsPlusAssistsPerDeath": 2.875
},
"openingDuels": {
"openingKills": 3,
"openingDeaths": 0,
"successRate": 1
},
"formula": "Cito Rating 1.0 per map: 0.30*KPR/0.683 + 0.25*(1-DPR)/0.305 + 0.25*ADR/74.1 + 0.15*KAST/0.716 + 0.05*APR/0.223 (per-…"
},
"lastSyncedAt": "2026-10-26T23:00:08.365Z"
},
{
"playerId": "cs2-player-26060",
"playerName": "Maksilvl",
"teamId": "cs2-team-13759",
"teamName": "mellren",
"kills": 13,
"deaths": 17,
"assists": 4,
"plusMinus": -4,
"adr": 64.4,
"kast": 0.7,
"rating": 0.82,
"ratingVersion": "cito_rating_1",
"headshots": 7,
"headshotPercent": 0.538,
"openingKills": 2,
"openingDeaths": 0,
"ratingProfile": {
"rating": 0.82,
"ratingVersion": "cito_rating_1",
"components": {
"killsPerMap": 13,
"adr": 64.4,
"kast": 0.7,
"killsPlusAssistsPerDeath": 1
},
"openingDuels": {
"openingKills": 2,
"openingDeaths": 0,
"successRate": 1
},
"formula": "Cito Rating 1.0 per map: 0.30*KPR/0.683 + 0.25*(1-DPR)/0.305 + 0.25*ADR/74.1 + 0.15*KAST/0.716 + 0.05*APR/0.223 (per-…"
},
"lastSyncedAt": "2026-10-26T23:00:09.044Z"
}
],
"roundsAvailable": false,
"objectiveStats": {
"dataAvailable": false,
"unavailableReason": "not_yet_indexed",
"confidence": {
"plants": "high",
"defuses": "high",
"explosions": "high",
"clutchDefuse": "medium"
},
"teamStats": [],
"roundEvents": []
},
"…": "4 more fields"
},
"meta": {
"dataAvailable": true,
"source": "match_maps"
}
}Map catalog
Every competitive map with its name and image.
Example
curl "https://api.citoapi.com/api/v1/cs2/maps" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"id": "de_ancient",
"slug": "ancient",
"name": "Ancient",
"mapNameCanonical": "Ancient",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
"mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
"coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png"
},
{
"id": "de_anubis",
"slug": "anubis",
"name": "Anubis",
"mapNameCanonical": "Anubis",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
"mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
"coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png"
}
],
"meta": {
"count": 10,
"source": "static_catalog",
"limit": 10,
"total": 10,
"page": 1,
"totalPages": 1,
"hasNext": false,
"hasPrev": false
}
}Active map pool
The maps in the current competitive pool. These routes are equivalent; use whichever reads best.
Example
curl "https://api.citoapi.com/api/v1/cs2/map-pool" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_active_duty_map_pool",
"asOf": "2026-10-26",
"poolName": "Active Duty",
"inPoolCount": 7,
"maps": [
{
"id": "de_ancient",
"slug": "ancient",
"name": "Ancient",
"status": "in_pool",
"inPoolSince": "2023-09-27",
"removedAt": null,
"mapNameCanonical": "Ancient",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
"mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
"coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
"inPool": true,
"pickTeamId": null,
"objectiveStats": {
"dataAvailable": false,
"unavailableReason": "not_yet_indexed",
"confidence": {
"plants": "high",
"defuses": "high",
"explosions": "high",
"clutchDefuse": "medium"
},
"teamStats": [],
"roundEvents": []
}
},
{
"id": "de_anubis",
"slug": "anubis",
"name": "Anubis",
"status": "in_pool",
"inPoolSince": "2023-09-27",
"removedAt": null,
"mapNameCanonical": "Anubis",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
"mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
"coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
"inPool": true,
"pickTeamId": null,
"objectiveStats": {
"dataAvailable": false,
"unavailableReason": "not_yet_indexed",
"confidence": {
"plants": "high",
"defuses": "high",
"explosions": "high",
"clutchDefuse": "medium"
},
"teamStats": [],
"roundEvents": []
}
}
],
"inPool": [
{
"id": "de_ancient",
"slug": "ancient",
"name": "Ancient",
"status": "in_pool",
"inPoolSince": "2023-09-27",
"removedAt": null,
"mapNameCanonical": "Ancient",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
"mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
"coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
"inPool": true
},
{
"id": "de_anubis",
"slug": "anubis",
"name": "Anubis",
"status": "in_pool",
"inPoolSince": "2023-09-27",
"removedAt": null,
"mapNameCanonical": "Anubis",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
"mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
"coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png",
"inPool": true
}
],
"removed": [
{
"id": "de_overpass",
"slug": "overpass",
"name": "Overpass",
"status": "removed",
"inPoolSince": "2025-07-01",
"removedAt": "2026-07-06",
"mapNameCanonical": "Overpass",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/overpass.png",
"mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/overpass.png",
"c
…Try the CS2 Maps and Rounds API
Run a real request with your key, then wire the same call into your app. The free plan includes 500 requests a month.
curl "https://api.citoapi.com/api/v1/cs2/map-pool" \
-H "x-api-key: YOUR_API_KEY"