League of Legends odds API
League of Legends prices in one fixture shape, from match result to individual maps. Esports is included on every plan at no extra cost.
Use lol to request League of Legends 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/lol/odds?tournament=example_cup&markets=h2h,maps_handicap,maps_total,kills_handicap,kills_total&periods=full,map1"import os, requests
r = requests.get(
"https://oddslink.app/v1/sports/lol/odds",
params={"tournament": "example_cup", "markets": "h2h,maps_handicap,maps_total,kills_handicap,kills_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": "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": []
}
]Illustrative League of Legends 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
| Market | Periods |
|---|---|
| h2h: match or map result | Full match; map1 through map5 |
| h2h_3_way: BO2 result including Draw | Full match |
| maps_handicap: map-count handicap | Full match |
| maps_total: total maps | Full match |
| kills_handicap: kills handicap | map1 through map5 |
| kills_total: total kills | map1 through map5 |
Books for League of Legends
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
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.