Introduction
Counter-Strike 2 odds, match data, and player stats — one REST + WebSocket API.
The EsportsOdds API gives you a derived market odds line, match data, and player stats for Counter-Strike 2 through a single, versioned REST API plus a WebSocket channel for update notifications. It's built for esports media, stats and developer tools, individual bettors and traders, and fantasy/prediction platforms.
Every response is plain JSON over HTTPS. Odds are decimal and carry an explicit source:
eo_market is our de-vigged market line, combined from multiple bookmakers and exchanges —
never any single book's price, and never naming the contributing books. Our own modeled line
(eo_model) joins it once it clears validation. See the methodology note below.
Everything here is live
This documentation previously flagged some fields and parameters as intended-but-not-yet-shipped.
That reconciliation finished on 2026-07-26 and nothing is flagged any more — if it's described
here, it works. Two exceptions are called out explicitly where they appear: the
model odds line isn't served until it clears its accuracy gate, and
logo_url is deliberately always empty.
Base URL
https://api.esportsodds.ggAll endpoints are versioned and game-namespaced as /v1/{game}/{resource}. CS2 is the only game
populated today (cs2), but the path shape is game-agnostic by construction — a second title would
extend it as /v1/{game}/... without breaking existing paths.
Your first request
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.esportsodds.gg/v1/cs2/matches?status=live"{
"data": [
{
"id": "018f...e2a1",
"game_id": "018f...0001",
"tournament_id": "018f...7c3d",
"team_a_id": "018f...aa10",
"team_b_id": "018f...bb20",
"format": "bo3",
"status": "live",
"stage": "Playoffs",
"scheduled_at": "2026-07-01T18:00:00Z",
"score_a": 1,
"score_b": 0,
"winner_team_id": null
}
],
"meta": {
"count": 1,
"next_cursor": null
}
}JSON field names are snake_case (
id,team_a_id,scheduled_at) — exactly as documented in the OpenAPI reference. That's deliberate and stable; code against it exactly.
Every list endpoint responds with this {data, meta} envelope: data is the page of results,
meta.count its size, and meta.next_cursor an opaque cursor for the next page — pass it back as
?cursor= to paginate; it's null on the final page. Single resources
(/v1/cs2/matches/{id}, teams, players, tournaments) wrap the one object the same way:
{"data": {...}}.
What's here
Quickstart
An API key to live matches, odds and a WebSocket stream in four steps.
Your first integration
A complete runnable script — pagination, retries, error handling.
Core concepts
The data model, the envelope, pagination, and how the odds line is built.
CS2 data reference
Every stat field, what it measures and which units it uses.
How-to
Budget requests, cache fixtures, track odds movement, connect a socket.
Troubleshooting
The behaviours that surprise people most often.
The full, interactive endpoint reference — generated directly from the API's OpenAPI spec, with a "try it" panel per endpoint — is in the sidebar, grouped by resource.
Machine-readable
- OpenAPI specification — the complete contract: every endpoint, parameter, schema and a real response example. Point your client generator at it.
- llms.txt and llms-full.txt — this documentation for coding
agents. Any guide is also available as markdown by swapping
/docs/for/md/in its URL.
Related reading
Worked tutorials and background explainers live on the main site:
- Guides — build a Discord score bot, a live dashboard, fantasy projections, and more.
- Learn — the concepts behind the data: de-vigging, implied probability, ADR, KAST, map win rates.
- Glossary — short definitions of the CS2 and odds terms used throughout these docs.
Odds methodology, briefly
This API serves exactly two odds lines, both derived, both explicit in the source field:
eo_market— live today. A de-vigged aggregate: we monitor prices across multiple bookmakers and exchanges, remove each book's margin, take the median fair probability, and re-normalize. Published only when at least two books contribute; each line carries abook_count. We never republish a single book's price and never name a contributing book.eo_model— coming soon. Our own proprietary modeled line, gated behind an accuracy-validation step; it appears here once validation clears, with its track record (calibration + Brier score) published alongside.
Full detail on the methodology page.