The Scores family is the heart of V1. Each endpoint returns the same game shape so you only build one renderer.
Endpoints
Endpoint Purpose TTL GET /api/v1/scoresEvery live + scheduled + recently ended game across all 9 sports. 5s GET /api/v1/{sport}/liveOnly in-progress games for one sport. 5s GET /api/v1/{sport}/allLive + scheduled + ended for one sport. 5s GET /api/v1/{sport}/currentToday’s slate for one sport (extended window). 5s GET /api/v1/games?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD&sportId={id}Date-range query. 30s
Baseball: use /api/v1/baseball/all instead of /api/v1/baseball/live — the live endpoint is intentionally disabled for baseball because the round structure makes “live” ambiguous between innings. The all payload already filters to in-progress games via statusGroup === 3.
Per-sport examples
Football
Basketball
Tennis
Hockey
Handball
A. Football
Baseball
Volleyball
Rugby
curl -H "x-api-key: YOUR_API_KEY" \
"https://v1.football.sportsapipro.com/api/v1/football/live"
Game object (real sample)
Trimmed from /api/v1/football/all:
{
"id" : 4697696 ,
"sportId" : 1 ,
"competitionId" : 5930 ,
"competitionDisplayName" : "World Cup 2026" ,
"seasonNum" : 73 ,
"stageNum" : 1 ,
"roundNum" : 1 ,
"startTime" : "2026-06-11T19:00:00+00:00" ,
"statusGroup" : 4 ,
"statusText" : "Ended" ,
"shortStatusText" : "FT" ,
"gameTime" : 90.0 ,
"gameTimeDisplay" : "90'" ,
"hasStats" : true ,
"hasStandings" : true ,
"hasLineups" : true ,
"hasBrackets" : true ,
"homeCompetitor" : {
"id" : 5040 ,
"name" : "Mexico" ,
"symbolicName" : "MEX" ,
"score" : 2 ,
"isWinner" : true ,
"color" : "#006847"
},
"awayCompetitor" : {
"id" : 2383 ,
"name" : "South Africa" ,
"symbolicName" : "RSA" ,
"score" : 1 ,
"isWinner" : false
}
}
Useful fields
Field Notes idGame ID. Use it against /game/{id} for full detail. statusGroup1 upcoming, 2 postponed, 3 live, 4 ended. gameTimeMinutes elapsed (football, handball, rugby) or period number for clock-based sports. gameTimeDisplay is the formatted version. has* flagsTell you which child endpoints will return data — gate UI accordingly. homeCompetitor / awayCompetitorInline team objects with logo color, score, winner flag.
Date-range query
curl -H "x-api-key: YOUR_API_KEY" \
"https://v1.football.sportsapipro.com/api/v1/games?startDate=2026-06-11&endDate=2026-06-18&sportId=1"
Dates are inclusive and interpreted in UTC. The response contains the same games[] shape plus a paging object — page through with ?page=N.
Incremental polling
Every scores payload includes lastUpdateId. To avoid re-downloading identical data:
let cursor = - 1 ;
async function poll () {
const r = await fetch (
`https://v1.football.sportsapipro.com/api/v1/football/live?lastUpdateId= ${ cursor } ` ,
{ headers: { 'x-api-key' : KEY } }
);
const { data } = await r . json ();
if ( data . lastUpdateId !== cursor ) {
cursor = data . lastUpdateId ;
render ( data . games );
}
}
setInterval ( poll , 2000 );
For sub-second latency, prefer the WebSocket .