Skip to main content

What are closing lines?

The closing line is the final price a bookmaker offered before an event started. It is the most informative number a bookmaker publishes, because it reflects every bet taken and every adjustment made right up to kick-off. Most quantitative work starts here: you compare your model’s price, or the price you actually got, against the close. Odds-API.io stores closing odds for settled events across every bookmaker and market we cover.

Which endpoint should I use?

There are two ways to get closing lines, and picking the right one matters. If you are building a dataset, use /v3/historical/closing-lines. Pulling a season through the per-event endpoint means one request per match, which for five leagues over a season is roughly 1,900 requests. The same data comes back from the bulk endpoint in about 20.

Fetching closing lines in bulk

/v3/historical/closing-lines takes a sport, up to 10 leagues, a date range and the markets you care about, and returns every settled event in that window with its closing odds attached.

Query Parameters

markets and bookmakers are both required here. A single call can otherwise cover 100 events across 30 bookmakers and every market, which produces a response nobody wants to download.

Example

The response is an array of events, each with the same shape returned by /v3/historical/odds:
Events with no odds from your selected bookmakers still appear, with an empty bookmakers object. That is deliberate: you can tell the difference between a match we have no prices for and a match that never happened.

Paginating a full season

The span limit is 366 days, so a whole season fits in one date range. Page through it with skip:
A short page means you have reached the end. A 240-match season is three requests at limit=100.

Fetching a single event

If you already have an event ID, /v3/historical/odds returns the closing odds for that one event.

Query Parameters

Adding markets is worth doing even when you do not strictly need it. A busy football match carries hundreds of markets per bookmaker, so filtering server-side keeps responses small.

Finding events

/v3/historical/events returns settled events for one league and date range, with final scores. Use it when you want results and fixtures rather than odds.

Query Parameters

Limits

Plan access

/v3/historical/events and /v3/historical/odds are available on every plan, including the free one, so you can evaluate the data before committing. /v3/historical/closing-lines is a paid feature. Free plans calling it get a 403 explaining the alternative. You can upgrade in the dashboard.

Notes on the data

Closing odds go back to December 2025. Events before that are returned by /v3/historical/events with their scores, but carry no odds, so they come back with an empty bookmakers object. Only events with a status of settled are returned. If a match has finished but has not settled in our pipeline yet, it will not appear. The core market names are the same across sports: ML (moneyline / match winner), Totals and Spread, each with half-time variants such as ML HT and Totals HT. Beyond those, availability depends on the sport. Football adds Correct Score, Both Teams To Score, Double Chance, Half Time / Full Time and European Handicap. Basketball adds Player Props and 3-Way Result. Tennis uses Totals (Games) and Spread (Games) alongside per-set markets like ML 1st Set. Matching is case-insensitive, so ml and ML both work, but the name must match in full. There is no market called “Match Winner”, and no bare “Over/Under” or “Asian Handicap”, though longer names such as Goals Over/Under and Alternative Asian Handicap do exist. To see exactly which markets an event carries, call /v3/historical/odds for it without a markets filter.