TheRundown developer API

Historical odds API for line movement and closing lines

Pull the recorded history of a sportsbook line: every open, price change, close and reopen, each with a timestamp, for 25+ books in one JSON schema. Chart a market’s line movement, read opening and closing lines for a sport and date, and measure closing line value, with the same event, market and participant IDs as live odds.

Free: delayed pre-match main lines from three books. No credit card. Real-time REST and WebSocket require Ultra or above.

What the historical odds API returns

History is recorded per sportsbook, market, participant and line. Each change keeps its timestamp and its type, so you can see when a line opened, every move after that, when it closed and whether it reopened. Each point also says whether that line was the main line at the time, so you can follow the main spread as it moves from number to number.

In-play prices are recorded too. On the full history route, request the in-play market IDs 41, 42, 43 and 96 alongside 1, 2 and 3: that route matches market_ids literally and does not add in-play markets on its own.

EndpointWhat it returnsUse it for
GET /events/{event_id}/markets/{market_id}/historyA chart-ready series for one market, oldest first, grouped by sportsbook: a timestamp, price, line and main-line flag on each pointA line movement chart for one game
GET /events/{event_id}/markets/historyPrice-change rows for up to 12 markets, newest first, each with a change type (open, price, close or reopen); pass 1 to 3 sportsbook IDsA full record of how a game’s markets moved
GET /events/{event_id}/openers and /closingThe opening or closing snapshot for one eventClosing line value on a single bet
GET /sports/{sport_id}/openers/{date} and /closing/{date}Opening or closing lines for every event in a sport on a dateA nightly closing-line pull for a whole slate

How far back the odds history goes

History starts on Starter, and each plan reads back a fixed window: 7 days on Starter, 30 days on Pro, 90 days on Ultra, 6 months on Super, 1 year on Mega, unlimited on Max. On opening and closing lines the window applies to the event date, floored to midnight UTC, and an older date returns 403 with the earliest date your key can read. Free has no history access.

Every plan from Starter includes line history, and Pro and above include opening and closing lines. Pick the plan by how far back your product needs to read, not only by request volume.

PlanOdds history windowMonthly price
Starter7 days$49 a month
Pro30 days$149 a month
Ultra90 days$399 a month
Super6 months$649 a month
Mega1 year$999 a month
MaxUnlimited$2,499 a month

Chart one market’s line movement in Python

This script follows one sportsbook’s main spread for one side of a game, oldest first. It finds the side’s participant_id with /markets/participants, then passes it to the single-market history route with the sportsbook ID.

Add from and to (RFC 3339 timestamps) to narrow the window. limit defaults to 1,000 points and accepts up to 5,000, and there is no paging cursor, so narrow the window if a response reaches the limit.

Python
import os

import requests

API = "https://therundown.io/api/v2"
HEADERS = {"X-TheRundown-Key": os.environ["THERUNDOWN_API_KEY"]}
EVENT = os.environ["EVENT_ID"]  # an event inside your plan's history window

# 1. The participant_id for one side of the spread market (2)
found = requests.get(f"{API}/markets/participants",
                     params={"event_id": EVENT, "market_ids": "2"},
                     headers=HEADERS, timeout=30)
found.raise_for_status()
side = found.json()["participants"][0]

# 2. DraftKings (19) main spread history for that side, oldest first
chart = requests.get(f"{API}/events/{EVENT}/markets/2/history",
                     params={"participant_id": side["participant_id"],
                             "affiliate_ids": "19", "main_line": "true"},
                     headers=HEADERS, timeout=30)
chart.raise_for_status()
print(side["participant_name"])
for point in chart.json()["series"]["19"]["data"]:
    print(point["t"], point["l"], point["p"])

Each point carries t (timestamp), p (price, as a string), l (line) and m (main-line flag), and a closed point also carries c. A chart response counts one data point per returned point.

Backtesting and licensing

Because every open, move, close and reopen is timestamped, the history is a backtest-ready record of how lines moved. Backtesting or validating a model against TheRundown data, whether machine learning, statistical or otherwise, needs our prior written permission: email [email protected] before you start.

Free and Starter are for internal or personal use. Commercial end-user display begins on Pro.

Historical odds API pricing and plan delays

History starts on Starter at $49 a month and reads back 7 days on Starter, 30 days on Pro, 90 days on Ultra, 6 months on Super, 1 year on Mega, unlimited on Max. History responses count data points against your plan’s monthly volume like live odds, and the X-Datapoints header on each response shows what it counted.

Monthly planUSD/monthOdds delayIncluded volumeUse and delivery
Free$05 minutes20,000/day · 200,000/monthThree books; delayed pre-match main lines. Internal or personal use.
Starter$4960 seconds25,000,000/moAdditional books, props, alternates and delayed in-play odds. Internal or personal use.
Pro$14930 seconds125,000,000/moCommercial end-user display and a 30-second odds delay.
Ultra$399Real-time500,000,000/moReal-time REST, WebSocket, futures and supported live game data.

Annual billing has different monthly equivalents. Monthly and annual plans stop at included data points by default; optional overage and weekly billing have separate terms. Super, Mega and Max add published volume and connection capacity; Enterprise is scoped by contract. Confirm effective API and stats access in response headers.

Historical odds API FAQ

What is a historical odds API?
A historical odds API returns how sportsbook lines and prices moved over time, not only the current price. TheRundown records every open, price change, close and reopen with a timestamp for 25+ books, and serves it as JSON alongside opening and closing lines.
How far back does the odds history go?
It depends on the plan: 7 days on Starter, 30 days on Pro, 90 days on Ultra, 6 months on Super, 1 year on Mega, unlimited on Max. Free has no history access.
Is there a free historical odds API?
No. A free key returns five-minute-delayed pre-match odds and no history. History starts on Starter, $49 a month, with a 7 days window.
Does the history include every line movement?
It includes every recorded change: the open, each price or line move, the close and any reopen, each with a timestamp and a main-line flag. In-play prices are included when you request the in-play market IDs (41, 42, 43 and 96) on the full history route.
Can I get opening and closing lines?
Yes. /sports/{sport_id}/openers/{date} and /sports/{sport_id}/closing/{date} return every event for a sport on a date, and /events/{event_id}/openers and /events/{event_id}/closing return one event. Pro and above include them, and your plan’s history window applies to the event date.
Can I backtest a betting model with historical odds?
Only with our prior written permission. Backtesting or validating a model against TheRundown data needs it, so email [email protected] before you start.
How is historical odds data billed?
In data points, like live odds. A chart response counts one data point per returned point, and the X-Datapoints header on every response shows what it counted. Filter by sportsbook, market and time window to keep responses small.

Build and compare

Choose the API scope that matches your application. Each guide below covers a different integration need.

Product and documentation sources checked October 13, 2026. Source, sport, event and market availability varies; catalog entries do not guarantee a priced line or a populated statistic.