curl --request GET \
--url https://therundown.io/api/v2/sports/{sportID}/futures/{eventID} \
--header 'X-TheRundown-Key: <api-key>'import requests
url = "https://therundown.io/api/v2/sports/{sportID}/futures/{eventID}"
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/sports/{sportID}/futures/{eventID}', 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/sports/{sportID}/futures/{eventID}",
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/sports/{sportID}/futures/{eventID}"
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/sports/{sportID}/futures/{eventID}")
.header("X-TheRundown-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://therundown.io/api/v2/sports/{sportID}/futures/{eventID}")
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": "1595215769"
},
"events": [
{
"event_id": "a3d1f9f94f220a45cfd944181569cc46",
"sport_id": 2,
"event_date": "2026-09-10T00:00:00Z",
"settle_by": "2027-02-21T00:00:00Z",
"event_status": "STATUS_SCHEDULED",
"settlement": {},
"schedule": {
"event_name": "NFL Super Bowl Winner (2026 Season)",
"season_year": 2026
},
"markets": [
{
"id": 4967891,
"market_id": 1141,
"period_id": 0,
"name": "tournament_winner",
"market_description": "Tournament Winner",
"participants": [
{
"id": 61,
"type": "TYPE_TEAM",
"name": "Buffalo Bills",
"lines": [
{
"id": "8155509548895b87157633c87df81b3e",
"prices": {
"22": {
"id": "665502535",
"price": 1000,
"is_main_line": true,
"updated_at": "2026-07-29T17:01:46Z"
}
}
}
]
}
]
}
],
"progress": {
"kind": "league_standings",
"as_of": "2026-08-07T09:05:00Z",
"phase": {
"status": "STATUS_SCHEDULED",
"label": "Week 1",
"unit": "week",
"current": null,
"total": null
},
"context": {},
"entries": [
{
"participant_id": 61,
"name": "Buffalo Bills",
"rank": 1,
"wins": 0,
"losses": 0,
"ties": 0,
"win_pct": 0,
"points": 0,
"conference": "AFC",
"division": "AFC East"
},
{
"participant_id": 63,
"name": "New England Patriots",
"rank": 2,
"wins": 0,
"losses": 0,
"ties": 0,
"win_pct": 0,
"points": 0,
"conference": "AFC",
"division": "AFC East"
}
]
},
"leaders": [
{
"stat": "Total Yards",
"stat_id": 1120,
"season_year": 2025,
"entries": [
{
"participant_id": 61,
"name": "Buffalo Bills",
"value": 6432,
"rank": 1
},
{
"participant_id": 63,
"name": "New England Patriots",
"value": 5211,
"rank": 2
}
]
}
],
"player_leaders": [
{
"stat": "Passing Yards",
"stat_id": 1101,
"season_year": 2025,
"entries": [
{
"participant_id": 15847,
"name": "Josh Allen",
"value": 4306,
"rank": 1
}
]
}
]
}
]
}{
"error": "<string>"
}{
"error": "Futures markets require Ultra plan or higher",
"upgrade_url": "/pricing/api"
}Get one futures competition, with progress and leaders
Returns one futures/outright competition event — the same envelope and event object shape as GET /api/v2/sports/{sportID}/futures (meta.delta_last_id, events with a single event carrying event_id, sport_id, event_date, settle_by, event_status, settlement, schedule, markets) — plus up to three optional detail-only keys not served on the listing. Early access — requires an Ultra plan or higher.
progress — the competition’s live non-odds state (a golf leaderboard, a team-sport standings table), refreshed on its own cycle independent of the odds board. entries[].participant_id is the same participant ID space markets[].participants[].id uses, so a progress row joins directly to a price. Omitted entirely (never null) when no progress document exists yet for the competition — “priced, no odds-board progress” is the normal state for a fresh team-championship board, not a degraded response. See Competition Stats (Progress) for the full field-by-field breakdown of both kinds live today.
leaders / player_leaders — optional curated season-stats leaderboards, team-grain and player-grain respectively, for a hand-verified set of sports. Both reuse the same {stat, stat_id, season_year, entries[]} shape and are omitted entirely (never an empty array) when the sport is not curated or no stat rows exist yet — see Competition Stats (Progress) for the curated sport list and the two distinct entry ID spaces.
Settled competitions are always served here. Unlike the listing (which hides settled markets and terminal events unless include_settled=true), this is a deep link to a specific competition you already hold the ID for, and it keeps working after settlement, with the graded results visible in settlement. There is no include_settled parameter on this endpoint.
curl --request GET \
--url https://therundown.io/api/v2/sports/{sportID}/futures/{eventID} \
--header 'X-TheRundown-Key: <api-key>'import requests
url = "https://therundown.io/api/v2/sports/{sportID}/futures/{eventID}"
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/sports/{sportID}/futures/{eventID}', 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/sports/{sportID}/futures/{eventID}",
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/sports/{sportID}/futures/{eventID}"
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/sports/{sportID}/futures/{eventID}")
.header("X-TheRundown-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://therundown.io/api/v2/sports/{sportID}/futures/{eventID}")
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": "1595215769"
},
"events": [
{
"event_id": "a3d1f9f94f220a45cfd944181569cc46",
"sport_id": 2,
"event_date": "2026-09-10T00:00:00Z",
"settle_by": "2027-02-21T00:00:00Z",
"event_status": "STATUS_SCHEDULED",
"settlement": {},
"schedule": {
"event_name": "NFL Super Bowl Winner (2026 Season)",
"season_year": 2026
},
"markets": [
{
"id": 4967891,
"market_id": 1141,
"period_id": 0,
"name": "tournament_winner",
"market_description": "Tournament Winner",
"participants": [
{
"id": 61,
"type": "TYPE_TEAM",
"name": "Buffalo Bills",
"lines": [
{
"id": "8155509548895b87157633c87df81b3e",
"prices": {
"22": {
"id": "665502535",
"price": 1000,
"is_main_line": true,
"updated_at": "2026-07-29T17:01:46Z"
}
}
}
]
}
]
}
],
"progress": {
"kind": "league_standings",
"as_of": "2026-08-07T09:05:00Z",
"phase": {
"status": "STATUS_SCHEDULED",
"label": "Week 1",
"unit": "week",
"current": null,
"total": null
},
"context": {},
"entries": [
{
"participant_id": 61,
"name": "Buffalo Bills",
"rank": 1,
"wins": 0,
"losses": 0,
"ties": 0,
"win_pct": 0,
"points": 0,
"conference": "AFC",
"division": "AFC East"
},
{
"participant_id": 63,
"name": "New England Patriots",
"rank": 2,
"wins": 0,
"losses": 0,
"ties": 0,
"win_pct": 0,
"points": 0,
"conference": "AFC",
"division": "AFC East"
}
]
},
"leaders": [
{
"stat": "Total Yards",
"stat_id": 1120,
"season_year": 2025,
"entries": [
{
"participant_id": 61,
"name": "Buffalo Bills",
"value": 6432,
"rank": 1
},
{
"participant_id": 63,
"name": "New England Patriots",
"value": 5211,
"rank": 2
}
]
}
],
"player_leaders": [
{
"stat": "Passing Yards",
"stat_id": 1101,
"season_year": 2025,
"entries": [
{
"participant_id": 15847,
"name": "Josh Allen",
"value": 4306,
"rank": 1
}
]
}
]
}
]
}{
"error": "<string>"
}{
"error": "Futures markets require Ultra plan or higher",
"upgrade_url": "/pricing/api"
}Authorizations
Recommended API key request header for new integrations
Path Parameters
Sport ID. Common values: 1=NCAAF, 2=NFL, 3=MLB, 4=NBA, 5=NCAAB, 6=NHL, 7=UFC, 8=WNBA, 9=CFL, 10=MLS, 11=EPL, 16=UEFA Champions League, 33=UEFA Europa League, 38=ATP Tennis, 39=WTA Tennis, 40=PGA Tour Golf, 41=Formula 1
Canonical V2 event ID from the event_id field returned by event endpoints
Query Parameters
Comma-separated market IDs, intersected with the future-class market set. When omitted, all future-class markets are returned.
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.