Esports odds API
Four games, one fixture shape, every market from the match result down to individual maps. Esports is included on every plan at no extra cost.
Each game has its own sport key: cs2, lol, dota2 and valorant. Every fixture carries its tournament, plus 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, then pick markets with markets= and maps with periods=. Availability varies by fixture and bookmaker.
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"import os, requests
r = requests.get(
"https://oddslink.app/v1/sports/cs2/odds",
params={"tournament": "example_cup", "markets": "h2h,maps_handicap,maps_total,rounds_handicap,rounds_total", "periods": "full,map1"},
headers={"X-API-Key": os.environ["ODDSLINK_KEY"]},
)
r.raise_for_status()
for game in r.json():
print(game["away_team"], "at", game["home_team"])[
{
"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": []
}
]Illustrative CS2 request and response. Teams, tournament, bookmaker and prices are examples, not measured coverage.
More than the main line
CS2
Sport key cs2. Match and map results, map-count lines, and per-map rounds_handicap and rounds_total. CS2 odds API
League of Legends
Sport key lol. Match and map results, map-count lines, and per-map kills_handicap and kills_total. League of Legends odds API
Dota 2
Sport key dota2. Match and map results, map-count lines, and per-map kills_handicap and kills_total. Dota 2 odds API
Valorant
Sport key valorant. Match and map results, map-count lines, and per-map rounds_handicap and rounds_total. Valorant odds API
Markets
| Market | Periods |
|---|---|
| h2h: match or map result | All four games. Full match; map1 through map5 |
| h2h_3_way: BO2 result including Draw | All four games. Full match |
| maps_handicap: map-count handicap | All four games. Full match |
| maps_total: total maps | All four games. Full match |
| rounds_handicap: rounds handicap | CS2 and Valorant. map1 through map5 |
| rounds_total: total rounds | CS2 and Valorant. map1 through map5 |
| kills_handicap: kills handicap | League of Legends and Dota 2. map1 through map5 |
| kills_total: total kills | League of Legends and Dota 2. map1 through map5 |
Books for Esports
Book availability varies by fixture. See the esports guide for request examples.
Every book on every plan
| Plan | Per month | Requests a month | In-play | History |
|---|---|---|---|---|
| Free | $0 | 1,000 | No | No |
| Starter | $24 | 20,000 | No | No |
| Growth | $49 | 100,000 | Yes | No |
| Scale | $99 | 500,000 | Yes | 2 years |
| Business | $199 | 5,000,000 | Yes | All of it |
Questions
Which games are covered?
Counter-Strike 2 (cs2), League of Legends (lol), Dota 2 (dota2) and Valorant (valorant).
Why rounds for some games and kills for others?
CS2 and Valorant maps are scored in rounds; League of Legends and Dota 2 maps in kills. Each game carries only the per-map lines that fit it.
Does esports cost extra?
No. All four games are included on every plan. In-play access and history follow the plan's existing entitlements.
Are player props included?
Player props are a later step. These markets cover teams, matches and maps.