Dota 2 odds API

Dota 2 prices in one fixture shape, from match result to individual maps. Esports is included on every plan at no extra cost.

Use dota2 to request Dota 2 fixtures. Each fixture carries its tournament, with a best_of field when the series format is known and the books agree.

Request upcoming fixtures with /odds and in-play prices with /odds/live. Live odds follow your plan's in-play access. Availability varies by fixture and bookmaker.

curl -H "X-API-Key: $ODDSLINK_KEY" \
  "https://oddslink.app/v1/sports/dota2/odds?tournament=example_cup&markets=h2h,maps_handicap,maps_total,kills_handicap,kills_total&periods=full,map1"
[
  {
    "id": "dota2:exampleaway-examplehome:2026-10-28",
    "sport_key": "dota2",
    "sport_title": "Dota 2",
    "commence_time": "2026-10-28T15:00:00.000Z",
    "is_live": false,
    "status": "scheduled",
    "home_team": "Example Home",
    "away_team": "Example Away",
    "tournament": {
      "key": "example_cup",
      "title": "Example Cup"
    },
    "best_of": 3,
    "bookmakers": [
      {
        "key": "example",
        "title": "Example bookmaker",
        "last_update": "2026-10-28T12:00:00.000Z",
        "markets": [
          {
            "key": "h2h",
            "last_update": "2026-10-28T12:00:00.000Z",
            "outcomes": [
              {
                "name": "Example Away",
                "price": -110
              },
              {
                "name": "Example Home",
                "price": -110
              }
            ]
          },
          {
            "key": "maps_handicap",
            "last_update": "2026-10-28T12:00:00.000Z",
            "outcomes": [
              {
                "name": "Example Away",
                "price": -110,
                "point": -1.5,
                "main": true
              },
              {
                "name": "Example Home",
                "price": -110,
                "point": 1.5,
                "main": true
              }
            ]
          },
          {
            "key": "maps_total",
            "last_update": "2026-10-28T12:00:00.000Z",
            "outcomes": [
              {
                "name": "Over",
                "price": -110,
                "point": 2.5,
                "main": true
              },
              {
                "name": "Under",
                "price": -110,
                "point": 2.5,
                "main": true
              }
            ]
          },
          {
            "key": "h2h",
            "period": "map1",
            "last_update": "2026-10-28T12:00:00.000Z",
            "outcomes": [
              {
                "name": "Example Away",
                "price": -110
              },
              {
                "name": "Example Home",
                "price": -110
              }
            ]
          },
          {
            "key": "kills_handicap",
            "period": "map1",
            "last_update": "2026-10-28T12:00:00.000Z",
            "outcomes": [
              {
                "name": "Example Away",
                "price": -110,
                "point": -5.5,
                "main": true
              },
              {
                "name": "Example Home",
                "price": -110,
                "point": 5.5,
                "main": true
              }
            ]
          },
          {
            "key": "kills_total",
            "period": "map1",
            "last_update": "2026-10-28T12:00:00.000Z",
            "outcomes": [
              {
                "name": "Over",
                "price": -110,
                "point": 45.5,
                "main": true
              },
              {
                "name": "Under",
                "price": -110,
                "point": 45.5,
                "main": true
              }
            ]
          }
        ]
      }
    ],
    "unmatched_bookmakers": []
  }
]

Illustrative Dota 2 request and response. Teams, tournament, bookmaker and prices are examples, not measured coverage.

More than the main line

Match and map results

Use h2h for two-way results. A BO2 result with a 1-1 Draw uses the separate h2h_3_way market.

Map-count lines

maps_handicap and maps_total say exactly what the line measures.

Per-map kills

Select map1 through map5 separately from kills_handicap and kills_total.

One tournament

Read the fixture's tournament.key and pass it as tournament= to narrow your next request.

Markets

Dota 2 markets and periods
MarketPeriods
h2h: match or map resultFull match; map1 through map5
h2h_3_way: BO2 result including DrawFull match
maps_handicap: map-count handicapFull match
maps_total: total mapsFull match
kills_handicap: kills handicapmap1 through map5
kills_total: total killsmap1 through map5

Books for Dota 2

Book availability varies by fixture. See the esports guide for request examples.

Every book on every plan

Monthly plans, request allowances and features
PlanPer monthRequests a monthIn-playHistory
Free$01,000NoNo
Starter$2420,000NoNo
Scale$99500,000Yes2 years
Business$1995,000,000YesAll of it

Compare every plan

Questions

Does esports cost extra?

No. All four games are included on every plan. In-play access and history follow the plan's existing entitlements.

Is the series format always present?

No. best_of is present only when known and the books agree. An absent field does not mean zero.

Are player props included?

Player props are a later step. These markets cover teams, matches and maps.

How far back does history go?

Recording starts with esports coverage. Earlier prices are not backfilled; history access follows your plan.

Build with Dota 2 odds