Docs/CS2 API/CS2 Matches API

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

GET/api/v1/cs2/matches/today

Matches scheduled, live or finished today (UTC).

Query parameters

ParameterTypeDescription
daysintegerLook-back window in days.
eventstringEvent id or slug.
eventIdstringFilter by eventId.
event_idstringFilter by event_id.
fieldsstringComma-separated list of fields to return.
fromstringStart of the date range (ISO 8601, UTC).
includestringodds 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.
limitintegerRows to return. Maximum 200; larger values are reduced to 200.
offsetintegerRows to skip, for paging.
orderstringFilter by order.
pageintegerPage number, starting at 1.
playerIdstringPlayer id or slug.
player_idstringPlayer id or slug.
sortstringSort order.
statusstringFilter by status.
summarybooleantrue returns a summary instead of full rows.
teamstringTeam id or slug.
teamIdstringTeam id or slug.
team_idstringTeam id or slug.
tostringEnd of the date range (ISO 8601, UTC).

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/today" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/past

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

ParameterTypeDescription
date_endstringSame as to.
date_startstringSame as from.
daysintegerLook-back window in days (default 7, max 90). Ignored when from or to is given.
eventstringEvent id or slug.
eventIdstringFilter by eventId.
event_idstringFilter by event_id.
fieldsstringComma-separated list of fields to return.
fromstringStart of the date range (YYYY-MM-DD or ISO 8601, UTC). Alias date_start.
includestringodds 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.
limitintegerRows to return. Maximum 200; larger values are reduced to 200.
offsetintegerRows to skip, for paging.
orderstringFilter by order.
pageintegerPage number, starting at 1.
playerIdstringPlayer id or slug.
player_idstringPlayer id or slug.
sortstringSort order.
statusstringFilter by status.
summarybooleantrue returns a summary instead of full rows.
teamstringTeam id or slug.
teamIdstringTeam id or slug.
team_idstringTeam id or slug.
tostringEnd of the date range (YYYY-MM-DD or ISO 8601, UTC); a date-only value includes that whole day. Alias date_end.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/past" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/search

Find matches by team or event name.

Query parameters

ParameterTypeDescription
limitintegerRows to return. Maximum 100; larger values are reduced to 100.
q*stringSearch text.
querystringFilter by query.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/search" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/upcoming
GET/api/v1/cs2/upcoming

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

ParameterTypeDescription
includestringOdds 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).
limitintegerRows to return. Maximum 100; larger values are reduced to 100.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/upcoming" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/recent
GET/api/v1/cs2/matches/results
GET/api/v1/cs2/matches/completed
GET/api/v1/cs2/results
GET/api/v1/cs2/recent

Finished matches with final series score and winner, newest first. These routes are equivalent; use whichever reads best.

Query parameters

ParameterTypeDescription
date_endstringSame as to.
date_startstringSame as from.
fromstringStart of the date range (YYYY-MM-DD or ISO 8601, UTC). Alias date_start.
includestringodds 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.
limitintegerRows to return. Maximum 100; larger values are reduced to 100.
tostringEnd of the date range (YYYY-MM-DD or ISO 8601, UTC); a date-only value includes that whole day. Alias date_end.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/recent" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/{matchId}/streams

Broadcast links for a match, when known.

Query parameters

ParameterTypeDescription
matchId (path)*stringMatch id, e.g. cs2-match-2398421.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/streams" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/{matchId}/head-to-head

Previous meetings between the two teams in this match.

Query parameters

ParameterTypeDescription
matchId (path)*stringMatch id, e.g. cs2-match-2398421.
limitintegerRows to return. Maximum 250; larger values are reduced to 250.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/head-to-head" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/{matchId}/demos

Demo availability per map, and whether each demo has been parsed into round data.

Query parameters

ParameterTypeDescription
matchId (path)*stringMatch id, e.g. cs2-match-2398421.
limitintegerRows to return. Maximum 100; larger values are reduced to 100.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/demos" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/{matchId}/maps

Maps played or scheduled in a match: map name, score, halves and winner.

Query parameters

ParameterTypeDescription
matchId (path)*stringMatch id, e.g. cs2-match-2398421.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/maps" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/{matchId}/veto
GET/api/v1/cs2/matches/{matchId}/draft

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

ParameterTypeDescription
matchId (path)*stringMatch id, e.g. cs2-match-2398421.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/veto" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/{matchId}/games

The match's maps as games, each with the `gameId` used by `/cs2/games/{gameId}`.

Query parameters

ParameterTypeDescription
matchId (path)*stringMatch id, e.g. cs2-match-2398421.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/games" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/{matchId}/player-stats
GET/api/v1/cs2/matches/{matchId}/players
GET/api/v1/cs2/matches/{matchId}/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

ParameterTypeDescription
matchId (path)*stringMatch id, e.g. cs2-match-2398421.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/player-stats" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/{matchId}/lineup-stats

Each team's lineup for the match with recent form stats.

Query parameters

ParameterTypeDescription
matchId (path)*stringMatch id, e.g. cs2-match-2398421.
windowDaysintegerLook-back window in days.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/lineup-stats" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/{matchId}

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

ParameterTypeDescription
matchId (path)*stringMatch id, e.g. cs2-match-2398421.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches

Matches with filters for status, team, event and date range.

Query parameters

ParameterTypeDescription
date_endstringSame as to.
date_startstringSame as from.
daysintegerLook-back window in days.
eventstringEvent id or slug.
eventIdstringFilter by eventId.
event_idstringFilter by event_id.
fieldsstringComma-separated list of fields to return.
fromstringStart of the date range (YYYY-MM-DD or ISO 8601, UTC). Alias date_start.
includestringodds 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.
limitintegerRows to return. Maximum 200; larger values are reduced to 200.
offsetintegerRows to skip, for paging.
orderstringFilter by order.
pageintegerPage number, starting at 1.
playerIdstringPlayer id or slug.
player_idstringPlayer id or slug.
sortstringSort order.
statusstringFilter by status.
summarybooleantrue returns a summary instead of full rows.
teamstringTeam id or slug.
teamIdstringTeam id or slug.
team_idstringTeam id or slug.
tostringEnd of the date range (YYYY-MM-DD or ISO 8601, UTC); a date-only value includes that whole day. Alias date_end.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/h2h/pairs

Team pairs that have played each other, for building head-to-head pages.

Query parameters

ParameterTypeDescription
limitintegerRows to return. Maximum 500; larger values are reduced to 500.
minMeetingsstringFilter by minMeetings.
min_meetingsstringFilter by min_meetings.
windowDaysintegerLook-back window in days.
window_daysintegerLook-back window in days.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/h2h/pairs" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/h2h/{teamIdOrSlug}/{opponentIdOrSlug}

Record and past matches between two teams. Same response as `GET /api/v1/cs2/teams/{teamIdOrSlug}/vs/{opponentIdOrSlug}`.

Query parameters

ParameterTypeDescription
teamIdOrSlug (path)*stringTeam id (cs2-team-7020) or slug (spirit).
opponentIdOrSlug (path)*stringOpponent team id or slug.
limitintegerRows to return. Maximum 250; larger values are reduced to 250.

Example

bash
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.

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/results?limit=5" \
  -H "x-api-key: YOUR_API_KEY"