Esports Data API
KashRock is a DaaS for esports books and apps. Default HTTP is /v7. Base https://kashrock.up.railway.app.
MCP
Agents in Cursor or Claude. Tools, not endpoint hunting.
SDKs
npm install kashrock / pip install kashrock for app builders.
V7 Guide
Conventions, /v7/meta, and links into every topic page.
Route Index
Every public V7 route, plan tier, and deep-dive link.
Plans & Upgrading
| Plan | Rate limit | Quota | Live data |
|---|---|---|---|
| Sandbox (free) | 10 req/min | 1,500 credits/day | CS2 eval (no live desk) |
| Hobby | 30 req/min | 1.5M credits/mo | 15s delayed |
| Builder | 100 req/min | 5M credits/mo | real-time |
| Pro | 250 req/min | 10M credits/mo | real-time |
| Quant | 500 req/min | 20M credits/mo | real-time |
Every call spends credits by weight: prematch endpoints 1, matches 2, props 5, history 5, live scores 10, lines 10. Credit packs (10K for $20, 50K for $75, 250K for $250) top up the same balance after your plan quota runs out.
Hit a limit or a plan gate and the API answers with an upgrade object, one sentence plus a tracked checkout link preselected to the cheapest plan that unlocks it. Upgrade to Hobby, Builder for real-time data, Pro, or build a custom plan.
Quick Start
HTTPS only. Pass your key on every request. Start with /v7/meta: it returns the sports, books, markets and a routes table naming every endpoint, its parameters and the plan it needs, so one call tells you what to ask for next.
curl -H "X-API-Key: YOUR_API_KEY" \ "https://kashrock.up.railway.app/v7/meta"
{
"available": true,
"plan": "hobby",
"sports": [
"apex",
"cod",
"cs2",
"deadlock",
"dota2",
"lol",
"mlbb",
"r6",
"valorant"
],
"routes": [
{
"route": "/v7/meta",
"answers": "sports, books (kind + supports), markets, routes, your plan",
"plan": "sandbox"
},
{
"route": "/v7/{sport}/props",
"params": "board, view, market, player, book, format",
"answers": "player props (board=dfs|main|all)",
"plan": "sandbox"
},
{
"route": "/v7/{sport}/lines",
"params": "market, view, include_started, format",
"answers": "team mainlines with consensus fair price",
"plan": "hobby"
}
]
}Then read a board. Every row carries KashRock ids you can join across props, matches and live data.
curl -H "X-API-Key: YOUR_API_KEY" \ "https://kashrock.up.railway.app/v7/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"
}Full list: Route Index. Already calling V6? It keeps working, see V6 API and, when you want to move, Moving To V7.
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 /v7/{sport}/matches?ids={kr_match_id}&include=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. |
