Esports API.
Props & odds across 9 titles, 25 books.
What is the KashRock esports API?
The KashRock esports API returns matches, live scores, player stats, odds and DFS props for nine titles (CS2, Valorant, League of Legends, Dota 2, Call of Duty, Rainbow Six, Mobile Legends, Deadlock and Apex Legends) over REST, an SDK and MCP. Every match, team, player and prop keeps one permanent KashRock ID, so data from different sources joins cleanly. A free Sandbox key gives 500 requests a day with no card, and paid plans run from $29 to $199 a month.
| You need | Endpoint | What comes back |
|---|---|---|
| Schedule and results | GET /v6/esports/{sport}/matches | Upcoming, live and finished matches, each with a kr_match_id |
| Final score and map results | GET /v6/esports/{sport}/matches/{slug}/boxscore | Series score, map results and player stats for a finished match |
| Odds and consensus | GET /v6/esports/{sport}/lines | Consensus lines across books, with the scope of every market |
| Player props | GET /v6/esports/{sport}/props | Live DFS and book player props |
| Closing lines | GET /v6/esports/{sport}/matches/{slug}/lines/history | Open and close per book, each with observed_at |
| Players and rankings | GET /v6/esports/{sport}/players and /rankings | Player lookups and rankings under kr_pl_* and kr_tm_* ids |
Updated
Quick answer: Instant API key. No sales call. The developer alternative to enterprise feeds like SportsDataIO, LSports, and GRID.
KashRock is an esports data API. It covers nine titles: CS2, Valorant, League of Legends, Dota 2, Call of Duty, Rainbow Six Siege, Mobile Legends: Bang Bang, Deadlock, and Apex Legends, with matches, box scores, and player stats. Player props and lines are available for CS2, Valorant, League of Legends, Dota 2, and Rainbow Six Siege, from PrizePicks, Underdog, Dabble, Sleeper, Betr, Boom, Pick6, ParlayPlay, Thunderpick, Cloudbet, BetRivers, Pinnacle, Bovada, Courtside, Betway, Dexsport, Picklebet, 1xBet, BetOnline, Bet365, BetWhale, GG.bet, Kalshi, Polymarket, and Polymarket US. Live player kills, deaths, and assists update within 2 seconds of our upstream source on Builder and Pro, with a 5-second delay on Hobby and a 30-60 second delay on the free plan. A free key gives 500 requests every UTC day, with no card required.

SDKs: npm install kashrock · pip install kashrock
What the esports API covers
- —Props and lines — live ingested player props across CS2, Valorant, LoL, Dota 2, COD, R6, MLBB, and Deadlock. One schema, many books.
- —Matches and stats — schedules, box scores, game logs, and map-level stats — not just who won.
- —Stable IDs — players, teams, matches, and props keep the same ID when a book spells the name differently.
Normalization Engine: Canonical IDs and Schema Architecture
Every book spells the same match, player, and team differently. KashRock resolves all of it to one canonical ID the moment it lands, so a match, player, or prop keeps the same identifier across every book, feed, and endpoint — you never join on a provider's numeric ID or name string.
- —Matches
kr_match_id— kr_{sport}_{slug}, e.g. kr_cs2_imperial-vs-bestia-2026-08-15. One ID per fixture, stable from scheduled through finished. - —Players
kr_pl_*— canonical_player_id resolved once per player and reused across props, stats, game logs, and live boxscores — regardless of nickname changes or per-book spelling. - —Teams
kr_tm_*— canonical_team_id shared across match, prep, and player-board responses so a team is one identity end to end, not a per-endpoint lookup. - —Props
kr_prop_*— kr_prop_{hash} identifies a market line; an offerId (kr_prop_{hash}_{side}_{direction}) identifies one book's specific offer on that line, for cross-book gap detection.
Upstream provider IDs never leave the ingestion layer — they are translated to KashRock IDs before anything is written to the API, cache, or webhook payload. Full field reference: matches schema and player props schema.
Esports Match API
Upcoming, live, and finished fixtures on GET /v6/esports/{sport}/matches — status, start time, and stable match IDs, not just a winner flag. Filter by upcoming, live, or finished. Field reference: matches docs.
Esports Score API
Live scores and in-game boxscores on GET /v6/esports/{sport}/live/games and GET /v6/esports/{sport}/live/{game_id}/boxscore — map score, round clock, and player K/D/A while the map is on. Field reference: live scores docs.
Live Data Infrastructure: Latency, Delivery Formats, and Update Frequency
Live boxscores publish from the in-game feed into Redis, then serve on REST and WebSocket. The SLA is the same number on the docs, the pipeline health check, and this page — no vaguer claim on marketing than on the API contract.
| Plan | Live update delay | Delivery |
|---|---|---|
| Sandbox | 30–60 second delay (all sports) | REST JSON |
| Hobby | 5 second delay (all 9 titles) | REST JSON |
| Builder+ / Pro | Under 2 seconds, update to client | REST JSON + WebSocket push |
Poll GET /v6/esports/{sport}/live/games and GET /v6/esports/{sport}/live/{game_id}/boxscore for live match state and per-player K/D/A, or subscribe on WS /v6/esports/live/ws to get boxscore rows pushed as they update instead of polling. One schema across CS2, Valorant, LoL, Dota 2, COD, R6, MLBB, Deadlock, and Apex — 9 titles, 25 books normalized to the same fields. Check GET /v6/esports/live/health for measured latency on every live game (p50 and p95). Depth: esports data latency, low-latency esports API.
Why one schema wins
Why one schema?
One schema means you join on one ID and read one set of labels, instead of reconciling every source's spelling, team order and market scope yourself. These are the six problems it removes, the field that removes each one, and what you get.
| Problem | Field | Result |
|---|---|---|
| The same match has three names across sources | kr_match_id, kr_tm_*, team1_alias | One key for every join. Team Liquid and Liquid resolve to the same team |
| Team order is reversed between sources | The permanent kr_match_id | reveal-vs-huskies and huskies-esport-vs-reveal return the same match |
| A 21.5 line could be maps, rounds or one map | market_type, market_scope, included_maps | Scope is stated on every market, and a line a book never labelled is marked unknown |
| An empty 200 burns your retries | available: false, reason | An explicit answer with a reason, not an empty list |
| A finished match stays on upcoming | status, end_date, the series score | A finished match returns finished, when it ended, and its score |
| A model needs the close, not a snapshot | open, close, observed_at | Opening and closing prices per book, each with the time it was observed |
Updated
Shipping this weekend? Start on Build an esports app or the quickstart. Line shopping: esports odds API. Full board: DFS Esports API. Comparing sportsbook feeds: Databet alternative.
Switching from a stats or enterprise vendor? See the PandaScore alternative, the Abios alternative, or the Sportradar alternative. Sport focus: CS2 player props API. Backtests: Historical Esports Data. From Cursor, the Esports MCP guide. Titles and books: Coverage. Audience data behind the titles: most popular esports and League of Legends viewership.