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.

Everything below ships on one key and one schema — the same response shape whether you're reading a live board or a settled result.

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.

Frequently asked questions

What is an esports API?

A programmatic feed of esports schedules, live match state, player and team stats, and props/odds — instead of scraping HLTV, Liquipedia, or a sportsbook yourself. KashRock covers CS2, Valorant, League of Legends, Dota 2, Call of Duty, Rainbow Six, Mobile Legends, Deadlock, and Apex Legends on one schema and one key.

Is there a CS2 data API?

Yes. GET /v6/esports/cs2/... returns schedules, live boxscores (kills, deaths, assists, ADR, headshots) under 2 seconds on Builder/Pro, historical game logs, map veto/pick-ban intel, and settled results. Sandbox is free — 500 requests/day, no card.

What is a CS2 match ID?

kr_match_id is KashRock's stable identifier for a match — format kr_{sport}_{team-a}-vs-{team-b}-DD-MM-YYYY — used to join live boxscores, game logs, and settled results for the same match across every endpoint.

Is there an esports odds API?

Yes. GET /v6/esports/{sport}/props and /lines return DFS props, sportsbook lines, and Kalshi/Polymarket quotes normalized onto one canonical propId, so every book's price on the same prop joins without reconciling separate schemas.

How current is KashRock's live esports data?

Under 2 seconds on Builder/Pro, REST or WebSocket — both read from the same Redis-backed publish path, stamped with a durable per-match sequence number so live state can't regress after a worker restart. Sandbox REST stays 30-60s delayed.

Does a team rebrand or cross-source naming disagreement break a lookup?

No. KashRock reconciles match identity across sources before it reaches you. On 12 Sep 2026, our bo3.gg resolver and Riot-sourced vault disagreed on team order for a LoL fixture between FURIA and LOS and minted two different match IDs for the same game; the fix makes both converge on one canonical kr_match_id instead of forking.