Game detail API
Everything about one game by id: teams, score, status, venue, season and week, officials and notes. Game-day rosters (starters, did-not-play) are a separate call once published. 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.
- Event ids come from the events, live and schedule endpoints.
Paths and parameters
GET/api/v1/sports/{sport}/leagues/{league}/events/{eventId}
Get an event
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.eventId(path, required): Event (game) id, as returned by the events endpoints.includeOdds(query): Attach current betting odds (when available) to each event. Adds latency.
GET/api/v1/sports/{sport}/leagues/{league}/events/{eventId}/roster
Get game rosters. Game-specific rosters with per-player flags (starter, didNotPlay, active). Published by the source at kickoff.
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.eventId(path, required): Event (game) id, as returned by the events endpoints.team(query): Return only this team id.starters(query): Only starters.enrich(query): Resolve athlete names, teams and positions for play participants (default true). Pass false for faster, id-only results.
Live example
Request
curl -H "Authorization: Bearer $RSA_API_KEY" \
"https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/401872978"Response captured from live data at 2026-10-05 02:11 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": "12:20",
"detail": "12:20 - 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/401872978"JavaScript (fetch)
const res = await fetch("https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/401872978", {
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/401872978",
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_event with sport "football" and league "nfl" and pick the first game from get_events and describe it 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 event detail endpoint return?
- Everything about one game by id: teams, score, status, venue, season and week, officials and notes. Game-day rosters (starters, did-not-play) are a separate call once published.
- Which leagues support event detail?
- 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.