V3 API
The V3 API provides real-time and historical sports data across 34 sports with rich match data including scores, statistics, lineups, head-to-head records, commentary, odds, and search.
Key Features
- 34 sports — the widest coverage of any SportsAPI Pro version
- REST-only — no WebSocket, optimized for polling with aggressive caching (15s for live data)
- Full image URLs — team and league logos are returned as ready-to-use
https://images.sportsapipro.com/... URLs, no image proxy needed
- String-based event IDs — all entity IDs are alphanumeric strings (e.g.,
l2TocbiL)
- League-grouped responses — scores are organized by league, not a flat event list
Base URL Pattern
https://v3.{sport}.sportsapipro.com
Examples:
https://v3.football.sportsapipro.com
https://v3.tennis.sportsapipro.com
https://v3.basketball.sportsapipro.com
Authentication
All endpoints require your API key:
curl -H "x-api-key: YOUR_API_KEY" \
https://v3.football.sportsapipro.com/api/v1/football/live
Quick Start
const response = await fetch('https://v3.football.sportsapipro.com/api/v1/football/live', {
headers: { 'x-api-key': 'YOUR_API_KEY' }
});
const data = await response.json();
// Response is grouped by league
data.leagues.forEach(({ league, events }) => {
console.log(`--- ${league.name} ---`);
events.forEach(e => {
console.log(`${e.homeTeam.name} ${e.homeScore.current} - ${e.awayScore.current} ${e.awayTeam.name} [${e.status}]`);
});
});
Real Response Example
{
"sport": { "slug": "football", "id": 1, "name": "Football" },
"period": "live",
"totalEvents": 1731,
"totalLeagues": 425,
"leagues": [
{
"league": {
"name": "AFRICA: CAF Champions League - Play Offs",
"country": "Africa",
"countryId": 1,
"leagueId": "hdkWXHOq",
"tournamentId": "EcZwBi3N",
"uniqueKey": "1_EcZwBi3N",
"url": "/football/africa/caf-champions-league/",
"logo": "https://images.sportsapipro.com/res/image/data/lr30qziD-4UJSFAUL.png",
"hasStandings": false
},
"events": [
{
"id": "l2TocbiL",
"startTime": "2026-04-11T19:00:00.000Z",
"startTimestamp": 1775934000,
"statusCode": 3,
"status": "finished",
"round": null,
"homeTeam": {
"name": "FAR Rabat",
"shortName": "FAR Rabat",
"abbr": "RAB",
"id": "40M26nnB",
"participantId": "CMn7Clai",
"slug": "far-rabat",
"image": "https://images.sportsapipro.com/res/image/data/Mm90dOkC-EyoH1qCf.png",
"redCards": 0
},
"awayTeam": {
"name": "Berkane",
"shortName": "Berkane",
"abbr": "BER",
"id": "CQPA4QGN",
"participantId": "Me4oCiMn",
"slug": "berkane",
"image": "https://images.sportsapipro.com/res/image/data/0zS1aRRq-xExOnmQQ.png",
"redCards": 0
},
"homeScore": { "current": 2, "halfTime": 1, "period1": 1, "period2": 2 },
"awayScore": { "current": 0, "halfTime": 2, "period1": 0, "period2": 0 },
"currentPeriod": 1,
"lastUpdate": 1775940975
}
]
}
]
}
V3 responses return league-grouped data, unlike V2 which returns a flat event array. Each league group contains a league object and an events array.
V3 vs V1 vs V2
| Feature | V1 | V2 | V3 |
|---|
| Sports | 9 | 25 | 34 |
| WebSocket | ✅ | ✅ | ❌ |
| Live cache TTL | 5s | 1s | 15s |
| Event IDs | Numeric | Numeric | String |
| Response format | Flat games array | Flat events array | League-grouped |
| Image URLs | CDN pattern | Proxy endpoint | Full URLs in response |
| Best for | Real-time scores | Deep stats & analytics | Widest coverage |
Event Status Codes
| Code | Status |
|---|
| 1 | not_started |
| 2 | live |
| 3 | finished |
| 4 | cancelled |
Caching Behavior
| Endpoint | Cache TTL |
|---|
| Live scores | 15 seconds |
| Today/tomorrow/yesterday | 60 seconds |
| Match summary/statistics | 30 seconds |
| Match lineups | 120 seconds |
| Match H2H/standings | 300 seconds |
| Match commentary | 15 seconds |
| Team transfers/news | 300 seconds |
| Search | No cache |