Cross-sport games strip with live scores + odds
Intelligence endpoint for the top-of-page game ribbon. Sport-scoped with hard caps (~15-20 games per sport per day). 30s Redis cache. Legacy alias: GET /v1/nerd/games (deprecated, sunset 2026-09-01).
One of sport or league is required (unlike /v1/matches, which defaults to an unfiltered list). sport accepts canonical sport slugs (american_football, basketball, football, ...) and brand aliases (nfl, nba, nhl, ...). A brand alias narrows to ONE league; a canonical slug covers every league of that sport, so the two return different row counts by design. filters_applied.league says which happened: the league name for a brand alias, null for a whole sport.
Each game's sport field carries the row's canonical sport slug, in the same vocabulary ?sport= accepts, so a value taken from a response can be fed straight back into a request.
?season= is not supported and returns 400; filter by ?date= (a single day or a :-separated range) instead.
Request
- Base URL: https://api.bigballsdata.com
- URL: https://api.bigballsdata.com/v1/games
- Auth: one of:
- API key in header x-api-key
- HTTP bearer
Query parameters
Canonical sport slug or brand alias. Required unless ?league= is given. Unknown values return 400 listing the accepted forms.
League code or canonical league name. Required unless ?sport= is given. Passing both returns 400 if they are inconsistent.
YYYY-MM-DD, an inclusive YYYY-MM-DD:YYYY-MM-DD range (max 31 days), 'today', 'upcoming' (next 7 days) or 'recent' (last 7 days, finished only). Default today. Calendar days are UTC days: an evening game in the Americas often kicks off after 00:00Z and is listed under the NEXT date. For calendar-day values the exact window applied is echoed in meta.date_window.
Optional IANA time zone name (e.g. America/New_York). Calendar-day values (a date, a range, today, and the default) then use local days in that zone: local midnight at both ends, converted to UTC. 'upcoming' and 'recent' are unaffected. Offsets such as -05:00 are rejected with 400. Example: ?sport=nba&date=today&tz=America/New_York.
Accepted and IGNORED. No handler reads view; the response is byte-identical with and without it (verified 2026-09-17 against production on /v1/games, /v1/wc2026/matches and /v1/wc2026/standings, modulo meta.cache_age_ms). Kept in the contract, and still tolerated by the routes, only so existing callers that send it are not broken, but do not build on it.
Response
ok
Changes
No recorded changes to this operation across all 2 revisions of this API.