Historical odds

Every bookmaker price change the UK & Ireland raw feed has served, kept since 17 October 2026. Ask for the board as it stood at any past instant, one event's price history or a day's closing lines, or download a whole day of one sport as a file. Built for backtesting models, closing-line studies and research.

GET/v2/historical/odds/rawregion uk1,000 tokens a page

Five calls on one key

Three answer in JSON, a page at a time. Two list the day files and fetch one.

GET /v2/historical/odds/raw
The raw board as it stood at the instant you name, a page of events at a time, with the times of the board before and after it.
GET /v2/historical/events/{id}/odds
One event over a window of up to a day: its prices at the start, then a row for each outcome every time its price moved.
GET /v2/historical/closing
The events that kicked off on one UTC day. Per outcome, the first price recorded that day and the closing price, the high and low before kick-off, and how many times it moved.
GET /v2/historical/files
The day files you can download, each with its size and price.
GET /v2/historical/files/{tier}/{sport}/{file}
One day of one sport, as gzipped CSV.
# Football as it stood at 19:40 UTC on 17 October 2026, priced first (a quote is free)
curl --compressed -s -H "x-api-key: $ODDSRELAY_KEY" \
  "https://api.oddsrelay.io/v2/historical/odds/raw?region=uk&sports=soccer&date=2026-10-17T19:40:00Z&quote=true"

A whole day in one file

Files come per sport and per UTC day, as gzipped CSV, in three tiers cut each night. Ask us for a finer cut.

TierWhat a file holds
closingThe closing call's rows for every event that kicked off that day, in one file.
60sThe prices that moved in each minute of the day, as they stood at the minute's end.
changesEvery price change, in order, each with the instant it was seen.

The 60s and changes files open with every price on the board at midnight UTC, so one day stands on its own.

Paid from your plan's tokens

History spends the same pool as the live feed. Each page of a JSON reply has a price, and a file is priced per started megabyte (1,000,000 bytes) of its size. Pricing publishes the rates.

Add quote=true to any call that has a price and it returns the price instead, for free. Listing the files, 304 replies, replies with nothing in them and refusals cost nothing too.

Bookmakers only, up to yesterday

Historical odds carry bookmaker prices. Exchange prices are not part of them, and a call that asks for an exchange is refused with exchange_history_unavailable.

The archive starts on 17 October 2026 and runs to the end of the previous UTC day. Each day is added overnight, once it has ended.

Questions

  • Is it the same API as the live feed?

    The same base URL, https://api.oddsrelay.io, on any key that includes Historical odds: every self-serve key that holds the whole feed has it. The board call returns the same event objects as /v2/odds/raw, with competition_key always null.

  • Can I show it to my own users?

    Only on an Enterprise contract. On a self-serve plan, history is for your own use: your models, your research, your team. Enterprise also covers publishing it, reselling it and pulls bigger than a plan's pool.

  • What if the recording has a gap?

    The reply says so. A past board inside a gap carries complete: false, and an event's history lists the gaps in its window. Nothing is invented to fill one.

Get an API key

Historical odds come with every self-serve plan.