curl --request GET \
--url https://therundown.io/api/v2/events/{eventID} \
--header 'X-TheRundown-Key: <api-key>'import requests
url = "https://therundown.io/api/v2/events/{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/events/{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/events/{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/events/{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/events/{eventID}")
.header("X-TheRundown-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://therundown.io/api/v2/events/{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": null,
"events": [
{
"event_id": "09bfa53f8484a63e584398545c035932",
"sport_id": 4,
"event_date": "2026-02-12T00:00:00Z",
"rotation_number_away": 529,
"rotation_number_home": 530,
"score": {
"event_status": "STATUS_FINAL",
"score_away": 107,
"score_home": 110,
"score_away_by_period": [
27,
22,
26,
32
],
"score_home_by_period": [
35,
23,
31,
21
],
"venue_name": "Spectrum Center",
"venue_location": "Charlotte, NC",
"broadcast": "FanDuel SN SE",
"event_status_detail": "Final"
},
"teams": [
{
"team_id": 11,
"name": "Atlanta",
"mascot": "Hawks",
"abbreviation": "ATL",
"record": "26-30",
"is_away": true,
"is_home": false
},
{
"team_id": 12,
"name": "Charlotte",
"mascot": "Hornets",
"abbreviation": "CHA",
"record": "26-29",
"is_away": false,
"is_home": true
}
],
"schedule": {
"league_name": "National Basketball Association",
"season_type": "Regular Season",
"season_year": 2026
},
"markets": [
{
"id": 2518418,
"market_id": 1,
"name": "moneyline",
"participants": [
{
"name": "Atlanta Hawks",
"type": "TYPE_TEAM",
"lines": [
{
"value": "0",
"prices": {
"19": {
"price": -105,
"is_main_line": true,
"updated_at": "2026-02-11T22:00:00Z"
}
}
}
]
}
]
},
{
"id": 2518419,
"market_id": 2,
"name": "handicap",
"participants": [
{
"name": "Atlanta Hawks",
"type": "TYPE_TEAM",
"lines": [
{
"value": "4.5",
"prices": {
"19": {
"price": -110,
"is_main_line": true,
"updated_at": "2026-02-11T22:00:00Z"
}
}
}
]
}
]
},
{
"id": 2518420,
"market_id": 3,
"name": "totals",
"participants": [
{
"name": "Over",
"type": "TYPE_RESULT",
"lines": [
{
"value": "235.5",
"prices": {
"19": {
"price": -110,
"is_main_line": true,
"updated_at": "2026-02-12T00:10:43Z"
}
}
}
]
}
]
}
]
}
]
}Get a single event with markets
main_line=true also excludes closed prices while selecting main lines.
curl --request GET \
--url https://therundown.io/api/v2/events/{eventID} \
--header 'X-TheRundown-Key: <api-key>'import requests
url = "https://therundown.io/api/v2/events/{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/events/{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/events/{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/events/{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/events/{eventID}")
.header("X-TheRundown-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://therundown.io/api/v2/events/{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": null,
"events": [
{
"event_id": "09bfa53f8484a63e584398545c035932",
"sport_id": 4,
"event_date": "2026-02-12T00:00:00Z",
"rotation_number_away": 529,
"rotation_number_home": 530,
"score": {
"event_status": "STATUS_FINAL",
"score_away": 107,
"score_home": 110,
"score_away_by_period": [
27,
22,
26,
32
],
"score_home_by_period": [
35,
23,
31,
21
],
"venue_name": "Spectrum Center",
"venue_location": "Charlotte, NC",
"broadcast": "FanDuel SN SE",
"event_status_detail": "Final"
},
"teams": [
{
"team_id": 11,
"name": "Atlanta",
"mascot": "Hawks",
"abbreviation": "ATL",
"record": "26-30",
"is_away": true,
"is_home": false
},
{
"team_id": 12,
"name": "Charlotte",
"mascot": "Hornets",
"abbreviation": "CHA",
"record": "26-29",
"is_away": false,
"is_home": true
}
],
"schedule": {
"league_name": "National Basketball Association",
"season_type": "Regular Season",
"season_year": 2026
},
"markets": [
{
"id": 2518418,
"market_id": 1,
"name": "moneyline",
"participants": [
{
"name": "Atlanta Hawks",
"type": "TYPE_TEAM",
"lines": [
{
"value": "0",
"prices": {
"19": {
"price": -105,
"is_main_line": true,
"updated_at": "2026-02-11T22:00:00Z"
}
}
}
]
}
]
},
{
"id": 2518419,
"market_id": 2,
"name": "handicap",
"participants": [
{
"name": "Atlanta Hawks",
"type": "TYPE_TEAM",
"lines": [
{
"value": "4.5",
"prices": {
"19": {
"price": -110,
"is_main_line": true,
"updated_at": "2026-02-11T22:00:00Z"
}
}
}
]
}
]
},
{
"id": 2518420,
"market_id": 3,
"name": "totals",
"participants": [
{
"name": "Over",
"type": "TYPE_RESULT",
"lines": [
{
"value": "235.5",
"prices": {
"19": {
"price": -110,
"is_main_line": true,
"updated_at": "2026-02-12T00:10:43Z"
}
}
}
]
}
]
}
]
}
]
}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. Defaults to 1,2,3 (Moneyline, Spread, Total); for soccer leagues and NHL the default is 1,2,3,563. The soccer 3-way moneyline (home/draw/away) is served on market 1 as three participants; market 563 carries the NHL 60-minute regulation-time line.
Limit: 12 market IDs per request. Requests with more than 12 IDs are rejected with a 400 — split larger requests into batches of 12, or omit the parameter to use the default.
On market-definition endpoints (/api/v2/events/{eventID}/markets, /api/v2/sports/{sportID}/markets/{date}), omitting market_ids returns all available market definitions instead of the default set.
Common IDs: 1=Moneyline, 2=Spread, 3=Total, 29=Player Points, 35=Player Rebounds, 38=Three Pointers, 39=Player Assists, 93=Player PRA, 94=Team Totals.
Live variants: 41=Live ML, 42=Live Spread, 43=Live Total.
Comma-separated participant IDs to filter (max 99)
Filter participants by type
TYPE_TEAM, TYPE_PLAYER, TYPE_RESULT 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.
Only return main lines (primary odds, not alternates). On opening and closing endpoints, this selects main lines in the snapshot. Use history to follow which line was main at each timestamp.
true, false Exclude currently closed lines when true. Omit or set false to retrieve completed historical snapshots; an event can remain when no prices match.
true, false