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.
| Key | Game |
|---|---|
cs2 | Counter-Strike 2 |
lol | League of Legends |
dota2 | Dota 2 |
valorant | Valorant |
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
| Key | Meaning | Games / periods |
|---|---|---|
h2h | Two-way match or map result | All four games; full match or map1 through map5 |
h2h_3_way | BO2 result including the 1-1 Draw, separate from two-way result | All four games where offered; full match |
maps_handicap | Map-count handicap | All four games; full match |
maps_total | Total maps | All four games; full match |
rounds_handicap | Round handicap | CS2 and Valorant; per map |
rounds_total | Total rounds | CS2 and Valorant; per map |
kills_handicap | Team kill handicap | League of Legends and Dota 2; per map |
kills_total | Total kills | League 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.