HLTV has no official API. This is the CS2 API you build on.
27,000+ pro Counter-Strike matches (20,000+ on CS2), player and team stats and one market odds line, behind one REST and WebSocket API.
A sandbox key reads a fixed sample of past matches, no card. Plans from $99 a month.
$ curl -H "Authorization: Bearer $ESPORTSODDS_API_KEY" \ "api.esportsodds.gg/v1/cs2/matches?status=completed" {"data": [{ "tournament_name": "ESL Pro League Season 24", "team_a_name": "Vitality", "team_b_name": "MOUZ", "format": "bo5", "status": "completed", "score_a": 3, "score_b": 0 }, …]}
What the CS2 API covers
One snake_case schema with stable IDs, so a team is the same team across tournaments, rosters and seasons.
| From the map veto to the last clutch | Share, as squares | Share of matches |
|---|---|---|
| Fixtures and results Effectively complete | ~100% | |
| Map scores Completed matches with a played map | 91% | |
| Player stats K/A/D, ADR, KAST, clutches, multi-kills | 86% | |
| Round economy and duels Deepest on top-tier events | Varies |
- Players
- 5,600+
- Teams
- 1,800+
- Tournaments
- 1,100+
History back to 2020, on every paid plan.
Why build on this CS2 API
Official feeds are enterprise only
Built for operators: sales calls, annual contracts and four- to five-figure minimums.
One set of terms
Both paid plans cover every endpoint, the market line included, on the same terms.
Odds APIs skip the match data
A price has no rosters, stats or history. We publish both, in one schema.
CS2 API endpoints
Every endpoint is on both paid plans. Cadence is how often we refresh it.
| Method | Path | Returns | Cadence |
|---|---|---|---|
| Matches | |||
| GET | /v1/cs2/matches | Live, scheduled and finished; filter by status, team or event | ≤90s |
| GET | /v1/cs2/matches/{id}/stats | Per-player K/A/D, ADR and KAST for one match | ≤90s |
| GET | /v1/cs2/matches/bulk | Up to 25 matches a request, everything embedded, plus a changed_since feed | ≤90s |
| GET | /v1/cs2/matches/{id}/lineups | Pre-match line-ups, recorded from July 2026 | ≤90s |
| GET | /v1/cs2/matches/{id}/streams | Where a match in progress is broadcast | ≤5 min |
| Teams, players and events | |||
| GET | /v1/cs2/teams/{id}/h2h | Head-to-head record and recent form | Daily |
| GET | /v1/cs2/players/{id}/stats | Career stat aggregates for a player | Daily |
| GET | /v1/cs2/tournaments | Events, tiers, prize pools and standings | Daily |
| GET | /v1/cs2/rankings | Our own team and player rankings | Daily |
| Odds and the stream | |||
| GET | /v1/cs2/odds | The market odds line (eo_market), append-only history | ≤90s |
| POST | /v1/cs2/ws-token | A short-lived ticket for the WebSocket stream | Stream |
Plain REST with Bearer auth, so any language works. Prefer a client library? The official Python client is MIT licensed and handles paging, retries and typed errors. It also includes an MCP server, so Claude, Cursor and other AI assistants can query the API. The rankings endpoint powers our public CS2 team rankings.
pip install esportsoddsThe OpenAPI referenceCS2 API FAQ
What CS2 data does the API cover?
Fixtures, live scores and results; per-map scores and vetoes; per-player match stats (K/A/D, ADR, KAST, clutches, multi-kills) on most matches; per-round team economy and duels; teams, players and tournaments with head-to-head and recent form; and our own team and player rankings. That is 27,000+ professional Counter-Strike matches, 20,000+ of them on CS2, back to 2020.
Is there an official HLTV or Valve API?
No. Counter-Strike has no official public match-data API, and community scrapers get IP-blocked. EsportsOdds is a self-serve, documented alternative: normalized JSON, a versioned schema and one Bearer token.
How fresh is the CS2 data?
Matches and the market line are polled on a ≤90s cadence; teams, players, tournaments and rankings rebuild daily. Rather than poll us, mint a WebSocket ticket and we push you the row when it changes in our feed. Every line row carries the age of its inputs (input_oldest_at), and lines from after the start of a match are kept and flagged in_play. This is a polled feed, not a real-time one.
Does the CS2 API include odds?
Yes: one market odds line on currently active matches. Our own model line is coming soon, once it clears validation.
Where does the data come from?
It is normalized into one consistent schema from public competitive-match records. We never expose per-book prices or any single upstream's raw feed. See our methodology.
Is the CS2 API free?
Not for current data. Plans start at $99/mo for 50,000 requests, with every endpoint on this page included. To see the shapes first, a free sandbox key reads a fixed sample of past matches, and the demo runs against the real API with no signup. No account at all? The shared public sample key reads the same sample, within daily limits.
CS2 API pricing
Every endpoint on this page, on both plans. No sales call.
Standard
Every endpoint and the WebSocket
$99a month, or $990 a year
Choose Standard50,000 requests a month
Pro
Plus unlimited bulk export and a public display licence
$299a month, or $2,990 a year
Choose Pro150,000 requests a month
One square is 10,000 requests. Not ready to pay? Start free with a sandbox key: a fixed sample of past matches, no card. Full pricing
The CS2 dataset you were searching for
Matches, stats, tournaments and a market line: one key, one schema. Or start free with a sandbox key: a fixed sample of past matches, no card.