Live scores API
Games in progress right now (status.state = "in") for one league, each with both teams, the current score, period, clock and status text. Returns an empty array when nothing is live. Data is aggregated from public sources and is typically 20-30 seconds behind live play (about 1 second after our source). There is no SLA.
- For continuous updates use webhooks or the WebSocket stream instead of polling this endpoint in a tight loop.
- Pass includeOdds=true to attach current odds where the league has them.
Paths and parameters
GET/api/v1/sports/{sport}/leagues/{league}/events/live
List live events. Events currently in progress (status.state = "in"). Returns an empty array when nothing is live. For continuous updates prefer webhooks or the WebSocket stream over tight polling.
sport(path, required): Sport slug: football, basketball, baseball, hockey, soccer.league(path, required): League slug, e.g. nfl, college-football, nba, mens-college-basketball, mlb, nhl, eng.1, usa.1.includeOdds(query): Attach current betting odds (when available) to each event. Adds latency.
Live example
Request
curl -H "Authorization: Bearer $RSA_API_KEY" \
"https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/live"Response captured from live data at 2026-10-05 02:07 UTC (refreshed every few minutes). Long arrays are trimmed; meta.rateLimit values are illustrative for a Free key.
Response
{
"success": true,
"data": [
{
"id": "401872978",
"uid": "s:20~l:28~e:401872978",
"name": "Detroit Lions at Carolina Panthers",
"shortName": "DET @ CAR",
"date": "2026-10-05T00:20Z",
"status": {
"state": "in",
"completed": false,
"period": 3,
"clock": "15:00",
"detail": "15:00 - 3rd Quarter",
"halftime": false,
"firstHalfEnded": true
},
"homeTeam": {
"id": "29",
"name": "Carolina Panthers",
"abbreviation": "CAR",
"logo": "https://realtimesportsapi.com/api/images/proxy?id=GgcVSgNPTUMITUgaFFQVVVQXBVwOHV5LRQBZD1lbBllDXR0HVl9AUlxGAEwbSkoYVg",
"color": "0085ca",
"alternateColor": "000000",
"winner": false,
"score": 16
},
"awayTeam": {
"id": "8",
"name": "Detroit Lions",
"abbreviation": "DET",
"logo": "https://realtimesportsapi.com/api/images/proxy?id=GgcVSgNPTUMITUgaFFQVVVQXBVwOHV5LRQBZD1lbBllDXR0HVl9AUlxGB0gdSkoYVg",
"color": "0076b6",
"alternateColor": "bbbbbb",
"winner": false,
"score": 16
},
"competition": {
"attendance": 0,
"neutralSite": false,
"conferenceCompetition": false,
"divisionCompetition": false,
"playByPlayAvailable": true,
"highlightsAvailable": true
},
"venue": {
"id": "3628",
"name": "Bank of America Stadium",
"city": "Charlotte",
"state": "NC",
"indoor": false,
"grass": false
},
"notes": [],
"season": {
"year": 2026,
"displayName": "2026",
"type": {
"id": "2",
"name": "Regular Season",
"abbreviation": "reg"
},
"week": {
"number": 4,
"startDate": "2026-09-30T07:00Z",
"endDate": "2026-10-07T06:59Z",
"text": "Week 4"
}
},
"broadcasts": [
{
"network": {
"id": "1",
"type": "National"
},
"type": "TV"
}
],
"officials": [
{
"id": "17690",
"fullName": "Greg Wilson",
"displayName": "Greg Wilson",
"order": 1,
"position": "Back Judge"
},
{
"id": "3055005",
"fullName": "Clay Martin",
"displayName": "Clay Martin",
"order": 2,
"position": "Referee"
},
{
"id": "3055221",
"fullName": "Eugene Hall",
"displayName": "Eugene Hall",
"order": 3,
"position": "Side Judge"
},
"... 4 more"
]
}
],
"meta": {
"rateLimit": {
"limit": 125,
"remaining": 124,
"reset": 1793491200000
}
}
}Fields
| Field | Type | Notes |
|---|---|---|
| id | string | Event id; use it with the detail, plays, box score and odds endpoints. |
| uid | string | |
| name | string | Full matchup name. |
| shortName | string | Abbreviated matchup, e.g. "AWAY @ HOME". |
| date | string | Start time, ISO-8601 UTC. |
| status | EventStatus | state (pre, in, post), completed, period, clock and display detail. |
| homeTeam | EventTeam | id, name, abbreviation, colors, logo (proxied), record, score, winner. |
| awayTeam | EventTeam | Same shape as homeTeam. |
| competition | object | attendance, neutralSite, conference/division flags, playByPlayAvailable. |
| venue | object | Venue id, name, city, state, indoor, grass (null when unknown). |
| notes | string[] | Headline notes, e.g. round or rivalry names. |
| season | object | year, type (preseason/regular/postseason) and week where the league uses weeks. |
| broadcasts | object[] | TV/stream networks for the game. |
| officials | object[] | Game officials when published. |
| odds | Odds | Only with includeOdds=true and when the game has odds. |
League support
Checked against live data on 2026-10-04: 29 available, 0 limited, 0 seasonal or not verified, 0 not available.
Code samples
curl
curl -H "Authorization: Bearer $RSA_API_KEY" \
"https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/live"JavaScript (fetch)
const res = await fetch("https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/live", {
headers: { Authorization: `Bearer ${process.env.RSA_API_KEY}` }
});
const { success, data, meta } = await res.json();
console.log(data, meta.rateLimit);Python (requests)
import os, requests
res = requests.get(
"https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/live",
headers={"Authorization": f"Bearer {os.environ['RSA_API_KEY']}"},
timeout=10,
)
body = res.json()
print(body["data"])MCP prompt (Claude, Cursor, ChatGPT)
Using the Realtime Sports MCP server (https://www.realtimesportsapi.com/api/mcp), call get_live_events with sport "football" and league "nfl" and tell me which games are live and the current scores for NFL.Connect the hosted MCP server first: setup guide. Each tool call counts as one API call.
Rate limits and pricing
| Plan | Price | Calls | Rate | WebSocket | Webhooks |
|---|---|---|---|---|---|
| Free | $0 | 125/mo (1,000 first 30 days) | 1/s | 500 msgs/mo | No |
| Starter | $29/mo ($290/yr) | 10,000/mo | 5/s | Shares monthly pool | Shares monthly pool |
| Growth | $49/mo ($490/yr) | 25,000/mo | 10/s | Shares monthly pool | Shares monthly pool |
| Pro | $99/mo ($990/yr) | 50,000/mo | 20/s | 100,000 msgs/mo | 25,000/mo |
| Scale | $299/mo ($2,990/yr) | 500,000/mo | 100/s | 500,000 msgs/mo | 100,000/mo |
Every successful REST call counts as one call. Over the limit you get HTTP 429 with a Retry-After header. No SLA. Full pricing.
FAQ
- What does the live scores endpoint return?
- Games in progress right now (status.state = "in") for one league, each with both teams, the current score, period, clock and status text. Returns an empty array when nothing is live.
- Which leagues support live scores?
- All 29 monitored leagues returned data when we checked on 2026-10-04.
- Is it free to try?
- Yes. The Free plan is $0 with 125 calls per month (1,000 in the first 30 days) at 1 request per second, no card required. Every successful call counts as one call.
- How fresh is the data?
- Data is aggregated from public sources and is typically 20-30 seconds behind live play (about 1 second after our source). There is no SLA.
- Can I get updates pushed instead of polling?
- Webhooks are included on every paid plan (Starter, Growth, Pro, Scale). WebSocket is included on paid plans, and the Free plan gets a 500-message monthly preview.