TheRundown developer API
Sports scores API with game status and stable event identity
Choose TheRundown for scores and schedules under the same event ID as odds. Request score-only event responses when you do not need prices, then validate status and period fields rather than guessing from the date.
Free: delayed pre-match main lines from three books. No credit card. Real-time REST and WebSocket require Ultra or above.
Scores live on the event response
There is no separate scores/results endpoint. Each event has a score object with score_home, score_away, event_status and optional clock, period, venue and broadcast metadata. Use affiliate_ids=0 to return events and scores without market/price objects on open and completed games.
An event response costs an event point and a score point when the score is present. Without prices or live_game_state, that is two data points per scored event. A returned live_game_state adds another score-category point. Confirm actual billed usage with X-Datapoints; individual score fields do not add separate charges.
| Field | Meaning | Handling |
|---|---|---|
| event_id / event_date | Canonical game identity and scheduled UTC start | Keep ID distinct from event_uuid |
| score_home / score_away | Current or final totals | Do not substitute a fabricated zero for missing data |
| event_status | Scheduled, in-progress, final or another state | Use status rather than a past date to determine finality |
| score_*_by_period | Per-period points/runs, not running totals | Validate each side independently |
| display_clock / venue / broadcast | Optional context | An empty string means unavailable information |
Fetch a score-only slate in Python
Set your key and install requests. This requests today’s UTC regular-season NFL slate without prices. Choose an active sport/date from the catalog; an empty events array on a non-game day is legitimate. Read status for each event because a date can contain scheduled, live and completed games.
Do not use hide_closed=true as a replacement for affiliate_ids=0: it only filters closed odds. Omitting market_ids also does not omit odds; event requests have default market scopes.
import os
from datetime import datetime, timezone
import requests
day = datetime.now(timezone.utc).date().isoformat()
response = requests.get(
f"https://therundown.io/api/v2/sports/2/events/{day}",
headers={"X-TheRundown-Key": os.environ["THERUNDOWN_API_KEY"]},
params={"affiliate_ids": "0"},
timeout=20,
)
response.raise_for_status()
print("Data points:", response.headers.get("X-Datapoints"))
for event in response.json().get("events", []):
score = event.get("score") or {}
print(event["event_id"], event.get("event_date"),
score.get("event_status"), score.get("score_away"),
score.get("score_home"), score.get("display_clock") or "")affiliate_ids=0 omits markets/prices. X-Datapoints provides actual usage; live-game-state fields can add a score point.
Handle overtime, incomplete fields and unequal inning arrays
Period arrays contain the score for each period, with overtime entries appended. They are not cumulative totals. Read each team’s own array length and validate the sum before deriving a half score or a completed result. Total fields and arrays are independent fields, so handle a mismatch without guessing.
In baseball, the home side may have one fewer inning when it does not bat in the bottom of the final inning. Do not pad that missing inning with zero. All-Star or preseason games may be final with empty period data or a different period count; an ordinary four-period assumption is unsafe.
Use score.updated_at to judge score freshness. Missing venue, broadcast or display_clock is unavailable metadata. The odds plan-delay table describes odds entitlement, not an independently measured sport-by-sport score latency SLA.
Discover league scopes before fetching daily scores
Regular season, preseason and playoff IDs can differ. Request the phase you need, and do not silently fall back to another sport ID when the desired date has no events. Event IDs allow a scoreboard to link back to the same game’s eligible odds response later.
A score feed is not a full box-score feed. Team/player statistics and aggregates use separate stats routes and effective access headers. Validate the required sport and event rather than treating every score as a complete statistical record.
| League | Regular season | Other scopes |
|---|---|---|
| NFL | 2 | Preseason 25; playoffs 26 |
| NBA | 4 | Preseason 23; playoffs 24; summer 32 |
| MLB | 3 | Spring 30; postseason 31 |
| NHL | 6 | Preseason 27; playoffs 28 |
Sports scores API pricing and plan delays
Choose your plan from the required usage, licensed display and supported game-data access. The table below lists odds delays; it does not assert a numerical score latency SLA. Published USD monthly plans start at Free, Starter $49, Pro $149 and Ultra $399. Select the feature set first, then size your included data-point volume. Free and Starter are for internal or personal use; commercial end-user display begins on Pro. Real-time odds and WebSocket begin on Ultra. Paid plans have a fixed subscription fee with included data-point volume. Choose the sports, books and markets your application needs: unrequested price rows do not consume that volume, but using fewer points does not reduce the base fee. Measure each request with X-Datapoints; requests, event objects, credits and data points are different billing units.
| Monthly plan | USD/month | Odds delay | Included volume | Use and delivery |
|---|---|---|---|---|
| Free | $0 | 5 minutes | 20,000/day · 200,000/month | Three books; delayed pre-match main lines. Internal or personal use. |
| Starter | $49 | 60 seconds | 25,000,000/mo | Additional books, props, alternates and delayed in-play odds. Internal or personal use. |
| Pro | $149 | 30 seconds | 125,000,000/mo | Commercial end-user display and a 30-second odds delay. |
| Ultra | $399 | Real-time | 500,000,000/mo | Real-time REST, WebSocket, futures and supported live game data. |
Annual billing has different monthly equivalents. Monthly and annual plans stop at included data points by default; optional overage and weekly billing have separate terms. Super, Mega and Max add published volume and connection capacity; Enterprise is scoped by contract. Confirm effective API and stats access in response headers.
Sports scores API FAQ
- What endpoint returns sports scores?
- Scores are included in V2 event responses. There is no separate scores/results endpoint. Add affiliate_ids=0 to a sport/date or individual-event request to omit market and price objects.
- How much does a score-only event cost?
- One event point plus one score point when a score is present. That is two points without prices or live_game_state; a returned live_game_state adds another score point. Confirm X-Datapoints on your response.
- Can I tell a game is finished from its date?
- No. Inspect event_status. A past date alone does not establish that a game reached a final state. Handle postponed, cancelled and other states explicitly.
- Are per-period arrays guaranteed to match total scores?
- No. They are independent fields. Validate completeness and sums; read each side by its own array length, especially in baseball, and handle missing or mismatched values without guessing.
Build and compare
Choose the API scope that matches your application. Each guide below covers a different integration need.
Product and documentation sources checked October 13, 2026. Source, sport, event and market availability varies; catalog entries do not guarantee a priced line or a populated statistic.