Esports Data API Features
Quick answer: KashRock is an esports data API for CS2, Valorant, League of Legends, Dota 2, Call of Duty, Rainbow Six, Mobile Legends, Deadlock, and Apex Legends — live player kills, deaths, and assists under 2 seconds on REST and WebSocket, canonical IDs that hold even when sources disagree on team naming or order, and settled hit/miss/push grades for CS2, Valorant, LoL, Dota 2, COD, and R6 props. One schema, one key.
What's included
- —Esports Data Coverage — CS2, Valorant, League of Legends, Dota 2, Call of Duty, Rainbow Six, Mobile Legends, Deadlock, and Apex Legends — schedules, DFS/sportsbook/prediction-market props, player and team stats, and settled outcomes on one canonical schema. One key, nine titles, no per-book integration to maintain.
- —Parlays & Market Movement — GET /v7/{sport}/parlays prices a multi-leg ticket or discovers ranked +EV parlays on the book you name — the fair price always excludes the leg book, so a book never grades its own number. GET /v7/{sport}/flow surfaces steam, shift, volume and whale plays, each carrying the thresholds it cleared so a signal is auditable, not a bare alert.
- —Live Scoreboard + Historical — Live kills, deaths, and assists update in under 2 seconds on Builder/Pro. Example: ZywOo's live boxscore line — 11 kills, 9 deaths, 7 assists, 57.4 ADR through round 19 of Vitality vs. Magic (Mirage) — refreshes that fast whether you poll GET /v7/cs2/live?include=boxscore or subscribe over WebSocket. Pull the same fields for upcoming, live, and completed matches, plus full box scores and game logs for any date.
- —Canonical IDs — KashRock mints one stable ID per match, player, and team — even when two of our own upstream sources disagree with each other. On 12 Sep 2026, our bo3.gg-backed match resolver and our Riot-sourced vault disagreed on team order for a League of Legends fixture between FURIA and LOS, minting two different match IDs for the same real game — kr_lol_los-vs-furia-... from the resolver, kr_lol_furia-vs-los-... in the vault, with the vault-side copy stuck showing no score. We fixed the reconciliation so both paths converge on one canonical kr_match_id instead of silently forking into two records.
- —Granular Stat Depth — Map-scoped stat types like CS2_HEADSHOTS_MAPS_1_2 — kills, deaths, assists, headshots, ADR, and first kills, broken out per map or map range, not just series totals. The same field names appear on live boxscores, historical game logs, and settled results — no schema change between live and history.
- —Consistent History Schema — Every kills/deaths/assists/ADR field uses the same name, unit, and canonical ID whether you're reading a live boxscore, a game log from three months ago, or a settled result. That consistency is what backtesting and hit-rate analysis need — we don't yet claim any metric is validated for ML training; our own catalog only promotes a metric to model-ready status once it has a stable definition, full coverage, and proven lift, and none has crossed that bar yet.
- —Outcome Verification — Settled hit/miss/push grades for kills, deaths, assists, headshots, ADR, and first kills across CS2, Valorant, League of Legends, Dota 2, Call of Duty, and Rainbow Six — graded from live and vault box-score data, not self-reported, the only titles with a wired grading source today. GET /v7/{sport}/results, filterable by grade: hit, miss, push, pending, error.
- —API Reliability — Live state carries a durable per-match sequence number in Redis that survives a worker restart — kill counts and map numbers can't regress or repeat mid-series, the exact bug class a naive in-process poller hits on every redeploy. REST and WebSocket read from the same publish path, so a poller and a subscriber never disagree.
If you need a normalized feed instead of another UI wrapper, the Esports API exposes live boards, schedules, and history on one schema — with the IDs and outcome patterns that keep backtests and grading honest. Start free on Sandbox, or see published pricing.