Esports Data API
KashRock is a DaaS for esports books and apps. Prefer the Esports MCP in Cursor/Claude so you never hunt endpoints. App builders: SDKs (npm install kashrock / pip install kashrock). HTTP stays for power users. Base URL https://kashrock.up.railway.app. See plans and coverage on the esports odds API and esports data API pages.
Live board
DFS player props on /props (includes links.player_image + team logos). Resolve media by name on /media. DFS + sportsbook named-player props on /player-props. Team mainlines on /lines.
DFS line gaps
GET /{sport}/gaps finds the same prop at different DFS lines (line_gap). Hobby plan.
Consensus lines
GET /{sport}/lines de-vigs Thunderpick + Kalshi + Polymarket into one fair probability and gated edges. Hobby plan.
Schedule
Fixtures and matches for CS2, Valorant, LoL, Dota 2, COD, R6, MLBB, and Deadlock.
Research
One player, one market: live line, series totals, coverage, and settled outcomes.
Settlement
Hit / miss / push on the same canonical stat_type you received on the board.
Quick start
HTTPS only. Pass your key on every /v6 request.
curl -H "X-API-Key: YOUR_API_KEY" \ "https://kashrock.up.railway.app/v6/esports/cs2/props"
{
"propId": "kr_prop_883ba7a1e090",
"eventId": "kr_ev_d9410a855f83",
"offerId": "kr_prop_883ba7a1e090_6_over",
"book_name": "Betr",
"player_name": "mezii",
"stat_type": "CS2_HEADSHOTS_MAPS_1_2",
"line": 14.5,
"direction": "over",
"team": "Team Vitality",
"opponent": "Lynn Vision Gaming",
"event_time": "2026-08-16T13:55:00.000Z"
}Authentication
Create keys in the Console. Send either header:
X-API-Key: YOUR_API_KEYAuthorization: Bearer YOUR_API_KEY
Keep keys server-side. Do not ship them in browsers or public repos.
Sports
Use the slug in the path as {sport}.
cs2valorantloldota2codr6mlbbdeadlockID system
Every prop row carries six IDs. Use the kr_ fields to join books, matches, and live data.
| Field | Layer | Purpose |
|---|---|---|
| eventId | Match | Same game across every book's props and lines. |
| kr_match_id | Match | Same match on /matches, /live, and /gamelogs — join a prop straight to its boxscore, no team/date matching required. |
| propId | Market | Player + stat + line. Shared by over and under. |
| offerId | Selection | One book × direction. Use this on a bet slip. |
| source_event_id | Provider | Raw event id from the book. |
| source_prop_id | Provider | Raw prop id from the book. |
eventId and kr_match_id are minted by two different pipelines for the same match, so every prop row now carries both directly — call GET /v6/esports/{sport}/matches/{kr_match_id}/boxscore with the value straight off a props response. A prop from a match KashRock hasn't cross-referenced yet returns kr_match_id: null— that's honest "not yet available," not a broken join.
Errors
JSON body with a detail string.
| Status | Meaning |
|---|---|
| 401 | Missing or invalid API key. |
| 403 | Key is not allowed on this route. |
| 404 | No tape or player for that query. |
| 409 | More than one player matches the name. |
| 422 | Bad or missing parameter. |
| 429 | Rate limited. Back off and retry. |
| 503 | Vault or cache unavailable. Retry. |