The Odds API Historical API
Historical odds and event snapshots.
Documentation
Documentation
https://the-odds-api.com/liveapi/guides/v4/
GettingStarted
https://the-odds-api.com/liveapi/guides/v4/
Historical odds and event snapshots.
openapi: 3.0.3
info:
title: The Odds Events Historical API
description: The Odds API provides sports betting odds from major bookmakers worldwide. Access current and historical odds for head-to-head, spreads, totals, and outrights markets across 100+ sports. Also provides live scores and event listings. Requires an API key for all requests. Quota is consumed per request based on number of regions and markets requested.
version: 4.0.0
contact:
url: https://the-odds-api.com/
termsOfService: https://the-odds-api.com/terms
servers:
- url: https://api.the-odds-api.com
description: Primary API server
- url: https://ipv6-api.the-odds-api.com
description: IPv6 API server
security:
- apiKey: []
tags:
- name: Historical
description: Historical odds and event snapshots.
paths:
/v4/historical/sports/{sport}/odds:
get:
operationId: getHistoricalOdds
summary: Get Historical Sport Odds
description: 'Returns a snapshot of odds at a specific historical timestamp. Available from June 6, 2020 onwards at 10-minute intervals (5-minute from Sept 2022). Quota: 10 credits per region per market.'
tags:
- Historical
parameters:
- name: sport
in: path
required: true
description: Sport key from /v4/sports.
schema:
type: string
- name: apiKey
in: query
required: true
description: Your API key.
schema:
type: string
- name: date
in: query
required: true
description: ISO 8601 timestamp for the historical snapshot (e.g., 2023-09-16T12:00:00Z).
schema:
type: string
format: date-time
- name: regions
in: query
required: true
description: Comma-separated regions for bookmakers.
schema:
type: string
- name: markets
in: query
required: false
description: Comma-separated betting markets.
schema:
type: string
- name: oddsFormat
in: query
required: false
description: 'Odds format: decimal or american.'
schema:
type: string
enum:
- decimal
- american
- name: bookmakers
in: query
required: false
description: Comma-separated bookmaker IDs.
schema:
type: string
- name: eventIds
in: query
required: false
description: Comma-separated event IDs to filter.
schema:
type: string
responses:
'200':
description: Historical odds snapshot with navigation timestamps.
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalOddsResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
/v4/historical/sports/{sport}/events:
get:
operationId: getHistoricalEvents
summary: Get Historical Sport Events
description: 'Returns event data from a specific historical timestamp. Quota: 1 credit (free if no results returned).'
tags:
- Historical
parameters:
- name: sport
in: path
required: true
description: Sport key from /v4/sports.
schema:
type: string
- name: apiKey
in: query
required: true
description: Your API key.
schema:
type: string
- name: date
in: query
required: true
description: ISO 8601 timestamp for the historical query.
schema:
type: string
format: date-time
- name: eventIds
in: query
required: false
description: Comma-separated event IDs to filter.
schema:
type: string
- name: commenceTimeFrom
in: query
required: false
description: Filter to events commencing after this datetime.
schema:
type: string
format: date-time
- name: commenceTimeTo
in: query
required: false
description: Filter to events commencing before this datetime.
schema:
type: string
format: date-time
responses:
'200':
description: Historical event list with navigation timestamps.
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalEventsResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
/v4/historical/sports/{sport}/events/{eventId}/odds:
get:
operationId: getHistoricalEventOdds
summary: Get Historical Event Odds
description: 'Returns odds for a specific event at a historical snapshot timestamp. Useful for backtesting, line-movement analysis, and reconstructing the full market state of a single event. Quota: 1 credit per unique market per region.'
tags:
- Historical
parameters:
- name: sport
in: path
required: true
description: Sport key from /v4/sports.
schema:
type: string
- name: eventId
in: path
required: true
description: Event ID for the historical snapshot.
schema:
type: string
- name: apiKey
in: query
required: true
description: Your API key.
schema:
type: string
- name: date
in: query
required: true
description: ISO 8601 timestamp for the historical snapshot.
schema:
type: string
format: date-time
- name: regions
in: query
required: true
description: Comma-separated regions for bookmakers.
schema:
type: string
- name: markets
in: query
required: false
description: Comma-separated betting markets (all market types accepted).
schema:
type: string
- name: oddsFormat
in: query
required: false
description: 'Odds format: decimal or american.'
schema:
type: string
enum:
- decimal
- american
- name: dateFormat
in: query
required: false
description: 'Date format: iso or unix.'
schema:
type: string
enum:
- iso
- unix
responses:
'200':
description: Historical event odds snapshot with timestamp navigation.
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalEventOddsResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
components:
responses:
RateLimited:
description: Too many requests — quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Unauthorized — invalid or missing API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Not found — the requested event does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
HistoricalOddsResponse:
type: object
description: Historical odds snapshot with timestamp navigation.
properties:
timestamp:
type: string
format: date-time
description: Actual timestamp of this snapshot.
previous_timestamp:
type: string
format: date-time
description: Timestamp of the previous available snapshot.
next_timestamp:
type: string
format: date-time
description: Timestamp of the next available snapshot.
data:
type: array
items:
$ref: '#/components/schemas/Event'
description: Events with odds as of the snapshot timestamp.
Market:
type: object
description: A betting market with outcomes from a bookmaker.
properties:
key:
type: string
description: Market key (e.g., h2h, spreads, totals, outrights).
last_update:
type: string
format: date-time
description: When the market was last updated.
outcomes:
type: array
items:
$ref: '#/components/schemas/Outcome'
description: Available betting outcomes.
HistoricalEventOddsResponse:
type: object
description: Historical odds snapshot for a single event with timestamp navigation.
properties:
timestamp:
type: string
format: date-time
description: Actual timestamp of this snapshot.
previous_timestamp:
type: string
format: date-time
description: Timestamp of the previous available snapshot.
next_timestamp:
type: string
format: date-time
description: Timestamp of the next available snapshot.
data:
$ref: '#/components/schemas/Event'
Event:
type: object
description: A sporting event with odds from bookmakers.
properties:
id:
type: string
description: Unique event identifier.
sport_key:
type: string
description: Sport key for the event.
sport_title:
type: string
description: Human-readable sport title.
commence_time:
type: string
format: date-time
description: Scheduled start time of the event.
home_team:
type: string
description: Home team name.
away_team:
type: string
description: Away team name.
bookmakers:
type: array
items:
$ref: '#/components/schemas/Bookmaker'
description: List of bookmakers providing odds.
HistoricalEventsResponse:
type: object
description: Historical events with timestamp navigation.
properties:
timestamp:
type: string
format: date-time
description: Snapshot timestamp.
previous_timestamp:
type: string
format: date-time
description: Previous available snapshot timestamp.
next_timestamp:
type: string
format: date-time
description: Next available snapshot timestamp.
data:
type: array
items:
$ref: '#/components/schemas/EventMeta'
description: Events as of the snapshot timestamp.
Outcome:
type: object
description: A betting outcome (team/player) with price.
properties:
name:
type: string
description: Name of the team or player.
description:
type: string
description: Additional description (e.g., Over, Under for totals).
price:
type: number
description: Odds price in the requested format.
point:
type: number
description: Point spread or total line value (for spreads and totals markets).
EventMeta:
type: object
description: Event metadata without odds.
properties:
id:
type: string
description: Unique event identifier.
sport_key:
type: string
description: Sport key.
sport_title:
type: string
description: Sport title.
commence_time:
type: string
format: date-time
description: Event start time.
home_team:
type: string
description: Home team name.
away_team:
type: string
description: Away team name.
Error:
type: object
properties:
message:
type: string
description: Error description.
Bookmaker:
type: object
description: A bookmaker providing odds for an event.
properties:
key:
type: string
description: Unique bookmaker identifier (e.g., draftkings, fanduel, betmgm).
title:
type: string
description: Human-readable bookmaker name.
last_update:
type: string
format: date-time
description: When this bookmaker's odds were last updated.
markets:
type: array
items:
$ref: '#/components/schemas/Market'
description: Betting markets offered by this bookmaker.
securitySchemes:
apiKey:
type: apiKey
name: apiKey
in: query