Docs/CS2 API/CS2 Search and Reference API

CS2 Search and Reference API

Search across teams, players, events and matches, the reference catalogs, webhook event types and freshness endpoints.

11 endpoints in this section. Authenticate with the x-api-key header; every response is { success, data, meta }. Other sections: Live, Player props, Odds, Positions & heatmaps, Watch live (embeds), Pro skins & 3D, Matches, Maps & rounds, Rankings, Teams, Players, Events, Stats & leaderboards, Skins, Transfers.

CS2 API overview

GET/api/v1/cs2

Coverage counts (matches, teams, players, events, demos) and links to the main endpoints.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entityType": "cs2_api_overview",
    "name": "Counter-Strike 2 API",
    "status": "available",
    "coverage": {
      "matches": 33387,
      "live": 4,
      "upcoming": 31,
      "teams": 5153,
      "players": 10412,
      "events": 2467,
      "rosterChanges": 153936,
      "demos": 40292,
      "playerPeriodStats": 144419,
      "teamPeriodStats": 6095
    },
    "endpoints": {
      "live": "/api/v1/cs2/live",
      "liveState": "/api/v1/cs2/live/{matchId}/state",
      "liveScoreboard": "/api/v1/cs2/live/{matchId}/scoreboard",
      "liveEvents": "/api/v1/cs2/live/{matchId}/events",
      "matches": "/api/v1/cs2/matches",
      "matchPlayerStats": "/api/v1/cs2/matches/{matchId}/player-stats",
      "matchMaps": "/api/v1/cs2/matches/{matchId}/maps",
      "matchDemos": "/api/v1/cs2/matches/{matchId}/demos",
      "gameStats": "/api/v1/cs2/games/{gameId}/stats",
      "gameRounds": "/api/v1/cs2/games/{gameId}/rounds",
      "gameEvents": "/api/v1/cs2/games/{gameId}/events",
      "teams": "/api/v1/cs2/teams",
      "teamRosterHistory": "/api/v1/cs2/teams/{teamId}/roster-history",
      "teamTrends": "/api/v1/cs2/teams/{teamId}/trends",
      "players": "/api/v1/cs2/players",
      "playerCareer": "/api/v1/cs2/players/{playerId}/career",
      "playerSeasons": "/api/v1/cs2/players/{playerId}/seasons",
      "playerTransfers": "/api/v1/cs2/players/{playerId}/transfers",
      "events": "/api/v1/cs2/events",
      "activeEvents": "/api/v1/cs2/events/active",
      "eventCalendar": "/api/v1/cs2/events/calendar",
      "eventParticipants": "/api/v1/cs2/events/{eventId}/participants",
      "rosterChanges": "/api/v1/cs2/roster-changes/recent",
      "rankings": "/api/v1/cs2/rankings/teams",
      "…": "1 more fields"
    }
  },
  "meta": {}
}

CS2 data freshness

GET/api/v1/cs2/status/sync

Whether CS2 data is current: `current_status`, `freshness` (`fresh` or `stale`) and the time of the last successful update.

Example

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

Response

json
{
  "success": true,
  "data": {
    "entity_type": "cs2_sync_health",
    "current_status": "healthy",
    "freshness": "fresh",
    "last_successful_sync_at": "2026-09-23T01:21:07.356Z",
    "checked_at": "2026-09-23T01:21:30.000Z"
  },
  "meta": {}
}

CS2 data changelog

GET/api/v1/cs2/changelog

Recent changes to CS2 records: the field, its public before and after values, and the time. Each entry names the records it belongs to (matchId, mapId, playerId, teamId, statLineId; null when not applicable) and resourcePath, the GET that returns the changed record. For a player stat line, entityId is `<mapId>:<player name>`, a record key rather than a route id: request resourcePath instead. Values longer than 500 characters are truncated; pass `entity_id` with `full=true` for complete values. By default only applied changes are listed (action `merge_accepted` and `overwrite`); pass `action=merge_rejected` for changes that were considered and not applied, or `include=not_applied` for every change.

