curl --request GET \
--url https://therundown.io/api/v2/markets/delta \
--header 'X-TheRundown-Key: <api-key>'import requests
url = "https://therundown.io/api/v2/markets/delta"
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/markets/delta', 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/markets/delta",
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/markets/delta"
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/markets/delta")
.header("X-TheRundown-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://therundown.io/api/v2/markets/delta")
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": {
"delta_last_id": "193500000",
"count": 2,
"has_more": false
},
"deltas": [
{
"id": 193499998,
"event_id": "09bfa53f8484a63e584398545c035932",
"sport_id": 4,
"affiliate_id": 19,
"market_id": 1,
"market_name": "moneyline",
"participant_id": 11,
"participant_type": "TYPE_TEAM",
"participant_name": "Atlanta Hawks",
"line": "",
"price": "-112",
"previous_price": "-110",
"change_type": "price",
"updated_at": "2026-02-12T00:10:43Z",
"is_main_line": true
},
{
"id": 193499999,
"event_id": "09bfa53f8484a63e584398545c035932",
"sport_id": 4,
"affiliate_id": 19,
"market_id": 3,
"market_name": "totals",
"participant_id": 1001,
"participant_type": "TYPE_RESULT",
"participant_name": "Over",
"line": "235.5",
"price": "-110",
"previous_price": "-108",
"change_type": "price",
"updated_at": "2026-02-12T00:10:43Z",
"is_main_line": true
}
]
}Get market price changes since a given ID
Returns market line price changes (new, updated, closed) since the specified last_id. Use for efficient polling.
Bootstrap flow: On known zero-delay access, call GET /api/v2/sports/{sportID}/events/{date} with the snapshot scope you need. Use its positive whole-integer meta.delta_last_id only when that response explicitly reports X-Data-Delay-Seconds: 0, then pass it as last_id. If the header is positive, absent, or invalid, keep using scoped snapshots; do not substitute 0.
Staleness guard: Cursors older than 30 minutes are rejected with HTTP 400. After a cursor error, take at most one fresh scoped snapshot and resume only when it meets the same zero-delay and valid-cursor conditions. Do not loop bootstrap requests.
Core live markets: Event snapshots expand market_ids=1,2,3 to include in-play IDs. This delta endpoint filters IDs literally, so poll 1,2,3,41,42,43 to receive full-game core updates before and during play. Returned rows retain their actual market IDs.
curl --request GET \
--url https://therundown.io/api/v2/markets/delta \
--header 'X-TheRundown-Key: <api-key>'import requests
url = "https://therundown.io/api/v2/markets/delta"
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/markets/delta', 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/markets/delta",
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/markets/delta"
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/markets/delta")
.header("X-TheRundown-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://therundown.io/api/v2/markets/delta")
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": {
"delta_last_id": "193500000",
"count": 2,
"has_more": false
},
"deltas": [
{
"id": 193499998,
"event_id": "09bfa53f8484a63e584398545c035932",
"sport_id": 4,
"affiliate_id": 19,
"market_id": 1,
"market_name": "moneyline",
"participant_id": 11,
"participant_type": "TYPE_TEAM",
"participant_name": "Atlanta Hawks",
"line": "",
"price": "-112",
"previous_price": "-110",
"change_type": "price",
"updated_at": "2026-02-12T00:10:43Z",
"is_main_line": true
},
{
"id": 193499999,
"event_id": "09bfa53f8484a63e584398545c035932",
"sport_id": 4,
"affiliate_id": 19,
"market_id": 3,
"market_name": "totals",
"participant_id": 1001,
"participant_type": "TYPE_RESULT",
"participant_name": "Over",
"line": "235.5",
"price": "-110",
"previous_price": "-108",
"change_type": "price",
"updated_at": "2026-02-12T00:10:43Z",
"is_main_line": true
}
]
}Authorizations
Recommended API key request header for new integrations
Query Parameters
Return changes with ID greater than this value. On known zero-delay access, obtain a positive whole-integer initial cursor from meta.delta_last_id in a scoped v2 events snapshot that explicitly reports X-Data-Delay-Seconds: 0. Cursors older than 30 minutes are rejected; do not use 0 as a fallback.
x >= 1Filter by sport ID
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.
Literal comma-separated market-ID filter. To poll full-game core updates before and during play, include 1,2,3,41,42,43; event snapshots expand 1,2,3 to include the in-play IDs.
Filter by event ID
x <= 5000