Counter-Strike 2 API
BetaLive matches down to the round, results with every map score, per-map player stats, teams, players, events, and the world and VRS rankings.
CS2 is in beta. The data is live and checked continuously, but if something looks wrong (a score, a stat line, a roster, a missing match), email support@citoapi.com with the endpoint you called and the match, team or player id. Reports go straight to the people fixing it.
https://api.citoapi.com/api/v1Quick start
curl "https://api.citoapi.com/api/v1/cs2/matches/recent?limit=5" \
-H "x-api-key: YOUR_API_KEY"Every response is { success, data, meta }. Ids look like cs2-match-2398421, cs2-team-9565 and cs2-player-11893; teams and players also accept their slug (vitality, zywoo). Times are ISO 8601 in UTC.
Endpoints
GET/api/v1/cs2/liveLive MatchesMatches in progress: series score, map in play, map score and round.
/api/v1/cs2/livecurl "https://api.citoapi.com/api/v1/cs2/live" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/live/{matchId}/stateStateOne live match: round, round score, sides, players, bomb.
/api/v1/cs2/live/{matchId}/statecurl "https://api.citoapi.com/api/v1/cs2/live/{matchId}/state" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/live/streamStreamServer-Sent Events push of live updates. Every plan; billed like polling (see below).
/api/v1/cs2/live/streamcurl "https://api.citoapi.com/api/v1/cs2/live/stream" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/matches/upcomingUpcoming ScheduleThe schedule, soonest first.
/api/v1/cs2/matches/upcomingcurl "https://api.citoapi.com/api/v1/cs2/matches/upcoming" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/matches/recentRecent MatchesLatest results with every map and its score.
/api/v1/cs2/matches/recentcurl "https://api.citoapi.com/api/v1/cs2/matches/recent" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/matches/{matchId}MatchIdOne match: maps, veto, event, streams.
/api/v1/cs2/matches/{matchId}curl "https://api.citoapi.com/api/v1/cs2/matches/{matchId}" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/matches/{matchId}/player-statsPlayer StatsPer-map player lines: kills, deaths, assists, ADR, KAST, rating.
/api/v1/cs2/matches/{matchId}/player-statscurl "https://api.citoapi.com/api/v1/cs2/matches/{matchId}/player-stats" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/teams/{teamIdOrSlug}TeamIdOrSlugTeam profile, current roster (players and coach) and recent results.
/api/v1/cs2/teams/{teamIdOrSlug}curl "https://api.citoapi.com/api/v1/cs2/teams/{teamIdOrSlug}" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/players/{playerIdOrSlug}PlayerIdOrSlugPlayer profile and current team.
/api/v1/cs2/players/{playerIdOrSlug}curl "https://api.citoapi.com/api/v1/cs2/players/{playerIdOrSlug}" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/players/{playerIdOrSlug}/statsPlayerIdOrSlug StatsCareer totals and per-map stat lines.
/api/v1/cs2/players/{playerIdOrSlug}/statscurl "https://api.citoapi.com/api/v1/cs2/players/{playerIdOrSlug}/stats" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/rankingsRankingsWorld ranking. Add ?source=vrs for Valve's VRS ranking.
/api/v1/cs2/rankingscurl "https://api.citoapi.com/api/v1/cs2/rankings" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/events/upcomingUpcoming ScheduleTournaments starting soon. Also /events/live and /events/recent.
/api/v1/cs2/events/upcomingcurl "https://api.citoapi.com/api/v1/cs2/events/upcoming" \
-H "x-api-key: YOUR_API_KEY"GET/api/v1/cs2/search?q=vitalitySearchTeams, players, events and matches by name.
/api/v1/cs2/search?q=vitalitycurl "https://api.citoapi.com/api/v1/cs2/search?q=vitality" \
-H "x-api-key: YOUR_API_KEY"These are the main ones. Every CS2 route, with its parameters and a real example response, is in the OpenAPI document (tag CS2).
Live data
Poll GET /cs2/live for everything in progress, then GET /cs2/live/{matchId}/state for one match. In the live list, score is the series (maps won) and currentMapScore is the map being played.
Push instead of polling. GET /cs2/live/stream sends every update as it happens (Server-Sent Events, add ?matchId= to follow one match). An open stream counts toward your monthly quota like polling: one request when it connects, then one for every 15 seconds it stays open. When the quota runs out it sends an error event and closes.
curl -N "https://api.citoapi.com/api/v1/cs2/live/stream" \
-H "x-api-key: YOUR_API_KEY" \
-H "Accept: text/event-stream"Live data comes from the in-game feed. If that feed goes quiet for a match, a backup feed takes over within about a minute and the state says source: "live_backup": series score and the map in play, without rounds or players, until the main feed returns.
Plans
Choose a plan or read rate limits and pricing.