CS2 Matches API
Schedules, results and everything recorded about a single series: maps played, player stats per map, lineup form, head-to-head history, streams and demo links.
17 endpoints in this section. Authenticate with the x-api-key header; every response is { success, data, meta }. Other sections: Live, Player props, Odds, Maps & rounds, Rankings, Teams, Players, Events, Stats & leaderboards, Skins, Transfers, Search & reference.
Today's matches
Matches scheduled, live or finished today (UTC).
Query parameters
| Parameter | Type | Description |
|---|---|---|
| days | integer | Look-back window in days. |
| event | string | Event id or slug. |
| eventId | string | Filter by eventId. |
| event_id | string | Filter by event_id. |
| fields | string | Comma-separated list of fields to return. |
| from | string | Start of the date range (ISO 8601, UTC). |
| include | string | odds adds every match's bookmaker odds (odds[], the same rows as /cs2/matches/{matchId}/odds, series winner h2h first); see below. player_props adds playerProps[]: the match's open pick'em lines per player and market, every provider side by side with lineSpread (same access as odds). Combine with a comma: include=odds,player_props. |
| limit | integer | Rows to return. Maximum 200; larger values are reduced to 200. |
| offset | integer | Rows to skip, for paging. |
| order | string | Filter by order. |
| page | integer | Page number, starting at 1. |
| playerId | string | Player id or slug. |
| player_id | string | Player id or slug. |
| sort | string | Sort order. |
| status | string | Filter by status. |
| summary | boolean | true returns a summary instead of full rows. |
| team | string | Team id or slug. |
| teamId | string | Team id or slug. |
| team_id | string | Team id or slug. |
| to | string | End of the date range (ISO 8601, UTC). |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/today" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"entityType": "cs2_match",
"id": "cs2-match-2399511",
"eventId": "cs2-event-9457",
"eventName": "CCT 2026 Europe Series 12",
"eventSlug": "cct-2026-europe-series-12",
"stageName": null,
"startsAt": "2026-10-26T18:00:00.000Z",
"endsAt": "2026-10-26T19:43:51.563Z",
"bestOf": 3,
"status": "completed",
"team1Id": "cs2-team-14079",
"team2Id": "cs2-team-13759",
"team1Name": "6yuBoJlbl",
"team2Name": "mellren",
"team1Score": 2,
"team2Score": 0,
"winnerTeamId": "cs2-team-14079",
"vetoOrder": [
{
"map": "cache",
"raw": "mellren removed cache",
"order": 1,
"action": "ban",
"teamId": "cs2-team-13759",
"teamName": "mellren",
"mapName": "cache",
"mapNumber": null
},
{
"map": "anubis",
"raw": "6yuBoJlbl removed anubis",
"order": 2,
"action": "ban",
"teamId": "cs2-team-14079",
"teamName": "6yuBoJlbl",
"mapName": "anubis",
"mapNumber": null
}
],
"lastSyncedAt": "2026-10-26T23:00:07.894Z",
"lastVerified": "2026-10-26T23:00:07.894Z",
"confidence": "high",
"event": {
"id": "cs2-event-9457",
"name": "CCT 2026 Europe Series 12",
"slug": "cct-2026-europe-series-12",
"imageUrl": null,
"prizePool": 25000,
"currency": "USD",
"tier": "B",
"prestigeScore": 55,
"status": "live",
"region": null,
"startsAt": "2026-10-20T00:00:00.000Z",
"endsAt": "2026-11-01T23:59:59.000Z",
"eventId": "cs2-event-9457",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/84c5784ace42c65b04af8f2e1e559ef7.webp",
"bannerImageUrl": null
},
"team1": {
"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",
"worldRanking": 168,
"vrsRanking": 127
},
"team2": {
"id": "cs2-team-13759",
"name": "mellren",
"slug": "mellren",
"teamTag": "MELLREN",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/6d9ceaed8dc50267468af33e17b91310.webp",
"countryName": "Belarus",
"countryCode": "BY",
"worldRanking": 91,
"vrsRanking": 133
},
"…": "17 more fields"
},
{
"entityType": "cs2_match",
"id": "cs2-match-2399119",
"eventId": "cs2-event-9440",
"eventName": "NODWIN Clutch Series 13",
"eventSlug": "nodwin-clutch-series-13",
"stageName": null,
"startsAt": "2026-10-26T18:00:00.000Z",
"endsAt": "2026-10-26T21:33:51.696Z",
"bestOf": 3,
"status": "completed",
"team1Id": "cs2-team-13027",
"team2Id": "cs2-team-12267",
"team1Name": "Nuclear TigeRES",
"team2Name": "UNiTY",
"team1Score": 2,
"team2Score": 1,
"winnerTeamId": "cs2-team-13027",
"vetoOrder": [
{
"map": "nuke",
"raw": "UNiTY removed nuke",
"order": 1,
"action": "ban",
"teamId": "cs2-team-12267",
"teamName":
…Past matches
Finished matches, newest first, with date-range filters. Each finished match carries resultType (played, forfeit = nothing played and the series awarded, partial_forfeit = some maps played and the rest conceded), isForfeit and forfeitedMaps.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| date_end | string | Same as to. |
| date_start | string | Same as from. |
| days | integer | Look-back window in days (default 7, max 90). Ignored when from or to is given. |
| event | string | Event id or slug. |
| eventId | string | Filter by eventId. |
| event_id | string | Filter by event_id. |
| fields | string | Comma-separated list of fields to return. |
| from | string | Start of the date range (YYYY-MM-DD or ISO 8601, UTC). Alias date_start. |
| include | string | odds adds every match's bookmaker odds (odds[], the same rows as /cs2/matches/{matchId}/odds, series winner h2h first); see below. player_props adds playerProps[]: the match's open pick'em lines per player and market, every provider side by side with lineSpread (same access as odds). Combine with a comma: include=odds,player_props. |
| limit | integer | Rows to return. Maximum 200; larger values are reduced to 200. |
| offset | integer | Rows to skip, for paging. |
| order | string | Filter by order. |
| page | integer | Page number, starting at 1. |
| playerId | string | Player id or slug. |
| player_id | string | Player id or slug. |
| sort | string | Sort order. |
| status | string | Filter by status. |
| summary | boolean | true returns a summary instead of full rows. |
| team | string | Team id or slug. |
| teamId | string | Team id or slug. |
| team_id | string | Team id or slug. |
| to | string | End of the date range (YYYY-MM-DD or ISO 8601, UTC); a date-only value includes that whole day. Alias date_end. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/past" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"entityType": "cs2_match",
"id": "cs2-match-2399511",
"eventId": "cs2-event-9457",
"eventName": "CCT 2026 Europe Series 12",
"eventSlug": "cct-2026-europe-series-12",
"stageName": null,
"startsAt": "2026-10-26T18:00:00.000Z",
"endsAt": "2026-10-26T19:43:51.563Z",
"bestOf": 3,
"status": "completed",
"team1Id": "cs2-team-14079",
"team2Id": "cs2-team-13759",
"team1Name": "6yuBoJlbl",
"team2Name": "mellren",
"team1Score": 2,
"team2Score": 0,
"winnerTeamId": "cs2-team-14079",
"vetoOrder": [
{
"map": "cache",
"raw": "mellren removed cache",
"order": 1,
"action": "ban",
"teamId": "cs2-team-13759",
"teamName": "mellren",
"mapName": "cache",
"mapNumber": null
},
{
"map": "anubis",
"raw": "6yuBoJlbl removed anubis",
"order": 2,
"action": "ban",
"teamId": "cs2-team-14079",
"teamName": "6yuBoJlbl",
"mapName": "anubis",
"mapNumber": null
}
],
"lastSyncedAt": "2026-10-26T23:00:07.894Z",
"lastVerified": "2026-10-26T23:00:07.894Z",
"confidence": "high",
"event": {
"id": "cs2-event-9457",
"name": "CCT 2026 Europe Series 12",
"slug": "cct-2026-europe-series-12",
"imageUrl": null,
"prizePool": 25000,
"currency": "USD",
"tier": "B",
"prestigeScore": 55,
"status": "live",
"region": null,
"startsAt": "2026-10-20T00:00:00.000Z",
"endsAt": "2026-11-01T23:59:59.000Z",
"eventId": "cs2-event-9457",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/84c5784ace42c65b04af8f2e1e559ef7.webp",
"bannerImageUrl": null
},
"team1": {
"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",
"worldRanking": 168,
"vrsRanking": 127
},
"team2": {
"id": "cs2-team-13759",
"name": "mellren",
"slug": "mellren",
"teamTag": "MELLREN",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/6d9ceaed8dc50267468af33e17b91310.webp",
"countryName": "Belarus",
"countryCode": "BY",
"worldRanking": 91,
"vrsRanking": 133
},
"…": "17 more fields"
},
{
"entityType": "cs2_match",
"id": "cs2-match-2399119",
"eventId": "cs2-event-9440",
"eventName": "NODWIN Clutch Series 13",
"eventSlug": "nodwin-clutch-series-13",
"stageName": null,
"startsAt": "2026-10-26T18:00:00.000Z",
"endsAt": "2026-10-26T21:33:51.696Z",
"bestOf": 3,
"status": "completed",
"team1Id": "cs2-team-13027",
"team2Id": "cs2-team-12267",
"team1Name": "Nuclear TigeRES",
"team2Name": "UNiTY",
"team1Score": 2,
"team2Score": 1,
"winnerTeamId": "cs2-team-13027",
"vetoOrder": [
{
"map": "nuke",
"raw": "UNiTY removed nuke",
"order": 1,
"action": "ban",
"teamId": "cs2-team-12267",
"teamName":
…Search matches
Find matches by team or event name.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| limit | integer | Rows to return. Maximum 100; larger values are reduced to 100. |
| q* | string | Search text. |
| query | string | Filter by query. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/search" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"entityType": "cs2_match",
"id": "cs2-match-2399852",
"eventId": "cs2-event-8251",
"eventName": "BLAST Rivals 2026 Season 2",
"eventSlug": "blast-rivals-2026-season-2",
"stageName": null,
"startsAt": "2026-11-11T05:30:00.000Z",
"endsAt": null,
"bestOf": 3,
"status": "upcoming",
"team1Id": "cs2-team-9565",
"team2Id": "cs2-team-11283",
"team1Name": "Vitality",
"team2Name": "Falcons",
"team1Score": null,
"team2Score": null,
"winnerTeamId": null,
"vetoOrder": [],
"lastSyncedAt": "2026-10-26T22:44:00.250Z",
"lastVerified": "2026-10-26T22:44:00.250Z",
"confidence": "high",
"event": {
"id": "cs2-event-8251",
"name": "BLAST Rivals 2026 Season 2",
"slug": "blast-rivals-2026-season-2",
"imageUrl": null,
"prizePool": 1000000,
"currency": "USD",
"tier": "A",
"prestigeScore": 80,
"status": "upcoming",
"region": "Europe",
"startsAt": "2026-11-11T00:00:00.000Z",
"endsAt": "2026-11-15T23:59:59.000Z",
"eventId": "cs2-event-8251",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/9a11314f2b67c8ef270530053d054d49.webp",
"bannerImageUrl": null
},
"team1": {
"id": "cs2-team-9565",
"name": "Vitality",
"slug": "vitality",
"teamTag": "VITALITY",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp",
"countryName": "Europe",
"countryCode": null,
"worldRanking": 2,
"alternateLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp",
"darkUiLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp",
"vrsRanking": 1
},
"team2": {
"id": "cs2-team-11283",
"name": "Falcons",
"slug": "falcons",
"teamTag": "FALCONS",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/4c8ec6825eb47a8cdd03650e31e74831.webp",
"countryName": "Europe",
"countryCode": null,
"worldRanking": 6,
"vrsRanking": 7
},
"…": "18 more fields"
},
{
"entityType": "cs2_match",
"id": "cs2-match-2399747",
"eventId": "cs2-event-8050",
"eventName": "PGL Masters Bucharest 2026",
"eventSlug": "pgl-masters-bucharest-2026",
"stageName": null,
"startsAt": "2026-10-27T17:00:00.000Z",
"endsAt": null,
"bestOf": 3,
"status": "upcoming",
"team1Id": "cs2-team-9565",
"team2Id": "cs2-team-4608",
"team1Name": "Vitality",
"team2Name": "Natus Vincere",
"team1Score": null,
"team2Score": null,
"winnerTeamId": null,
"vetoOrder": [],
"lastSyncedAt": "2026-10-26T22:47:08.097Z",
"lastVerified": "2026-10-26T22:47:08.097Z",
"confidence": "high",
"event": {
"id": "cs2-event-8050",
"name": "PGL Masters Bucharest 2026",
"slug": "pgl-masters-bucharest-2026",
"imageUrl": null,
"prizePool": 1250000,
"currency": "USD",
"tier": "A",
"prestigeScore": 80,
"status": "live",
"region": "Europe",
"startsAt": "2026-10-24T00:00:00.000Z",
"endsAt": "2026-10-31T23:5
…Upcoming matches
Scheduled matches, soonest first. **Odds in the same call:** match lists carry no odds by default (a client reading `odds` gets nothing). Add `?include=odds` (also on `/cs2/matches`, `/live`, `/recent`, `/today` and `/past`) and every match gets `odds[]`: the latest price per bookmaker and market, `h2h` (series winner) first, then `map_h2h_1`, `map_h2h_2`, ... Each row has `team1Odds`, `team2Odds`, `market`, `marketStatus` (`open`, `suspended`, `closed`) and `capturedAt`. `meta.oddsIncluded` and `meta.matchesWithOdds` summarise the list; a match with no market has `odds: []`. **Plans.** Odds are included on Pro and above, and every new account gets a 3-day odds trial. Without odds access the list is still returned, with `meta.oddsIncluded: false` and `meta.oddsError` explaining how to upgrade. These routes are equivalent; use whichever reads best.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| include | string | Odds are embedded by default for keys with odds access (Pro and above, or the 3-day trial): every row has odds[] (series winner h2h first, then each map, with implied probabilities and market depth: liquidityUsd, volumeUsd, spread), h2hOdds (the match-winner line, or null) and oddsAvailable. Without access rows carry odds: [] and meta.oddsError. include=odds is accepted and changes nothing here. include=player_props adds playerProps[]: the match's open pick'em lines per player and market, every provider side by side with lineSpread (same access as odds). |
| limit | integer | Rows to return. Maximum 100; larger values are reduced to 100. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/upcoming" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"entityType": "cs2_match",
"id": "cs2-match-2399891",
"eventId": "cs2-event-9414",
"eventName": "DFRAG Invitational 2026",
"eventSlug": "dfrag-invitational-2026",
"stageName": null,
"startsAt": "2026-10-27T03:00:00.000Z",
"endsAt": null,
"bestOf": 3,
"status": "upcoming",
"team1Id": "cs2-team-9881",
"team2Id": "cs2-team-13686",
"team1Name": "Rooster",
"team2Name": "Abyssal",
"team1Score": null,
"team2Score": null,
"winnerTeamId": null,
"liveState": {
"status": "upcoming",
"team1Score": null,
"team2Score": null,
"winnerTeamId": null
},
"vetoOrder": [],
"streamLinks": null,
"vodLinks": [],
"lastSyncedAt": "2026-10-26T22:46:45.233Z",
"lastVerified": "2026-10-26T22:46:45.233Z",
"confidence": "high",
"odds": [
{
"oddsKey": "polymarket:6066525",
"matchId": "cs2-match-2399891",
"provider": "polymarket",
"market": "h2h",
"team1Odds": 2.27,
"team2Odds": 1.79,
"drawOdds": null,
"team1ImpliedProb": 0.4405,
"team2ImpliedProb": 0.5587,
"liquidityUsd": 6364.1826,
"volumeUsd": 871.9789410000001,
"volume24hUsd": 871.978941,
"bestBid": 0.42,
"bestAsk": 0.46,
"spread": 0.04,
"marketStatus": "open",
"capturedAt": "2026-10-26T23:00:12.069Z"
},
{
"oddsKey": "polymarket:6066523",
"matchId": "cs2-match-2399891",
"provider": "polymarket",
"market": "map_h2h_1",
"team1Odds": 2.13,
"team2Odds": 1.89,
"drawOdds": null,
"team1ImpliedProb": 0.4695,
"team2ImpliedProb": 0.5291,
"liquidityUsd": 2329.1896,
"volumeUsd": 1164.769039,
"volume24hUsd": 1164.769039,
"bestBid": 0.46,
"bestAsk": 0.48,
"spread": 0.02,
"marketStatus": "open",
"capturedAt": "2026-10-26T23:00:12.069Z"
}
],
"…": "22 more fields"
},
{
"entityType": "cs2_match",
"id": "cs2-match-2399890",
"eventId": "cs2-event-9414",
"eventName": "DFRAG Invitational 2026",
"eventSlug": "dfrag-invitational-2026",
"stageName": null,
"startsAt": "2026-10-27T03:00:00.000Z",
"endsAt": null,
"bestOf": 3,
"status": "upcoming",
"team1Id": "cs2-team-12774",
"team2Id": "cs2-team-13997",
"team1Name": "FlyQuest",
"team2Name": "Staqued",
"team1Score": null,
"team2Score": null,
"winnerTeamId": null,
"liveState": {
"status": "upcoming",
"team1Score": null,
"team2Score": null,
"winnerTeamId": null
},
"vetoOrder": [],
"streamLinks": null,
"vodLinks": [],
"lastSyncedAt": "2026-10-26T22:46:42.834Z",
"lastVerified": "2026-10-26T22:46:42.834Z",
"confidence": "high",
"odds": [
{
"oddsKey": "polymarket:6066520",
"matchId": "cs2-match-2399890",
"provider": "polymarket",
"market": "h2h",
"team1Odds": 1.04,
"team2Odds": 24.69,
"drawOdds": null,
"team1ImpliedProb": 0.9615,
"team2ImpliedProb": 0.0405,
"liquidityUsd": 5130.49436,
"volumeU
…Recent results
Finished matches with final series score and winner, newest first. These routes are equivalent; use whichever reads best.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| date_end | string | Same as to. |
| date_start | string | Same as from. |
| from | string | Start of the date range (YYYY-MM-DD or ISO 8601, UTC). Alias date_start. |
| include | string | odds adds every match's bookmaker odds (odds[], the same rows as /cs2/matches/{matchId}/odds, series winner h2h first); see below. player_props adds playerProps[]: the match's open pick'em lines per player and market, every provider side by side with lineSpread (same access as odds). Combine with a comma: include=odds,player_props. |
| limit | integer | Rows to return. Maximum 100; larger values are reduced to 100. |
| to | string | End of the date range (YYYY-MM-DD or ISO 8601, UTC); a date-only value includes that whole day. Alias date_end. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/recent" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"entityType": "cs2_match",
"id": "cs2-match-2399511",
"eventId": "cs2-event-9457",
"eventName": "CCT 2026 Europe Series 12",
"eventSlug": "cct-2026-europe-series-12",
"stageName": null,
"startsAt": "2026-10-26T18:00:00.000Z",
"endsAt": "2026-10-26T19:43:51.563Z",
"bestOf": 3,
"status": "completed",
"team1Id": "cs2-team-14079",
"team2Id": "cs2-team-13759",
"team1Name": "6yuBoJlbl",
"team2Name": "mellren",
"team1Score": 2,
"team2Score": 0,
"winnerTeamId": "cs2-team-14079",
"vetoOrder": [
{
"map": "cache",
"raw": "mellren removed cache",
"order": 1,
"action": "ban",
"teamId": "cs2-team-13759",
"teamName": "mellren",
"mapName": "cache",
"mapNumber": null
},
{
"map": "anubis",
"raw": "6yuBoJlbl removed anubis",
"order": 2,
"action": "ban",
"teamId": "cs2-team-14079",
"teamName": "6yuBoJlbl",
"mapName": "anubis",
"mapNumber": null
}
],
"lastSyncedAt": "2026-10-26T23:00:07.894Z",
"lastVerified": "2026-10-26T23:00:07.894Z",
"confidence": "high",
"event": {
"id": "cs2-event-9457",
"name": "CCT 2026 Europe Series 12",
"slug": "cct-2026-europe-series-12",
"imageUrl": null,
"prizePool": 25000,
"currency": "USD",
"tier": "B",
"prestigeScore": 55,
"status": "live",
"region": null,
"startsAt": "2026-10-20T00:00:00.000Z",
"endsAt": "2026-11-01T23:59:59.000Z",
"eventId": "cs2-event-9457",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/84c5784ace42c65b04af8f2e1e559ef7.webp",
"bannerImageUrl": null
},
"team1": {
"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",
"worldRanking": 168,
"vrsRanking": 127
},
"team2": {
"id": "cs2-team-13759",
"name": "mellren",
"slug": "mellren",
"teamTag": "MELLREN",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/6d9ceaed8dc50267468af33e17b91310.webp",
"countryName": "Belarus",
"countryCode": "BY",
"worldRanking": 91,
"vrsRanking": 133
},
"…": "17 more fields"
},
{
"entityType": "cs2_match",
"id": "cs2-match-2399119",
"eventId": "cs2-event-9440",
"eventName": "NODWIN Clutch Series 13",
"eventSlug": "nodwin-clutch-series-13",
"stageName": null,
"startsAt": "2026-10-26T18:00:00.000Z",
"endsAt": "2026-10-26T21:33:51.696Z",
"bestOf": 3,
"status": "completed",
"team1Id": "cs2-team-13027",
"team2Id": "cs2-team-12267",
"team1Name": "Nuclear TigeRES",
"team2Name": "UNiTY",
"team1Score": 2,
"team2Score": 1,
"winnerTeamId": "cs2-team-13027",
"vetoOrder": [
{
"map": "nuke",
"raw": "UNiTY removed nuke",
"order": 1,
"action": "ban",
"teamId": "cs2-team-12267",
"teamName":
…Match streams
Broadcast links for a match, when known.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/streams" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_match_streams",
"matchId": "cs2-match-2399511",
"streams": [
{
"platform": "kick",
"language": "en",
"url": "https://kick.com/cct_cs2"
},
{
"platform": "twitch",
"language": "ru",
"url": "https://www.twitch.tv/betboom_cs_ru4"
}
]
},
"meta": {
"count": 2,
"limit": 2,
"total": 2,
"page": 1,
"totalPages": 1,
"hasNext": false,
"hasPrev": false
}
}Match head-to-head
Previous meetings between the two teams in this match.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
| limit | integer | Rows to return. Maximum 250; larger values are reduced to 250. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/head-to-head" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_team_h2h",
"team": {
"id": "cs2-team-14079",
"name": "6yuBoJlbl"
},
"opponent": {
"id": "cs2-team-13759",
"name": "mellren"
},
"totalMatches": 1,
"matchRecord": {
"teamWins": 1,
"opponentWins": 0,
"teamWinPercent": 100,
"opponentWinPercent": 0
},
"mapRecord": {
"teamWins": 2,
"opponentWins": 0,
"totalDecidedMaps": 2,
"teamWinPercent": 100,
"opponentWinPercent": 0
},
"mapBreakdown": [
{
"mapName": "Ancient",
"played": 1,
"teamWins": 1,
"opponentWins": 0,
"teamWinPercent": 100,
"opponentWinPercent": 0,
"roundsFor": 13,
"roundsAgainst": 7,
"roundDifferential": 6
},
{
"mapName": "Mirage",
"played": 1,
"teamWins": 1,
"opponentWins": 0,
"teamWinPercent": 100,
"opponentWinPercent": 0,
"roundsFor": 13,
"roundsAgainst": 7,
"roundDifferential": 6
}
],
"recent5Matches": [
{
"matchId": "cs2-match-2399511",
"status": "completed",
"startsAt": "2026-10-26T18:00:00.000Z",
"eventName": "CCT 2026 Europe Series 12",
"bestOf": 3,
"opponentId": "cs2-team-13759",
"opponentName": "mellren",
"teamScore": 2,
"opponentScore": 0,
"score": "2-0",
"result": "W",
"maps": [
{
"mapId": "cs2-match-2399511-map-1",
"mapNumber": 1,
"mapName": "Ancient",
"status": "completed",
"teamScore": 13,
"opponentScore": 7,
"score": "13-7",
"result": "W",
"winnerTeamId": "cs2-team-14079",
"roundsFor": 13,
"roundsAgainst": 7
},
{
"mapId": "cs2-match-2399511-map-2",
"mapNumber": 2,
"mapName": "Mirage",
"status": "completed",
"teamScore": 13,
"opponentScore": 7,
"score": "13-7",
"result": "W",
"winnerTeamId": "cs2-team-14079",
"roundsFor": 13,
"roundsAgainst": 7
}
]
}
],
"matches": [
{
"matchId": "cs2-match-2399511",
"status": "completed",
"startsAt": "2026-10-26T18:00:00.000Z",
"eventName": "CCT 2026 Europe Series 12",
"bestOf": 3,
"opponentId": "cs2-team-13759",
"opponentName": "mellren",
"teamScore": 2,
"opponentScore": 0,
"score": "2-0",
"result": "W",
"maps": [
{
"mapId": "cs2-match-2399511-map-1",
"mapNumber": 1,
"mapName": "Ancient",
"status": "completed",
"teamScore": 13,
"opponentScore": 7,
"score": "13-7",
"result": "W",
"winnerTeamId": "cs2-team-14079",
"roundsFor": 13,
"roundsAgainst": 7
},
{
"mapId": "cs2-match-2399511-map-2",
"mapNumber": 2,
"mapName": "Mirage",
"status": "completed",
"teamScore": 13,
"opponentScore": 7,
"score": "13-7",
"result": "W",
"winnerTeamId": "cs2-team-14079",
"roundsFor": 13,
"roundsAgainst": 7
…Match demos
Demo availability per map, and whether each demo has been parsed into round data.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
| limit | integer | Rows to return. Maximum 100; larger values are reduced to 100. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/demos" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_match_demos",
"matchId": "cs2-match-2399511",
"teams": {
"team1Name": "6yuBoJlbl",
"team2Name": "mellren"
},
"eventName": "CCT 2026 Europe Series 12",
"dataAvailable": true,
"demos": [
{
"demoKey": "cs2-match-2399511:cs2-match-2399511-map-1",
"matchId": "cs2-match-2399511",
"mapId": "cs2-match-2399511-map-1",
"status": "available",
"parsed": true,
"parseStatus": "parsed",
"unavailableReason": null,
"demoUrl": null,
"archiveUrl": null,
"archiveBytes": "361182769",
"checksum": null,
"lastCheckedAt": "2026-10-26T21:03:49.587Z"
},
{
"demoKey": "cs2-match-2399511:cs2-match-2399511-map-2",
"matchId": "cs2-match-2399511",
"mapId": "cs2-match-2399511-map-2",
"status": "available",
"parsed": true,
"parseStatus": "parsed",
"unavailableReason": null,
"demoUrl": null,
"archiveUrl": null,
"archiveBytes": "361182769",
"checksum": null,
"lastCheckedAt": "2026-10-26T21:03:48.915Z"
}
]
},
"meta": {
"count": 2,
"dataAvailable": true,
"limit": 2,
"total": 2,
"page": 1,
"totalPages": 1,
"hasNext": false,
"hasPrev": false
}
}Match maps
Maps played or scheduled in a match: map name, score, halves and winner.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/maps" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"entityType": "cs2_map",
"id": "cs2-match-2399511-map-1",
"matchId": "cs2-match-2399511",
"mapNumber": 1,
"mapName": "Ancient",
"status": "completed",
"team1Score": 13,
"team2Score": 7,
"team1Halves": null,
"team2Halves": null,
"winnerTeamId": "cs2-team-14079",
"durationRounds": 20,
"lastSyncedAt": "2026-10-26T23:00:08.134Z",
"playerStats": [
{
"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",
"mapNameCanonical": null,
"imageUrl": null,
"mapImageUrl": null,
"coverImageUrl": null,
"…": "6 more fields"
},
{
"id": "live-source-match-2399511-map-1-Maksilvl",
"mapId": "cs2-match-2399511-map-1",
"matchId": "cs2-match-2399511",
"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,
"firstKills": 2,
"firstDeaths": 0,
"lastSyncedAt": "2026-10-26T23:00:09.044Z",
"mapNameCanonical": null,
"imageUrl": null,
"mapImageUrl": null,
"coverImageUrl": null,
"…": "6 more fields"
}
],
"bombEvents": [],
"bombStats": [],
"weaponAggregates": [
{
"id": "80c76a18-b5be-4f4d-a3e5-542e4a62afdf",
"scopeType": "map",
"scopeId": "cs2-match-2399511-map-1",
"eventId": "cs2-event-9457",
"matchId": "cs2-match-2399511",
"mapId": "cs2-match-2399511-map-1",
"weapon": "AK-47",
"kills": 48,
"headshots": 27,
"percent": 34.5324,
"demoCount": 1,
"confidence": "high",
"lastSyncedAt": "2026-10-26T21:27:02.801Z",
"mapNameCanonical": null,
"imageUrl": null,
"mapImageUrl": null,
"coverImageUrl": null,
"resultType": "played",
"resultStatus": "completed",
"isForfeit": false,
"statsEligible": true,
"unavailableReason": null,
"dataAvailability": {
"playerStats": {
"…": "…"
}
}
},
{
"id": "ced4ddd3-6f54-4564-b6f1-ec8e52c5d4f7",
"scopeType": "map",
"scopeId": "cs2-match-2399511-map-1",
"eventId": "cs2-event-9457",
"matchId": "cs2-match-2399511",
"mapId": "cs2-match-2399511-map-1",
"weapon": "M4A1-S",
"kills": 25
…Match veto
The map veto in order: each ban, pick and the decider with the team that made it. vetoStatus is complete, forfeit_no_veto (a forfeit, no veto held), unavailable (finished, veto not published) or pending (not played yet); vetoOrder is always an array. These routes are equivalent; use whichever reads best.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/veto" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_match_veto",
"matchId": "cs2-match-2399511",
"status": "completed",
"bestOf": 3,
"team1Id": "cs2-team-14079",
"team2Id": "cs2-team-13759",
"team1Name": "6yuBoJlbl",
"team2Name": "mellren",
"vetoStatus": "complete",
"vetoOrder": [
{
"map": "cache",
"order": 1,
"action": "ban",
"teamId": "cs2-team-13759",
"teamName": "mellren",
"mapName": "cache",
"mapNumber": null
},
{
"map": "anubis",
"order": 2,
"action": "ban",
"teamId": "cs2-team-14079",
"teamName": "6yuBoJlbl",
"mapName": "anubis",
"mapNumber": null
}
],
"maps": [
{
"id": "cs2-match-2399511-map-1",
"mapNumber": 1,
"mapName": "Ancient",
"status": "completed",
"pickTeamId": "cs2-team-13759",
"winnerTeamId": "cs2-team-14079",
"team1Score": 13,
"team2Score": 7,
"mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png",
"objectiveStats": {
"dataAvailable": false,
"unavailableReason": "not_yet_indexed",
"confidence": {
"plants": "high",
"defuses": "high",
"explosions": "high",
"clutchDefuse": "medium"
},
"teamStats": [],
"roundEvents": []
},
"mapNameCanonical": "Ancient",
"imageUrl": "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",
"resultType": "played",
"resultStatus": "completed",
"isForfeit": false,
"statsEligible": true,
"unavailableReason": null,
"dataAvailability": {
"playerStats": {
"dataAvailable": false,
"unavailableReason": "not_yet_indexed"
}
}
},
{
"id": "cs2-match-2399511-map-2",
"mapNumber": 2,
"mapName": "Mirage",
"status": "completed",
"pickTeamId": "cs2-team-14079",
"winnerTeamId": "cs2-team-14079",
"team1Score": 13,
"team2Score": 7,
"mapImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png",
"objectiveStats": {
"dataAvailable": false,
"unavailableReason": "not_yet_indexed",
"confidence": {
"plants": "high",
"defuses": "high",
"explosions": "high",
"clutchDefuse": "medium"
},
"teamStats": [],
"roundEvents": []
},
"mapNameCanonical": "Mirage",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png",
"coverImageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png",
"resultType": "played",
"resultStatus": "completed",
"isForfeit": false,
"statsEligible": true,
"unavailableReason": null,
"dataAvailability": {
"playerStats": {
"dataAvailable": false,
"unavailableReason": "not_yet_indexed"
}
}
}
],
"dataAvailable": true,
"unavailableReason": null,
"lastVerified": "2026-10-26T23:00:07.894Z"
},
"meta": {
"count": 7,
"dataAvailable": true,
"vetoStatus": "complete",
"lim
…Match games
The match's maps as games, each with the `gameId` used by `/cs2/games/{gameId}`.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/games" \
-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": {
"…": "…"
},
"openingDuels": {
"…": "…"
},
"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-round kills, deaths, assists; missing ADR/KAST/assists terms are dropped and the weights rescaled). An average map is ab..."
},
"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": {
"…": "…"
},
"openingDuels": {
"…": "…"
},
"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-round kills, deaths, assists; missing ADR/KAST/assists terms are dropped and the weights rescaled). An average map is ab..."
},
"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"
},
{
"id": "cs2-match-2399511-map-2",
"entityType": "cs2_game",
"matchId": "cs2-match-2399511",
"mapNumber": 2,
"map": "Mirage",
"pickTeamId": nu
…Match player stats
Per-player stats for each map of a match: kills, deaths, ADR, KAST and rating. These routes are equivalent; use whichever reads best.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/player-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
},
"ctKills": 10,
"…": "17 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"
},
"team
…Match lineup stats
Each team's lineup for the match with recent form stats.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
| windowDays | integer | Look-back window in days. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/lineup-stats" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_match_lineup_stats",
"matchId": "cs2-match-2399511",
"windowDays": 90,
"dataAvailable": true,
"teams": [
{
"teamId": "cs2-team-14079",
"players": [
{
"playerId": "cs2-player-23541",
"teamId": "cs2-team-14079",
"nickname": "tasman",
"name": "Alisher Marat",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/e89eaf2bb069e9f162a2b3b1ad8df1a0.webp",
"slug": "tasman",
"countryName": "Kazakhstan",
"countryCode": "KZ",
"role": "rifler",
"windowDays": 90,
"dataAvailable": true,
"maps": 29,
"matches": 11,
"rating": 1.12,
"adr": 92.5,
"kast": 0.721,
"kdRatio": 1.2,
"kills": 520,
"deaths": 433,
"assists": 143,
"unavailableSubratings": [
"…"
]
},
{
"playerId": "cs2-player-11940",
"teamId": "cs2-team-14079",
"nickname": "neaLaN",
"name": "Sanzhar Iskhakov",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/78346fcbaa2b2810982b484e87d98623.webp",
"slug": "nealan",
"countryName": "Kazakhstan",
"countryCode": "KZ",
"role": "support",
"windowDays": 90,
"dataAvailable": true,
"maps": 29,
"matches": 11,
"rating": 0.94,
"adr": 69.1,
"kast": 0.673,
"kdRatio": 0.85,
"kills": 358,
"deaths": 421,
"assists": 135,
"unavailableSubratings": [
"…"
]
}
]
},
{
"teamId": "cs2-team-13759",
"players": [
{
"playerId": "cs2-player-13980",
"teamId": "cs2-team-13759",
"nickname": "lollipop21k",
"name": "Igor Solodkov",
"imageUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/d4cb3cc82920d021e1389920937d4364.webp",
"slug": "lollipop21k",
"countryName": "Belarus",
"countryCode": "BY",
"role": "rifler",
"windowDays": 90,
"dataAvailable": true,
"maps": 121,
"matches": 48,
"rating": 1.12,
"adr": 92.7,
"kast": 0.738,
"kdRatio": 1.1,
"kills": 2098,
"deaths": 1899,
"assists": 774,
"unavailableSubratings": [
"…"
]
},
{
"playerId": "cs2-player-26060",
"teamId": "cs2-team-13759",
"nickname": "Maksilvl",
"name": "Maksim Makarov",
"imageUrl": null,
"slug": "maksilvl",
"countryName": "Russia",
"countryCode": "RU",
"role": "entry",
"windowDays": 90,
"dataAvailable": true,
"maps": 125,
"matches": 50,
"rating": 1.01,
"adr": 70.7,
"kast": 0.722,
"kdRatio": 0.97,
"kills": 1713,
"deaths": 1761,
"assists": 543,
"unavailableSubratings": [
"…"
]
}
…Match details
One match: event, teams, series score, maps, veto and which sub-resources have data. Each finished match carries resultType (played, forfeit = nothing played and the series awarded, partial_forfeit = some maps played and the rest conceded), isForfeit and forfeitedMaps.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_match",
"id": "cs2-match-2399511",
"eventId": "cs2-event-9457",
"eventName": "CCT 2026 Europe Series 12",
"eventSlug": "cct-2026-europe-series-12",
"stageName": null,
"startsAt": "2026-10-26T18:00:00.000Z",
"endsAt": "2026-10-26T19:43:51.563Z",
"bestOf": 3,
"status": "completed",
"team1Id": "cs2-team-14079",
"team2Id": "cs2-team-13759",
"team1Name": "6yuBoJlbl",
"team2Name": "mellren",
"team1Score": 2,
"team2Score": 0,
"winnerTeamId": "cs2-team-14079",
"vetoOrder": [
{
"map": "cache",
"raw": "mellren removed cache",
"order": 1,
"action": "ban",
"teamId": "cs2-team-13759",
"teamName": "mellren",
"mapName": "cache",
"mapNumber": null
},
{
"map": "anubis",
"raw": "6yuBoJlbl removed anubis",
"order": 2,
"action": "ban",
"teamId": "cs2-team-14079",
"teamName": "6yuBoJlbl",
"mapName": "anubis",
"mapNumber": null
}
],
"streamLinks": null,
"vodLinks": [],
"lastSyncedAt": "2026-10-26T23:00:07.894Z",
"lastVerified": "2026-10-26T23:00:07.894Z",
"confidence": "high",
"event": {
"id": "cs2-event-9457",
"name": "CCT 2026 Europe Series 12",
"slug": "cct-2026-europe-series-12",
"imageUrl": null,
"prizePool": 25000,
"currency": "USD",
"location": "Europe (Online)",
"format": "Group stage: Swiss Bo3 / Playoffs: Single elimination Bo3 - 8 teams are invited directly to the Round of 16",
"teamCount": 24,
"standings": [
{
"seed": 49,
"teamId": "cs2-team-13679",
"teamName": "FOKUS",
"placement": null
},
{
"seed": 55,
"teamId": "cs2-team-13924",
"teamName": "Black Phoenix",
"placement": null
}
],
"startsAt": "2026-10-20T00:00:00.000Z",
"endsAt": "2026-11-01T23:59:59.000Z",
"status": "live",
"tier": "B",
"prestigeScore": 55,
"region": null,
"isLan": true,
"confirmedStatus": "source_detail",
"streamLinks": null,
"vodLinks": null,
"lastSyncedAt": "2026-10-26T23:00:01.575Z",
"lastVerified": "2026-10-26T23:00:01.575Z",
"confidence": "high",
"eventId": "cs2-event-9457",
"…": "2 more fields"
},
"…": "19 more fields"
},
"meta": {}
}List matches
Matches with filters for status, team, event and date range.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| date_end | string | Same as to. |
| date_start | string | Same as from. |
| days | integer | Look-back window in days. |
| event | string | Event id or slug. |
| eventId | string | Filter by eventId. |
| event_id | string | Filter by event_id. |
| fields | string | Comma-separated list of fields to return. |
| from | string | Start of the date range (YYYY-MM-DD or ISO 8601, UTC). Alias date_start. |
| include | string | odds adds every match's bookmaker odds (odds[], the same rows as /cs2/matches/{matchId}/odds, series winner h2h first); see below. player_props adds playerProps[]: the match's open pick'em lines per player and market, every provider side by side with lineSpread (same access as odds). Combine with a comma: include=odds,player_props. With status=live or status=upcoming odds are embedded by default for keys with odds access. |
| limit | integer | Rows to return. Maximum 200; larger values are reduced to 200. |
| offset | integer | Rows to skip, for paging. |
| order | string | Filter by order. |
| page | integer | Page number, starting at 1. |
| playerId | string | Player id or slug. |
| player_id | string | Player id or slug. |
| sort | string | Sort order. |
| status | string | Filter by status. |
| summary | boolean | true returns a summary instead of full rows. |
| team | string | Team id or slug. |
| teamId | string | Team id or slug. |
| team_id | string | Team id or slug. |
| to | string | End of the date range (YYYY-MM-DD or ISO 8601, UTC); a date-only value includes that whole day. Alias date_end. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"entityType": "cs2_match",
"id": "cs2-match-2399854",
"eventId": "cs2-event-8251",
"eventName": "BLAST Rivals 2026 Season 2",
"eventSlug": "blast-rivals-2026-season-2",
"stageName": null,
"startsAt": "2026-11-11T10:30:00.000Z",
"endsAt": null,
"bestOf": 3,
"status": "upcoming",
"team1Id": "cs2-team-4494",
"team2Id": "cs2-team-5995",
"team1Name": "MOUZ",
"team2Name": "G2",
"team1Score": null,
"team2Score": null,
"winnerTeamId": null,
"vetoOrder": [],
"lastSyncedAt": "2026-10-26T22:44:01.054Z",
"lastVerified": "2026-10-26T22:44:01.054Z",
"confidence": "high",
"event": {
"id": "cs2-event-8251",
"name": "BLAST Rivals 2026 Season 2",
"slug": "blast-rivals-2026-season-2",
"imageUrl": null,
"prizePool": 1000000,
"currency": "USD",
"tier": "A",
"prestigeScore": 80,
"status": "upcoming",
"region": "Europe",
"startsAt": "2026-11-11T00:00:00.000Z",
"endsAt": "2026-11-15T23:59:59.000Z",
"eventId": "cs2-event-8251",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/9a11314f2b67c8ef270530053d054d49.webp",
"bannerImageUrl": null
},
"team1": {
"id": "cs2-team-4494",
"name": "MOUZ",
"slug": "mouz",
"teamTag": "MOUZ",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/0ad08abfc7542d74ca19505208967289.svg",
"countryName": "Europe",
"countryCode": null,
"worldRanking": 4,
"vrsRanking": 2
},
"team2": {
"id": "cs2-team-5995",
"name": "G2",
"slug": "g2",
"teamTag": "G2",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/a335876e8d2132ad55dfccca0d970a1f.webp",
"countryName": "Europe",
"countryCode": null,
"worldRanking": 10,
"vrsRanking": 10
},
"…": "17 more fields"
},
{
"entityType": "cs2_match",
"id": "cs2-match-2399853",
"eventId": "cs2-event-8251",
"eventName": "BLAST Rivals 2026 Season 2",
"eventSlug": "blast-rivals-2026-season-2",
"stageName": null,
"startsAt": "2026-11-11T08:00:00.000Z",
"endsAt": null,
"bestOf": 3,
"status": "upcoming",
"team1Id": "cs2-team-7020",
"team2Id": "cs2-team-13286",
"team1Name": "Spirit",
"team2Name": "FUT",
"team1Score": null,
"team2Score": null,
"winnerTeamId": null,
"vetoOrder": [],
"lastSyncedAt": "2026-10-26T22:44:00.644Z",
"lastVerified": "2026-10-26T22:44:00.644Z",
"confidence": "high",
"event": {
"id": "cs2-event-8251",
"name": "BLAST Rivals 2026 Season 2",
"slug": "blast-rivals-2026-season-2",
"imageUrl": null,
"prizePool": 1000000,
"currency": "USD",
"tier": "A",
"prestigeScore": 80,
"status": "upcoming",
"region": "Europe",
"startsAt": "2026-11-11T00:00:00.000Z",
"endsAt": "2026-11-15T23:59:59.000Z",
"eventId": "cs2-event-8251",
"logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/9a11314f2b67c8ef270530053d054d49.webp",
"bannerImageUrl": null
},
"team1": {
"id": "cs2-team-7020",
"name": "Spirit",
"sl
…Head-to-head pairs
Team pairs that have played each other, for building head-to-head pages.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| limit | integer | Rows to return. Maximum 500; larger values are reduced to 500. |
| minMeetings | string | Filter by minMeetings. |
| min_meetings | string | Filter by min_meetings. |
| windowDays | integer | Look-back window in days. |
| window_days | integer | Look-back window in days. |
Example
curl "https://api.citoapi.com/api/v1/cs2/h2h/pairs" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_h2h_pair",
"pairs": [
{
"teamA": {
"id": "cs2-team-12510",
"name": "The Huns",
"slug": "the-huns"
},
"teamB": {
"id": "cs2-team-12646",
"name": "Chinggis Warriors",
"slug": "chinggis-warriors"
},
"meetings": 26,
"lastMeetingAt": "2026-10-10T08:20:00.000Z"
},
{
"teamA": {
"id": "cs2-team-8536",
"name": "Ground Zero",
"slug": "ground-zero"
},
"teamB": {
"id": "cs2-team-9881",
"name": "Rooster",
"slug": "rooster"
},
"meetings": 20,
"lastMeetingAt": "2026-09-27T09:00:00.000Z"
}
],
"dataAvailable": true
},
"meta": {
"count": 2,
"limit": 2,
"minMeetings": 2,
"windowDays": 730,
"dataAvailable": true,
"total": 2,
"page": 1,
"totalPages": 1,
"hasNext": false,
"hasPrev": false
}
}Team head-to-head
Record and past matches between two teams. Same response as `GET /api/v1/cs2/teams/{teamIdOrSlug}/vs/{opponentIdOrSlug}`.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| teamIdOrSlug (path)* | string | Team id (cs2-team-7020) or slug (spirit). |
| opponentIdOrSlug (path)* | string | Opponent team id or slug. |
| limit | integer | Rows to return. Maximum 250; larger values are reduced to 250. |
Example
curl "https://api.citoapi.com/api/v1/cs2/h2h/vitality/natus-vincere" \
-H "x-api-key: YOUR_API_KEY"Try the CS2 Matches 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/matches/results?limit=5" \
-H "x-api-key: YOUR_API_KEY"