Dota 2 API.
Map-scoped kills without the scrape tax.
Dota boards punish naive joins. Team tags rotate, Steam nicknames drift, and DFS kill lines are map-scoped while raw feeds blur series totals. A production Dota 2 API has to make those distinctions explicit — or your model silently grades the wrong game.
Why a Dota 2 API needs a schema
Fragmented book feeds and drifting nicknames make free-text Dota pipelines fail under roster churn. Schema first, then UI.
Practical rule: never grade a maps 1–2 kill line from a series KDA dump. Scope has to live on the market key.
Series vs map kills
Series parent, map children, props with explicit DOTA2_* map scope. Team and opponent resolve through canonical IDs — empty string when unresolved, never a guessed org.
Core Dota 2 endpoints
All under /v6/esports/dota2/. Same envelope as CS2 and LoL so one client works across titles.
| Endpoint | Purpose | Key filters |
|---|---|---|
| GET /v6/esports/dota2/props | Live player props | book, market |
| GET /v6/esports/dota2/matches | Schedule / live / completed | status, dates |
| GET /v6/esports/dota2/players/{slug}/gamelogs | Map history | limit |
| GET /v6/esports/dota2/lines | Consensus odds (Hobby+) | — |
Canonical IDs
- —propId / canonical_player_id for stable joins
- —DOTA2_KILLS_MAP_* style keys only
- —matchup_key when book event IDs diverge
Sample live Dota prop
Live PrizePicks Dota prop from production.
| Field | Example | Used for |
|---|---|---|
| propId | kr_prop_97ad10b4e9db | Stable contract key |
| stat_type | DOTA2_KILLS_MAPS_1_2 | Map-scoped kills |
| line | 13.5 | DFS threshold |
| book_name | PrizePicks | Venue |
{
"source": "kashrock",
"sport": "dota2",
"props": [
{
"propId": "kr_prop_97ad10b4e9db",
"player_name": "rincyq",
"stat_type": "DOTA2_KILLS_MAPS_1_2",
"line": 13.5,
"odds": -137,
"direction": "over",
"team": "Pips+4",
"book_name": "PrizePicks",
"event_time": "2026-09-12T11:00:00.000Z"
}
]
}Comparing Dota sources
DatDota is excellent for metrics. It is not your PrizePicks board. KashRock joins both worlds without making you scrape.
| Source | Schema | Best use |
|---|---|---|
| DatDota / OpenDota | Strong stats, no DFS lines | Metrics & history |
| Book scrapes | Break often | Fragile boards |
| KashRock Dota 2 API | Props + IDs + matches | Tools and models |
Prop verification
- —Place against propId + line + direction
- —Settle from map gamelogs
- —Store hit / miss / push with payload evidence
Operational practices
- —Poll live props separately from archive jobs
- —Filter ?book= when testing one venue
- —Prefer path-style sport routes
Quick reference
GET /v6/esports/dota2/props → join on propId → grade from gamelogs. Instant key at published prices.
If you need a normalized feed instead of another UI wrapper, KashRock 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.