Valorant odds API
Valorant prices in one fixture shape, from match result to individual maps. Esports is included on every plan at no extra cost.
Use valorant to request Valorant 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/valorant/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/valorant/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": "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": []
}
]Illustrative Valorant 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 rounds
Select map1 through map5 separately from rounds_handicap and rounds_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 |
| rounds_handicap: rounds handicap | map1 through map5 |
| rounds_total: total rounds | map1 through map5 |
Books for Valorant
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.