Skip to content

Esports

Esports is included on every plan at no extra cost. Use one sport key per game. Simulated console sports are not part of this coverage. Player props are a later step.

KeyGame
cs2Counter-Strike 2
lolLeague of Legends
dota2Dota 2
valorantValorant

Fixtures and tournaments

Use GET /v1/sports/{sport}/events to discover upcoming fixtures and /odds for their prices. Use /events/live and /odds/live for fixtures in play. Live access follows your plan's in-play entitlement, from Growth up; the live feed add-on is not required for REST.

A fixture carries a tournament object with key and title. Use the returned key as tournament= on that game's events or odds request to select one tournament, just as for tennis. Omit the filter for all available tournaments. Coverage follows fixtures carried by at least two books, without a fixed tournament list; a price request can return fewer books after filters and availability checks.

best_of is present only when the format is known and the books agree, with supported values 1, 3 or 5. Otherwise it is absent. Do not substitute zero or infer the series length from the markets present. A BO2 result can still carry a three-way Draw market without best_of.

Markets

KeyMeaningGames / periods
h2hTwo-way match or map resultAll four games; full match or map1 through map5
h2h_3_wayBO2 result including the 1-1 Draw, separate from two-way resultAll four games where offered; full match
maps_handicapMap-count handicapAll four games; full match
maps_totalTotal mapsAll four games; full match
rounds_handicapRound handicapCS2 and Valorant; per map
rounds_totalTotal roundsCS2 and Valorant; per map
kills_handicapTeam kill handicapLeague of Legends and Dota 2; per map
kills_totalTotal killsLeague of Legends and Dota 2; per map

Request the keys explicitly with markets=. A BO2 1-1 Draw belongs to h2h_3_way, never the two-way h2h market. Ask for markets=h2h,h2h_3_way to receive both where offered. Correct score is not carried.

Map periods

Use periods=map1 for the first map, or any of map1, map2, map3, map4 and map5. The response carries a separate period field on each map market. A full-match market has no period field. Omit periods for full match only, use periods=full,map1 for both, or periods=all for every available period. A zero handicap is a real line; an absent line is never zero.

Worked requests and responses

These examples are illustrative. Teams, tournaments, bookmaker names and prices below do not describe measured coverage. Each response is trimmed to one example bookmaker. Timestamps are UTC and prices are American odds.

CS2

Request match and map markets, narrowed to one tournament:

curl -H "X-API-Key: $ODDSLINK_KEY" \
  "https://oddslink.app/v1/sports/cs2/odds?tournament=example_cup&markets=h2h,maps_handicap,maps_total,rounds_handicap,rounds_total&periods=full,map1"
[
  {
    "id": "cs2:exampleaway-examplehome:2026-10-28",
    "sport_key": "cs2",
    "sport_title": "CS2",
    "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": "rounds_handicap",
            "period": "map1",
            "last_update": "2026-10-28T12:00:00.000Z",
            "outcomes": [
              {
                "name": "Example Away",
                "price": -110,
                "point": -2.5,
                "main": true
              },
              {
                "name": "Example Home",
                "price": -110,
                "point": 2.5,
                "main": true
              }
            ]
          },
          {
            "key": "rounds_total",
            "period": "map1",
            "last_update": "2026-10-28T12:00:00.000Z",
            "outcomes": [
              {
                "name": "Over",
                "price": -110,
                "point": 22.5,
                "main": true
              },
              {
                "name": "Under",
                "price": -110,
                "point": 22.5,
                "main": true
              }
            ]
          }
        ]
      }
    ],
    "unmatched_bookmakers": []
  }
]

League of Legends

Request match and map markets, narrowed to one tournament:

curl -H "X-API-Key: $ODDSLINK_KEY" \
  "https://oddslink.app/v1/sports/lol/odds?tournament=example_cup&markets=h2h,maps_handicap,maps_total,kills_handicap,kills_total&periods=full,map1"
[
  {
    "id": "lol:exampleaway-examplehome:2026-10-28",
    "sport_key": "lol",
    "sport_title": "League of Legends",
    "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": []
  }
]

Dota 2

Request match and map markets, narrowed to one tournament:

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": []
  }
]

Valorant

Request match and map markets, narrowed to one tournament:

curl -H "X-API-Key: $ODDSLINK_KEY" \
  "https://oddslink.app/v1/sports/valorant/odds?tournament=example_cup&markets=h2h,maps_handicap,maps_total,rounds_handicap,rounds_total&periods=full,map1"
[
  {
    "id": "valorant:exampleaway-examplehome:2026-10-28",
    "sport_key": "valorant",
    "sport_title": "Valorant",
    "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": "rounds_handicap",
            "period": "map1",
            "last_update": "2026-10-28T12:00:00.000Z",
            "outcomes": [
              {
                "name": "Example Away",
                "price": -110,
                "point": -2.5,
                "main": true
              },
              {
                "name": "Example Home",
                "price": -110,
                "point": 2.5,
                "main": true
              }
            ]
          },
          {
            "key": "rounds_total",
            "period": "map1",
            "last_update": "2026-10-28T12:00:00.000Z",
            "outcomes": [
              {
                "name": "Over",
                "price": -110,
                "point": 22.5,
                "main": true
              },
              {
                "name": "Under",
                "price": -110,
                "point": 22.5,
                "main": true
              }
            ]
          }
        ]
      }
    ],
    "unmatched_bookmakers": []
  }
]

History

Esports recording starts with coverage. Earlier esports prices are not backfilled. Use the fixture ID from the current API for historical requests; available depth depends on what was recorded and your plan's history access. See the history guide for the request and response shapes.