Track how odds move. For every event and player we tracked, get per-snapshot history — consensus average, best available, and no-vig fair price per market — so you can chart line movement from when tracking begins to now.
The MoneyLine historical odds API exposes the line-movement history we capture for each event. Every time our odds refresh, we record a snapshot of the consensus across books, and the history endpoints replay those snapshots in order so you can see how a price moved over time. It is built for line-movement and consensus tracking — not as a deep multi-year archive of raw per-book closing lines.
Each snapshot summarizes the market the way the live odds API does: a cross-book consensus average, the best available price, and a no-vig fair price per outcome and point. Both game markets (moneyline, spread, total) and player props are tracked, so you can follow how a total drifted or how a prop line and price shifted ahead of kickoff — all keyed to the same canonical event and player IDs you use elsewhere.
History starts when we begin tracking a given event, not years in the past. That makes the data ideal for charting opening-to-current movement, measuring closing-line value against where a line settled, and detecting steam — but it is explicitly line-movement and consensus history, not a backfilled raw closing-line database. Frame your use cases around movement over the tracked window and the contract stays predictable.
Sign up and grab an API key from the dashboard — no credit card for the free tier.
Call /v1/odds with a league filter and read the canonical eventId from any event you care about.
Pass the key as x-api-key and call /v1/events/{eventId}/odds-history to replay that event's snapshots.
One row per refresh tick — replay how a market moved across the tracked window.
Each snapshot carries avgPrice (consensus), bestPrice (best available), and fairOdds (no-vig).
Moneyline, spread, and total plus player-prop markets are all tracked over time.
Pull movement for a whole game via eventId or for one player via playerId.
Snapshots run from when tracking began to the latest tick, so you can chart the full drift.
Same canonical IDs and price shape as the live feed — no separate schema to learn.
GET /v1/events/{eventId}/odds-history — line movement for one game
Request
curl -H "x-api-key: $ML_API_KEY" \
"https://mlapi.bet/v1/events/nfl-ev-208841/odds-history"Response
{
"success": true,
"data": {
"eventId": "nfl-ev-208841",
"snapshots": [
{
"snapshotAt": "2026-06-01T14:00:00Z",
"markets": [
{ "marketType": "total", "outcome": "Over", "point": 47.5, "avgPrice": -108, "bestPrice": -102, "fairOdds": -104 },
{ "marketType": "total", "outcome": "Under", "point": 47.5, "avgPrice": -112, "bestPrice": -106, "fairOdds": -108 }
]
},
{
"snapshotAt": "2026-06-01T18:00:00Z",
"markets": [
{ "marketType": "total", "outcome": "Over", "point": 48.5, "avgPrice": -110, "bestPrice": -104, "fairOdds": -106 },
{ "marketType": "total", "outcome": "Under", "point": 48.5, "avgPrice": -110, "bestPrice": -104, "fairOdds": -106 }
]
}
]
},
"meta": { "count": 2 }
}| Field | Meaning |
|---|---|
| avgPrice | Consensus average price across tracked books at that snapshot. |
| bestPrice | Best available price across tracked books at that snapshot. |
| fairOdds | No-vig fair price with the sportsbook margin removed. |
| marketType + outcome + point | The market this row describes — e.g. total, Over, 47.5. |
| snapshotAt | Timestamp of the refresh tick this snapshot was captured on. |
Plot how a market drifted across snapshots to power a movement chart or timeline.
Compare an earlier snapshot to the latest tick to estimate value against where the line settled.
Train and validate models on how consensus and fair odds moved over the tracked window.
Flag sharp jumps between snapshots in consensus or best price to spot steam moves.
Follow how a player-prop line and price shifted ahead of game time via playerId history.
A historical odds API returns how betting odds moved over time. MoneyLine's version replays per-snapshot line-movement history — the consensus average, best available, and no-vig fair price per market — for each event and player we track, so you can chart movement rather than pull a single live price.
No. This is line-movement and consensus history, not a years-deep raw archive of per-book closing lines. History starts when we begin tracking a given event and runs to the latest refresh tick.
A timestamp (snapshotAt) and a markets array, where each entry carries marketType, outcome, point, plus avgPrice (consensus), bestPrice (best available), and fairOdds (no-vig fair).
Yes. Both game markets — moneyline, spread, total — and player-prop markets are tracked over time and returned in the same snapshot shape.
Use /v1/events/{eventId}/odds-history for a whole game and /v1/players/{playerId}/odds-history for a single player's prop movement.
As far back as when tracking began for that event — typically once odds first appear ahead of the game — not an arbitrary multi-season backfill.
Fair odds remove the sportsbook margin (vig) from a market so each snapshot reflects the true implied probability of an outcome, not the book's built-in edge.
Yes — the free tier covers both personal and commercial use with every endpoint included. Paid plans add throughput, not features.
Free
$0/mo
1K credits/mo
Starter
$29/mo
150K credits/mo
Pro
$149/mo
1.5M credits/mo
Business
$299/mo
5M credits/mo
Enterprise
Custom
Unlimited credits/mo
Free tier to start, one API key, normalized responses across every league and sportsbook.