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.

EndpointPurposeKey filters
GET /v6/esports/dota2/propsLive player propsbook, market
GET /v6/esports/dota2/matchesSchedule / live / completedstatus, dates
GET /v6/esports/dota2/players/{slug}/gamelogsMap historylimit
GET /v6/esports/dota2/linesConsensus 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.

FieldExampleUsed for
propIdkr_prop_97ad10b4e9dbStable contract key
stat_typeDOTA2_KILLS_MAPS_1_2Map-scoped kills
line13.5DFS threshold
book_namePrizePicksVenue
GET /v6/esports/dota2/props
{
  "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.

SourceSchemaBest use
DatDota / OpenDotaStrong stats, no DFS linesMetrics & history
Book scrapesBreak oftenFragile boards
KashRock Dota 2 APIProps + IDs + matchesTools 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.

Frequently asked questions

What Dota 2 props does the API return?

Live DFS player props with sport-prefixed types like DOTA2_KILLS_MAPS_1_2, plus matches and gamelogs for grading.

Do you invent map stats when Bo3 is empty?

No. Map depth comes from proven sources. Unresolved fields stay empty rather than fabricated.

Is there transparent Dota API pricing?

Yes. Published plans from a free Sandbox (CS2 schema) and paid tiers from $29/mo — no quote wall.