Query parameters

ParameterTypeDescription
actionstringFilter by action.
entity_idstringOnly changes to this record.
entity_typestringOnly changes to this kind of record.
fullbooleantrue returns complete values instead of truncated ones.
includestringFilter by include.
limitintegerRows to return. Maximum 200; larger values are reduced to 200.
offsetintegerRows to skip, for paging.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "cmwc4fw96054kf9z0yl1qn2jw",
      "entityType": "cs2_map_player_stat",
      "entityId": "cs2-match-2400332-map-1:Chill",
      "matchId": "cs2-match-2400332",
      "mapId": "cs2-match-2400332-map-1",
      "playerId": "cs2-player-19812",
      "teamId": "cs2-team-13704",
      "statLineId": "cs2-match-2400332-map-1-cs2-player-19812",
      "resourcePath": "/api/v1/cs2/games/cs2-match-2400332-map-1/stats",
      "fieldPath": "*",
      "oldValue": {
        "playerId": "cs2-player-19812",
        "playerName": "Chill",
        "teamId": "cs2-team-13704",
        "teamName": "Drama",
        "kills": 9,
        "deaths": 16,
        "assists": 2,
        "plusMinus": -7,
        "headshots": 5,
        "headshotPercent": 0.5556,
        "adr": 52.45,
        "kast": 0.5,
        "firstKills": 2,
        "firstDeaths": 4,
        "rating": 0.67,
        "ratingVersion": "cito_rating_1"
      },
      "newValue": {
        "kills": 9,
        "deaths": 16,
        "assists": 2,
        "plusMinus": -7,
        "headshots": 5,
        "headshotPercent": 0.5556,
        "adr": 52.5,
        "kast": 0.5,
        "firstKills": 2,
        "firstDeaths": 4,
        "sideStats": {
          "ct": {
            "kills": 3,
            "deaths": 6,
            "adr": 30.1,
            "kast": 0.375
          },
          "t": {
            "kills": 6,
            "deaths": 10,
            "adr": 67.3,
            "kast": 0.583
          }
        }
      },
      "action": "overwrite",
      "createdAt": "2026-11-11T12:54:59.082Z"
    },
    {
      "id": "cmwc4fw65054jf9z00wdvhr1v",
      "entityType": "cs2_map_player_stat",
      "entityId": "cs2-match-2400332-map-1:choiv7",
      "matchId": "cs2-match-2400332",
      "mapId": "cs2-match-2400332-map-1",
      "playerId": "cs2-player-20685",
      "teamId": "cs2-team-13704",
      "statLineId": "cs2-match-2400332-map-1-cs2-player-20685",
      "resourcePath": "/api/v1/cs2/games/cs2-match-2400332-map-1/stats",
      "fieldPath": "*",
      "oldValue": {
        "playerId": "cs2-player-20685",
        "playerName": "choiv7",
        "teamId": "cs2-team-13704",
        "teamName": "Drama",
        "kills": 6,
        "deaths": 15,
        "assists": 0,
        "plusMinus": -9,
        "headshots": 2,
        "headshotPercent": 0.3333,
        "adr": 35.4,
        "kast": 0.55,
        "firstKills": 1,
        "firstDeaths": 1,
        "rating": 0.57,
        "ratingVersion": "cito_rating_1"
      },
      "newValue": {
        "kills": 6,
        "deaths": 15,
        "assists": 0,
        "plusMinus": -9,
        "headshots": 2,
        "headshotPercent": 0.3333,
        "adr": 35.4,
        "kast": 0.55,
        "firstKills": 1,
        "firstDeaths": 1,
        "sideStats": {
          "ct": {
            "kills": 3,
            "deaths": 5,
            "adr": 32.6,
            "kast": 0.625
          },
          "t": {
            "kills": 3,
            "deaths": 10,
            "adr": 37.2,
            "kast": 0.5
          }
        }
      },
      "action": "overwrite",
      "createdAt": "2026-11-11T12:54:58.973Z"
    }
  ],
  "meta": {
    "total": 562964,
    "limit": 2,
    "valuesTruncatedAt": 500,
    "dataAvailable": true,
    "unavailableReason": null,
    "count": 2,
    "page": 1,
    "totalPages": 281482,
    "hasNext": true,
    "hasPrev": false
  }
}

