Historical
Get Historical Events
Returns finished events for a given sport and league within a date range. Maximum date span is 31 days. Historical data is available from December 2025 onwards.
GET
/
historical
/
events
Get Historical Events
curl --request GET \
--url https://api.odds-api.io/v3/historical/eventsimport requests
url = "https://api.odds-api.io/v3/historical/events"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.odds-api.io/v3/historical/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.odds-api.io/v3/historical/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.odds-api.io/v3/historical/events"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.odds-api.io/v3/historical/events")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.odds-api.io/v3/historical/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body[
{
"away": "<string>",
"awayId": 123,
"bookmakerCount": 123,
"date": "<string>",
"home": "<string>",
"homeId": 123,
"id": 123,
"league": {
"name": "<string>",
"slug": "<string>"
},
"scores": {
"away": 123,
"home": 123,
"periods": {}
},
"sport": {
"name": "<string>",
"slug": "<string>"
},
"status": "<string>",
"clock": {
"minute": 67,
"playedSeconds": 4023,
"period": 2,
"running": true,
"statusDetail": "2nd half",
"injuryTime": 4
}
}
]{
"error": "Error message"
}{
"error": "Error message"
}{
"error": "Error message"
}{
"error": "Error message"
}Query Parameters
API key for authentication
Sport slug (e.g. football, basketball)
League slug (e.g. england-premier-league)
Start date in RFC3339 format
End date in RFC3339 format
Response
OK
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Live match clock (live events only; absent when no clock data is available)
Show child attributes
Show child attributes
⌘I
Get Historical Events
curl --request GET \
--url https://api.odds-api.io/v3/historical/eventsimport requests
url = "https://api.odds-api.io/v3/historical/events"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.odds-api.io/v3/historical/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.odds-api.io/v3/historical/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.odds-api.io/v3/historical/events"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.odds-api.io/v3/historical/events")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.odds-api.io/v3/historical/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body[
{
"away": "<string>",
"awayId": 123,
"bookmakerCount": 123,
"date": "<string>",
"home": "<string>",
"homeId": 123,
"id": 123,
"league": {
"name": "<string>",
"slug": "<string>"
},
"scores": {
"away": 123,
"home": 123,
"periods": {}
},
"sport": {
"name": "<string>",
"slug": "<string>"
},
"status": "<string>",
"clock": {
"minute": 67,
"playedSeconds": 4023,
"period": 2,
"running": true,
"statusDetail": "2nd half",
"injuryTime": 4
}
}
]{
"error": "Error message"
}{
"error": "Error message"
}{
"error": "Error message"
}{
"error": "Error message"
}