curl --request GET \
--url https://therundown.io/api/v2/events/{eventID}/markets/history \
--header 'X-TheRundown-Key: <api-key>'import requests
url = "https://therundown.io/api/v2/events/{eventID}/markets/history"
headers = {"X-TheRundown-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-TheRundown-Key': '<api-key>'}};
fetch('https://therundown.io/api/v2/events/{eventID}/markets/history', 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://therundown.io/api/v2/events/{eventID}/markets/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-TheRundown-Key: <api-key>"
],
]);
$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://therundown.io/api/v2/events/{eventID}/markets/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-TheRundown-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://therundown.io/api/v2/events/{eventID}/markets/history")
.header("X-TheRundown-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://therundown.io/api/v2/events/{eventID}/markets/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-TheRundown-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"meta": {
"event_id": "09bfa53f8484a63e584398545c035932",
"count": 2
},
"history": [
{
"id": 500002,
"market_line_price_id": 192868821,
"event_id": "09bfa53f8484a63e584398545c035932",
"sport_id": 4,
"affiliate_id": 19,
"market_participant_id": 45001,
"market_id": 1,
"line": "",
"price": "-110",
"previous_price": "-105",
"change_type": "price",
"updated_at": "2026-02-11T09:30:00Z",
"is_main_line": true
},
{
"id": 500001,
"market_line_price_id": 192868821,
"event_id": "09bfa53f8484a63e584398545c035932",
"sport_id": 4,
"affiliate_id": 19,
"market_participant_id": 45001,
"market_id": 1,
"line": "",
"price": "-105",
"change_type": "open",
"updated_at": "2026-02-10T14:00:00Z",
"is_main_line": true
}
]
}Get market price history for an event
Returns recorded price changes for the requested markets and sportsbooks, subject to your plan’s historical-data access. Data can be available before, during, or after an event as prices are recorded. Each response is bounded by the requested limit.
curl --request GET \
--url https://therundown.io/api/v2/events/{eventID}/markets/history \
--header 'X-TheRundown-Key: <api-key>'import requests
url = "https://therundown.io/api/v2/events/{eventID}/markets/history"
headers = {"X-TheRundown-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-TheRundown-Key': '<api-key>'}};
fetch('https://therundown.io/api/v2/events/{eventID}/markets/history', 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://therundown.io/api/v2/events/{eventID}/markets/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-TheRundown-Key: <api-key>"
],
]);
$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://therundown.io/api/v2/events/{eventID}/markets/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-TheRundown-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://therundown.io/api/v2/events/{eventID}/markets/history")
.header("X-TheRundown-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://therundown.io/api/v2/events/{eventID}/markets/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-TheRundown-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"meta": {
"event_id": "09bfa53f8484a63e584398545c035932",
"count": 2
},
"history": [
{
"id": 500002,
"market_line_price_id": 192868821,
"event_id": "09bfa53f8484a63e584398545c035932",
"sport_id": 4,
"affiliate_id": 19,
"market_participant_id": 45001,
"market_id": 1,
"line": "",
"price": "-110",
"previous_price": "-105",
"change_type": "price",
"updated_at": "2026-02-11T09:30:00Z",
"is_main_line": true
},
{
"id": 500001,
"market_line_price_id": 192868821,
"event_id": "09bfa53f8484a63e584398545c035932",
"sport_id": 4,
"affiliate_id": 19,
"market_participant_id": 45001,
"market_id": 1,
"line": "",
"price": "-105",
"change_type": "open",
"updated_at": "2026-02-10T14:00:00Z",
"is_main_line": true
}
]
}Authorizations
Recommended API key request header for new integrations
Path Parameters
Canonical V2 event ID from the event_id field returned by event endpoints
Query Parameters
Comma-separated market IDs to filter. Defaults to 1,2,3; maximum 12.
Comma-separated sportsbook/affiliate IDs to filter. Common values include DraftKings (19), FanDuel (23), BetMGM (22), BookMaker (7), BetCRIS (9), Pinnacle (3), Polymarket US (31), Circa Sports (32), Bet105 (33), and Heritage Sports (34). Availability varies by sport and market.
On V2 event endpoints (/api/v2/sports/{sportID}/events/{date}, /api/v2/events/{eventID}, and their openers/closing siblings), affiliate_ids=0 is a scores-only sentinel: the response keeps events, scores, and status and omits markets and price objects. Other endpoints that share this parameter treat affiliate_ids as a sportsbook filter only.
Inclusive start time (RFC3339)
Inclusive end time (RFC3339)
Maximum total rows across all requested markets and sportsbooks. Invalid or out-of-range values use 1000.
x <= 5000When true, return only history rows (or chart points) that were the sportsbook's main line when written — is_main_line = true on history rows, m = true on chart points. Sorted by time, each change of the line value for a participant is a main-line move at that timestamp.
true, false