CS2 webhook event types

GET/api/v1/cs2/webhooks/events
GET/api/v1/cs2/webhooks

The event types a CS2 webhook can subscribe to, with example payloads. These routes are equivalent; use whichever reads best.

Example

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

Response

json
{
  "success": true,
  "available_on_plans": [
    "PRO",
    "BUSINESS"
  ],
  "management_endpoint": "/api/v1/webhooks",
  "create_endpoint": "POST /api/v1/webhooks",
  "events": [
    "cs2.match.started",
    "cs2.match.live_started"
  ],
  "example_payload": {
    "event": "cs2.score.updated",
    "id": "7f4c2d0d8f2f4b2ca6c6f35c4d53c2aa",
    "timestamp": "2026-11-11T12:57:12.794Z",
    "data": {
      "matchId": "cs2-match-2395230",
      "team1Score": 1,
      "team2Score": 0,
      "currentMap": "mirage"
    }
  },
  "signature_headers": [
    "X-Cito-Signature",
    "X-Cito-Event"
  ],
  "signing": {
    "algorithm": "HMAC-SHA256",
    "signedContent": "UTF-8 bytes of the exact JSON request body sent by Cito",
    "bodySerialization": "JSON.stringify(payload)",
    "signatureHeader": "X-Cito-Signature",
    "signatureEncoding": "hex",
    "signaturePrefix": "none",
    "secretFormat": "Use the exact webhook secret value shown when the webhook is created or regenerated. No whsec_ prefix is used.",
    "verificationRule": "Verify against the raw request body bytes before reparsing or reserializing JSON.",
    "sampleSecret": "cito_test_secret_123",
    "samplePayload": {
      "event": "lol.live.state",
      "id": "sample-event-id-123",
      "timestamp": "2026-06-07T16:00:00.000Z",
      "data": {
        "gameId": "lol-game-123",
        "matchId": "lol-match-123",
        "league": "LEC",
        "gameTime": 1337,
        "blueTeam": {
          "tag": "G2",
          "kills": 7,
          "gold": 24800,
          "towers": 3,
          "dragons": 2,
          "barons": 0
        },
        "redTeam": {
          "tag": "FNC",
          "kills": 5,
          "gold": 23700,
          "towers": 2,
          "dragons": 1,
          "barons": 0
        }
      }
    },
    "samplePayloadString": "{\"event\":\"lol.live.state\",\"id\":\"sample-event-id-123\",\"timestamp\":\"2026-06-07T16:00:00.000Z\",\"data\":{\"gameId\":\"lol-gam…",
    "sampleSignature": "97db77f5cd96e09a70dcf6cc75fc5d92d780c41ce82c853b51e4070954c54171",
    "sampleHeaders": {
      "Content-Type": "application/json",
      "X-Cito-Signature": "97db77f5cd96e09a70dcf6cc75fc5d92d780c41ce82c853b51e4070954c54171",
      "X-Cito-Event": "lol.live.state",
      "X-Cito-Event-Id": "sample-event-id-123",
      "X-Cito-Timestamp": "2026-06-07T16:00:00.000Z",
      "X-Cito-Delivery-Attempt": "1"
    }
  },
  "live_sse_stream": "/api/v1/cs2/live/stream?matchId={matchId}",
  "docs": "https://citoapi.com/docs/api/cs2",
  "data": {
    "available_on_plans": [
      "PRO",
      "BUSINESS"
    ],
    "management_endpoint": "/api/v1/webhooks",
    "create_endpoint": "POST /api/v1/webhooks",
    "events": [
      "cs2.match.started",
      "cs2.match.live_started"
    ],
    "example_payload": {
      "event": "cs2.score.updated",
      "id": "7f4c2d0d8f2f4b2ca6c6f35c4d53c2aa",
      "timestamp": "2026-11-11T12:57:12.794Z",
      "data": {
        "matchId": "cs2-match-2395230",
        "team1Score": 1,
        "team2Score": 0,
        "currentMap": "mirage"
      }
    },
    "signature_headers": [
      "X-Cito-Signature",
      "X-Cito-Event"
    ],
    "signing": {
      "algorithm": "HMAC-SHA256",
      "signedContent": "UTF-8 bytes of the exact JSON request body sent by Cito",
      "bodySerialization": "JSON.stringify(payload)",
      "signatureHeader": "X-Cito-Signature",
      "signatureEncoding": "hex",
      "signaturePrefix": "none",
      "secretFormat": "Use the exac
…

How to register a CS2 webhook

POST/api/v1/cs2/webhooks

Returns the steps and payload for registering a CS2 webhook in the dashboard. It does not create a subscription. Same response as `GET /api/v1/cs2/webhooks/events`.

Example

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

Search CS2

GET/api/v1/cs2/search

Search teams, players, events and matches by name. Requires `q`. Player photos: `imageUrl` on a player (`playerImageUrl` on roster and transfer rows) is always an image URL. A player with no photo gets a neutral silhouette placeholder (400x417 transparent WebP, the same size as the photos) and `imageIsPlaceholder: true` (`playerImageIsPlaceholder` on roster and transfer rows); a real photo has `false`. Check the flag, not the URL.

Query parameters

ParameterTypeDescription
q*stringSearch text.

Example

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

Response

json
{
  "success": true,
  "data": {
    "teams": [
      {
        "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,
        "region": "Europe",
        "worldRanking": 3,
        "lastSyncedAt": "2026-11-11T12:51:12.392Z",
        "lastVerified": "2026-11-11T12:51:12.392Z",
        "confidence": "high",
        "worldRankingStatus": "ranked",
        "vrsRanking": 2,
        "vrsRankingStatus": "ranked",
        "vrsRegion": "Europe",
        "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",
        "logoIsPlaceholder": false
      },
      {
        "id": "cs2-team-13815",
        "name": "Vitality Academy",
        "slug": "vitality-academy",
        "teamTag": "VA",
        "logoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/ad13083b7d0f2fdc6fc7032fe719467f.webp",
        "countryName": "Europe",
        "countryCode": null,
        "region": "Europe",
        "worldRanking": null,
        "lastSyncedAt": "2026-11-07T04:55:10.577Z",
        "lastVerified": "2026-11-07T04:55:10.577Z",
        "confidence": "high",
        "worldRankingStatus": "not_ranked",
        "vrsRanking": null,
        "vrsRankingStatus": "not_ranked",
        "vrsRegion": null,
        "alternateLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/88a33f664082f564bcdea7a4c2983cfa.webp",
        "darkUiLogoUrl": "https://api.citoapi.com/api/v1/public/images/cs2/logos/88a33f664082f564bcdea7a4c2983cfa.webp",
        "logoIsPlaceholder": false
      }
    ],
    "players": [],
    "events": [],
    "matches": [
      {
        "id": "cs2-match-2400201",
        "eventId": "cs2-event-8251",
        "eventName": "BLAST Rivals 2026 Season 2",
        "eventSlug": "blast-rivals-2026-season-2",
        "stageName": null,
        "startsAt": "2026-11-12T04:30:00.000Z",
        "endsAt": null,
        "bestOf": 3,
        "status": "upcoming",
        "team1Id": "cs2-team-8297",
        "team2Id": "cs2-team-9565",
        "team1Name": "FURIA",
        "team2Name": "Vitality",
        "team1Score": null,
        "team2Score": null,
        "winnerTeamId": null,
        "liveState": {
          "status": "upcoming",
          "team1Score": null,
          "team2Score": null,
          "winnerTeamId": null
        },
        "vetoOrder": [
          {
            "map": "dust2",
            "order": 1,
            "action": "pick",
            "teamId": null,
            "teamName": null,
            "mapName": "dust2",
            "mapNumber": null,
            "played": false
          },
          {
            "map": "cache",
            "order": 2,
            "action": "pick",
            "teamId": null,
            "teamName": null,
            "mapName": "cache",
            "mapNumber": null,
            "played": false
          }
        ],
        "streamLinks": [
          {
            "url": "https://www.youtube.com/watch?v=gSL0kbwMusY",
            "label": null,
            "language": null,
            "platform": "youtube"
          },
          {
            "url": "https://www.twitch.tv/blastpremier",
          
…

CS2 autocomplete

GET/api/v1/cs2/autocomplete

Typeahead for search boxes. Requires `q`. Returns an array of at most `limit` items (default 10, max 20), best match first: `{ id, type, name, slug, logo, score }` plus one context field (team `rank` = world rank, player `team` = current team name, event `startsAt`, match `startsAt`, `status`, `eventName`). `type` is `team`, `player`, `event` or `match`; `types=team,player,event,match` picks which (default `team,player,event`; `type=` also works). **Relevance:** `score` 100 = exact name, slug, former name or short alias (`navi`, `c9`, `vp`); 80 = the name starts with the query; 60 = a word of the name starts with it; 40 = the query is inside a word (queries of 4+ characters). Nothing below 40 is returned. Ties: world rank, maps played, event recency, shorter name. **Shape:** `meta` has `query`, `types`, `limit`, `count`, `shape: "slim"` and `fullShape`. `?expand=full` returns the previous response, the same as `/cs2/search` (`{teams, players, events, matches}` with full rows). API keys that called this endpoint in the 90 days before 2026-11-02 keep that full response by default and can opt in to the slim list with `?expand=slim`.

Query parameters

ParameterTypeDescription
expandstringfull: the previous response ({teams, players, events, matches}, same as /cs2/search); slim: the typeahead list (for keys whose default is full).
limitintegerItems to return, 1-20 (default 10). Maximum 100; larger values are reduced to 100.
q*stringSearch text (at least one letter or digit).
querystringFilter by query.
typestringSame as types.
typesstringComma-separated team, player, event, match (plural forms accepted). Default team,player,event.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "cs2-team-9565",
      "type": "team",
      "name": "Vitality",
      "slug": "vitality",
      "logo": "https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp",
      "score": 100,
      "rank": 3
    },
    {
      "id": "cs2-team-13815",
      "type": "team",
      "name": "Vitality Academy",
      "slug": "vitality-academy",
      "logo": "https://api.citoapi.com/api/v1/public/images/cs2/logos/ad13083b7d0f2fdc6fc7032fe719467f.webp",
      "score": 80,
      "rank": null
    }
  ],
  "meta": {
    "query": "vitality",
    "types": [
      "team",
      "player"
    ],
    "limit": 2,
    "shape": "slim",
    "fullShape": "/api/v1/cs2/autocomplete?expand=full",
    "count": 2,
    "dataAvailable": true,
    "unavailableReason": null,
    "total": 2,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Weapon catalog

GET/api/v1/cs2/weapons

CS2 weapons with their category (rifle, pistol, SMG and so on).

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "ak47",
      "slug": "ak47",
      "name": "AK-47",
      "category": "rifle"
    },
    {
      "id": "m4a1",
      "slug": "m4a1",
      "name": "M4A1-S",
      "category": "rifle"
    }
  ],
  "meta": {
    "count": 18,
    "dataAvailable": true,
    "unavailableReason": null,
    "limit": 18,
    "total": 18,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Regions

GET/api/v1/cs2/regions

Regions used for teams and regional rankings.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "id": "europe",
      "slug": "europe",
      "name": "Europe"
    },
    {
      "id": "americas",
      "slug": "americas",
      "name": "Americas"
    }
  ],
  "meta": {
    "count": 7,
    "dataAvailable": true,
    "unavailableReason": null,
    "limit": 7,
    "total": 7,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Leagues

GET/api/v1/cs2/leagues

Leagues and circuits that group events.

Query parameters

ParameterTypeDescription
limitintegerRows to return. Maximum 200; larger values are reduced to 200.

Example

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

Response

json
{
  "success": true,
  "data": [
    {
      "entityType": "cs2_event",
      "id": "cs2-event-7427",
      "name": "ESL Impact Summer 2023 Cash Cup 6 Europe",
      "slug": "esl-impact-summer-2023-cash-cup-6-europe",
      "tier": null,
      "region": null,
      "status": "completed",
      "location": null,
      "bannerImageUrl": null,
      "eventStructure": null,
      "prizeDistribution": null,
      "stats": null,
      "availableSubresources": [
        "teams",
        "results"
      ],
      "unavailableSubresources": [
        "matches",
        "standings"
      ],
      "unavailableFields": {
        "imageUrl": {
          "reason": "event_field_unavailable"
        },
        "prizePool": {
          "reason": "event_field_unavailable"
        },
        "currency": {
          "reason": "event_field_unavailable"
        },
        "location": null,
        "format": {
          "reason": "event_field_unavailable"
        },
        "teamCount": {
          "reason": "event_field_unavailable"
        },
        "standings": {
          "reason": "event_field_unavailable"
        },
        "startsAt": {
          "reason": "event_field_unavailable"
        },
        "endsAt": {
          "reason": "event_field_unavailable"
        }
      },
      "dataQuality": "partial",
      "confidence": "medium",
      "confidenceScore": 0.7,
      "lastVerified": null
    },
    {
      "entityType": "cs2_event",
      "id": "cs2-event-7432",
      "name": "ESL Impact Summer 2023 Cash Cup 6 North America",
      "slug": "esl-impact-summer-2023-cash-cup-6-north-america",
      "tier": null,
      "region": null,
      "status": "completed",
      "location": null,
      "bannerImageUrl": null,
      "eventStructure": null,
      "prizeDistribution": null,
      "stats": null,
      "availableSubresources": [
        "teams",
        "results"
      ],
      "unavailableSubresources": [
        "matches",
        "standings"
      ],
      "unavailableFields": {
        "imageUrl": {
          "reason": "event_field_unavailable"
        },
        "prizePool": {
          "reason": "event_field_unavailable"
        },
        "currency": {
          "reason": "event_field_unavailable"
        },
        "location": null,
        "format": {
          "reason": "event_field_unavailable"
        },
        "teamCount": {
          "reason": "event_field_unavailable"
        },
        "standings": {
          "reason": "event_field_unavailable"
        },
        "startsAt": {
          "reason": "event_field_unavailable"
        },
        "endsAt": {
          "reason": "event_field_unavailable"
        }
      },
      "dataQuality": "partial",
      "confidence": "medium",
      "confidenceScore": 0.7,
      "lastVerified": null
    }
  ],
  "meta": {
    "count": 2,
    "dataAvailable": true,
    "unavailableReason": null,
    "limit": 2,
    "total": 2,
    "page": 1,
    "totalPages": 1,
    "hasNext": false,
    "hasPrev": false
  }
}

Head-to-head by query

GET/api/v1/cs2/head-to-head

The same head-to-head record as `/cs2/h2h/{teamIdOrSlug}/{opponentIdOrSlug}`, with the two teams as query parameters: `team1` and `team2` (id or slug). Missing either returns 400. Same response as `GET /api/v1/cs2/h2h`.

Query parameters

ParameterTypeDescription
bestOfstringFilter by bestOf.
limitintegerRows to return. Maximum 250; larger values are reduced to 250.
team1stringFilter by team1.
team2stringFilter by team2.

Example

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

Try the CS2 Search and Reference 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/search?q=vitality" \
  -H "x-api-key: YOUR_API_KEY"
Was this page helpful?