Historical Odds for Backtesting and Models
Closing lines from the bookmakers you pick, with the final score attached. Pull a whole league season in a handful of requests, or one event at a time, from the same API key you use for live odds.
Last updated
- Closing odds since
- Dec 2025
- Per bulk request
- 366 days
- Bookmakers per request
- 30
- Leagues per request
- 10
A Month of Closing Lines in One Request
/v3/historical/closing-lines returns every settled event in the window with its closing odds and final score. Events with no odds from your bookmakers still appear, with an empty bookmakers object, so a missing price never looks like a missing match.
curl "https://api.odds-api.io/v3/historical/closing-lines?apiKey=YOUR_API_KEY\
&sport=football&leagues=england-premier-league,spain-la-liga\
&from=2026-01-01T00:00:00Z&to=2026-01-31T23:59:59Z\
&markets=ML&bookmakers=Bet365,Unibet&limit=100"[
{
"id": 123456,
"home": "Arsenal",
"away": "Chelsea",
"date": "2026-01-14T20:00:00Z",
"status": "settled",
"league": { "name": "England - Premier League", "slug": "england-premier-league" },
"scores": { "home": 2, "away": 1 },
"bookmakers": {
"Bet365": [
{
"name": "ML",
"updatedAt": "2026-01-14T19:58:12Z",
"odds": [{ "home": "2.10", "draw": "3.40", "away": "3.60" }]
}
]
}
}
]Historical Endpoints
Four historical endpoints and one for line movement. The API reference has every parameter.
- GET
/v3/ historical/ closing-lines - Closing odds for many events at once: up to 10 leagues, 366 days, 30 bookmakers and the markets you name.Paid plans
- GET
/v3/ historical/ odds - Closing odds and the final score for one finished event, for up to 30 bookmakers.Every plan
- GET
/v3/ historical/ events - Settled fixtures and final scores for one league over up to 31 days.Every plan
- GET
/v3/ historical/ events/ search - Settled events by team name across all leagues, newest first.Every plan
- GET
/v3/ odds/ movements - Pre-match line movement for one market: the opening price, the latest price and the changes in between.Every plan
Download a Season in Three Steps
- 1
Pick the leagues and dates
Choose a sport, up to 10 league slugs and a date range of up to 366 days, so a whole season fits in one sweep.
- 2
Name the markets and bookmakers
markets and bookmakers are required on the bulk endpoint, up to 30 bookmakers. Any name from /v3/bookmakers works, and odds come back under that same name.
- 3
Page through the season
Each response holds up to 100 settled events. Add skip until a page comes back short. A 240-match season is three requests.
What Developers Build With It
Backtest a betting model
Run a model over a past season and compare its prices with what each bookmaker closed at, with the final score in the same response.
Measure closing line value
Compare the price you took with the close. The movement history gives you the opening price too, so you can see how far the line travelled.
Build a training dataset
Pull closing odds for five leagues over a season in about 20 requests instead of roughly 1,900 one-per-match calls, as JSON you can load straight into a dataframe.
Data Depth and Limits
The event lists and bulk closing lines return settled events only. Market names match the ones /v3/odds serves, so historical and live data join on the same keys.
- Closing odds history
- Since December 2025
- Date span, bulk closing lines
- 366 days
- Date span, events and search
- 31 days
- Leagues per bulk request
- 10
- Bookmakers per request
- 30
- Events per bulk response
- 100, page with skip
- Format
- JSON over REST
Historical Odds API FAQ
How far back does the historical odds data go?
Closing odds go back to December 2025. Older fixtures and final scores are still available from /v3/historical/events, but the odds endpoints return those events with an empty bookmakers object.
Which endpoint should I use for a whole season?
/v3/historical/closing-lines. It takes up to 10 leagues and 366 days per request and returns up to 100 settled events per page. Pulling five leagues for a season one event at a time is roughly 1,900 requests; the bulk endpoint returns the same data in about 20.
Is historical odds data included in my plan?
/v3/historical/events, /v3/historical/events/search and /v3/historical/odds are available on every plan. /v3/historical/closing-lines needs a paid plan. New free keys are paused, so Solo at £49/month is the cheapest way to start.
Which markets and bookmakers are covered?
Closing odds are stored for settled events across every bookmaker and market we cover. Market names depend on the sport: most use ML, Totals and Spread, tennis uses Totals (Games) and Spread (Games), and baseball names its first five innings in full. Call /v3/markets?sport=<sport> for the exact names, and /v3/historical/odds without a markets filter to see everything one event carries.
Do you have line movements, or only closing odds?
/v3/odds/movements returns the opening price, the latest price and the changes in between for one market line. History is pre-match only and is recorded for a fixed list of bookmakers, which the docs list in full. It is available on every plan.
Are unsettled or cancelled matches included?
/v3/historical/events, /v3/historical/events/search and /v3/historical/closing-lines list settled events only, so a finished match that has not settled in our pipeline yet does not appear there. /v3/historical/odds returns the event status, so check it. For an explicit answer on every event, including cancelled ones, use the bet settlement API.
Start Your Backtest
Historical data comes with the same key as live odds from 450+ bookmakers. Plans from £49/month.