curl --request GET \
--url https://therundown.io/api/v2/sports/{sportID}/closing/{date} \
--header 'X-TheRundown-Key: <api-key>'import requests
url = "https://therundown.io/api/v2/sports/{sportID}/closing/{date}"
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}/closing/{date}', 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}/closing/{date}",
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}/closing/{date}"
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}/closing/{date}")
.header("X-TheRundown-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://therundown.io/api/v2/sports/{sportID}/closing/{date}")
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": 2
},
"events": [
{
"event_id": "816efd1e5767d7133b5bc70c77173a18",
"event_uuid": "11f1-197d-e93ea800-8c2a-ef6a554ca62d",
"sport_id": 4,
"event_date": "2023-11-07T05:31:56Z",
"rotation_number_away": 123,
"rotation_number_home": 123,
"score": {
"event_id": "<string>",
"event_status": "<string>",
"team_id_away": 123,
"team_id_home": 123,
"score_away": 123,
"score_home": 123,
"winner_away": 123,
"winner_home": 123,
"score_away_by_period": [
123
],
"score_home_by_period": [
123
],
"venue_name": "<string>",
"venue_location": "<string>",
"game_clock": 123,
"display_clock": "<string>",
"game_period": 123,
"broadcast": "<string>",
"event_status_detail": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
},
"teams": [
{
"team_id": 123,
"name": "<string>",
"mascot": "<string>",
"abbreviation": "<string>",
"record": "<string>",
"is_home": true,
"is_away": true,
"ranking": 123,
"conference": {
"conference_id": 123,
"sport_id": 123,
"name": "<string>"
},
"division": {
"division_id": 123,
"conference_id": 123,
"sport_id": 123,
"name": "<string>"
}
}
],
"schedule": {
"season_type": "Regular Season",
"season_year": 2026,
"conference_competition": true,
"conference_name": "<string>",
"league_name": "<string>",
"event_name": "<string>",
"attendance": "<string>",
"event_headline": "<string>",
"game_number": 1,
"game_type": "doubleheader",
"week": 123,
"week_name": "<string>",
"week_detail": "<string>"
},
"pitcher_away": {
"id": 123,
"name": "<string>",
"throws_left_handed": true,
"throws_right_handed": true,
"bats_left_handed": true,
"bats_right_handed": true
},
"pitcher_home": {
"id": 123,
"name": "<string>",
"throws_left_handed": true,
"throws_right_handed": true,
"bats_left_handed": true,
"bats_right_handed": true
},
"markets": [
{
"id": 123,
"market_id": 1,
"period_id": 123,
"name": "Money Line",
"market_description": "<string>",
"participants": [
{
"id": 51,
"type": "TYPE_TEAM",
"name": "New England Patriots",
"lines": [
{
"id": "<string>",
"value": "<string>",
"selection": "<string>",
"handicap": "<string>",
"prices": {}
}
]
}
]
}
],
"live_game_state": {
"event_id": "<string>",
"sport_id": 123,
"sport": "mlb",
"period": 123,
"half_indicator": "<string>",
"last_play": {
"play_id": 123,
"sequence": 123,
"type": "<string>",
"result": "<string>",
"description": "<string>",
"team_id": 123,
"scoring_play": true,
"score_value": 123,
"occurred_at": "2023-11-07T05:31:56Z",
"win_probability_home": 123,
"participants": [
{
"player_id": 123,
"name": "<string>",
"team_id": 123,
"role": "batter",
"position": "<string>"
}
]
},
"updated_at": "2023-11-07T05:31:56Z",
"mlb": {
"balls": 123,
"strikes": 123,
"outs": 123,
"on_first": {
"player_id": 123,
"name": "<string>",
"team_id": 123
},
"on_second": {
"player_id": 123,
"name": "<string>",
"team_id": 123
},
"on_third": {
"player_id": 123,
"name": "<string>",
"team_id": 123
},
"current_batter": {
"player_id": 123,
"name": "<string>",
"team_id": 123
},
"current_pitcher": {
"player_id": 123,
"name": "<string>",
"team_id": 123
}
},
"football": {
"possession_team_id": 123,
"down": 123,
"distance": 123,
"yard_line": 123,
"down_distance_text": "3rd & 4 at KC 38",
"short_down_distance_text": "3rd & 4",
"possession_text": "<string>",
"is_red_zone": true,
"home_timeouts": 123,
"away_timeouts": 123
},
"basketball": {
"possession_team_id": 123,
"home_timeouts": 123,
"away_timeouts": 123,
"home_in_bonus": true,
"away_in_bonus": true
},
"hockey": {
"possession_team_id": 123,
"strength": "<string>",
"power_play_team_id": 123,
"home_shots_on_goal": 123,
"away_shots_on_goal": 123,
"home_goalie_pulled": true,
"away_goalie_pulled": true
}
},
"affiliate_source_ids": {
"19": "31580014",
"23": "34031-88749503"
}
}
]
}Get closing lines for a sport and date
Returns events with the latest recorded price for each available line and sportsbook at or before each event’s scheduled start time. Before an event starts, the snapshot is provisional. Period markets use the event start time as their closing cutoff.
Historical-data access and the event-date lookback depend on your plan. Omit hide_closed or use false to include currently closed prices in completed-event snapshots. Events can be returned without prices when no recorded lines match the filters. Use market history for price changes over time; see the Historical Odds guide.
curl --request GET \
--url https://therundown.io/api/v2/sports/{sportID}/closing/{date} \
--header 'X-TheRundown-Key: <api-key>'import requests
url = "https://therundown.io/api/v2/sports/{sportID}/closing/{date}"
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}/closing/{date}', 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}/closing/{date}",
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}/closing/{date}"
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}/closing/{date}")
.header("X-TheRundown-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://therundown.io/api/v2/sports/{sportID}/closing/{date}")
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": 2
},
"events": [
{
"event_id": "816efd1e5767d7133b5bc70c77173a18",
"event_uuid": "11f1-197d-e93ea800-8c2a-ef6a554ca62d",
"sport_id": 4,
"event_date": "2023-11-07T05:31:56Z",
"rotation_number_away": 123,
"rotation_number_home": 123,
"score": {
"event_id": "<string>",
"event_status": "<string>",
"team_id_away": 123,
"team_id_home": 123,
"score_away": 123,
"score_home": 123,
"winner_away": 123,
"winner_home": 123,
"score_away_by_period": [
123
],
"score_home_by_period": [
123
],
"venue_name": "<string>",
"venue_location": "<string>",
"game_clock": 123,
"display_clock": "<string>",
"game_period": 123,
"broadcast": "<string>",
"event_status_detail": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
},
"teams": [
{
"team_id": 123,
"name": "<string>",
"mascot": "<string>",
"abbreviation": "<string>",
"record": "<string>",
"is_home": true,
"is_away": true,
"ranking": 123,
"conference": {
"conference_id": 123,
"sport_id": 123,
"name": "<string>"
},
"division": {
"division_id": 123,
"conference_id": 123,
"sport_id": 123,
"name": "<string>"
}
}
],
"schedule": {
"season_type": "Regular Season",
"season_year": 2026,
"conference_competition": true,
"conference_name": "<string>",
"league_name": "<string>",
"event_name": "<string>",
"attendance": "<string>",
"event_headline": "<string>",
"game_number": 1,
"game_type": "doubleheader",
"week": 123,
"week_name": "<string>",
"week_detail": "<string>"
},
"pitcher_away": {
"id": 123,
"name": "<string>",
"throws_left_handed": true,
"throws_right_handed": true,
"bats_left_handed": true,
"bats_right_handed": true
},
"pitcher_home": {
"id": 123,
"name": "<string>",
"throws_left_handed": true,
"throws_right_handed": true,
"bats_left_handed": true,
"bats_right_handed": true
},
"markets": [
{
"id": 123,
"market_id": 1,
"period_id": 123,
"name": "Money Line",
"market_description": "<string>",
"participants": [
{
"id": 51,
"type": "TYPE_TEAM",
"name": "New England Patriots",
"lines": [
{
"id": "<string>",
"value": "<string>",
"selection": "<string>",
"handicap": "<string>",
"prices": {}
}
]
}
]
}
],
"live_game_state": {
"event_id": "<string>",
"sport_id": 123,
"sport": "mlb",
"period": 123,
"half_indicator": "<string>",
"last_play": {
"play_id": 123,
"sequence": 123,
"type": "<string>",
"result": "<string>",
"description": "<string>",
"team_id": 123,
"scoring_play": true,
"score_value": 123,
"occurred_at": "2023-11-07T05:31:56Z",
"win_probability_home": 123,
"participants": [
{
"player_id": 123,
"name": "<string>",
"team_id": 123,
"role": "batter",
"position": "<string>"
}
]
},
"updated_at": "2023-11-07T05:31:56Z",
"mlb": {
"balls": 123,
"strikes": 123,
"outs": 123,
"on_first": {
"player_id": 123,
"name": "<string>",
"team_id": 123
},
"on_second": {
"player_id": 123,
"name": "<string>",
"team_id": 123
},
"on_third": {
"player_id": 123,
"name": "<string>",
"team_id": 123
},
"current_batter": {
"player_id": 123,
"name": "<string>",
"team_id": 123
},
"current_pitcher": {
"player_id": 123,
"name": "<string>",
"team_id": 123
}
},
"football": {
"possession_team_id": 123,
"down": 123,
"distance": 123,
"yard_line": 123,
"down_distance_text": "3rd & 4 at KC 38",
"short_down_distance_text": "3rd & 4",
"possession_text": "<string>",
"is_red_zone": true,
"home_timeouts": 123,
"away_timeouts": 123
},
"basketball": {
"possession_team_id": 123,
"home_timeouts": 123,
"away_timeouts": 123,
"home_in_bonus": true,
"away_in_bonus": true
},
"hockey": {
"possession_team_id": 123,
"strength": "<string>",
"power_play_team_id": 123,
"home_shots_on_goal": 123,
"away_shots_on_goal": 123,
"home_goalie_pulled": true,
"away_goalie_pulled": true
}
},
"affiliate_source_ids": {
"19": "31580014",
"23": "34031-88749503"
}
}
]
}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
Query Parameters
UTC offset in minutes for the date boundary. Use 300 for US Central, 240 for Eastern, 360 for Mountain, 420 for Pacific. Without this, the API day boundary is midnight UTC.
300
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 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.
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 Comma-separated event status strings to include (e.g. STATUS_IN_PROGRESS,STATUS_HALFTIME). Applied before exclude_status.
Comma-separated event status strings to exclude. Applied after event_status.
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