Box score API

Team totals, period-by-period scores and player stat lines for one game. Football players carry per-category stats (passing, rushing, receiving, defense, kicking, returns). 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.

Paths and parameters

GET/api/v1/sports/{sport}/leagues/{league}/events/{eventId}/boxscore

Get box score. Team totals and player stats. Supported for basketball, soccer, baseball and football. Football players carry per-category stats (passing, rushing, receiving, defensive, kicking, returns) under `categories`.

  • 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.

Live example

Request

curl -H "Authorization: Bearer $RSA_API_KEY" \
  "https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/401872965/boxscore"

Response captured from live data at 2026-10-05 02:13 UTC (refreshed every few minutes). Long arrays are trimmed; meta.rateLimit values are illustrative for a Free key. Player lists trimmed to 2 of 34 (home) and 31 (away).

Response

{
  "success": true,
  "data": {
    "homeTeam": {
      "id": "28",
      "name": "Washington Commanders",
      "abbreviation": "WSH",
      "score": 13
    },
    "awayTeam": {
      "id": "11",
      "name": "Indianapolis Colts",
      "abbreviation": "IND",
      "score": 30
    },
    "homePlayers": [
      {
        "id": "4432722",
        "name": "Athan Kaliakmanis",
        "jersey": "16",
        "categories": {
          "passing": {
            "completions/passingAttempts": "15/33",
            "passingYards": "186",
            "yardsPerPassAttempt": "5.6",
            "passingTouchdowns": "1",
            "interceptions": "1",
            "sacks-sackYardsLost": "1-9",
            "adjQBR": "16.9",
            "QBRating": "60.9"
          },
          "rushing": {
            "rushingAttempts": "3",
            "rushingYards": "16",
            "yardsPerRushAttempt": "5.3",
            "rushingTouchdowns": "0",
            "longRushing": "9"
          }
        }
      },
      {
        "id": "2576980",
        "name": "Marcus Mariota",
        "jersey": "8",
        "categories": {
          "passing": {
            "completions/passingAttempts": "3/4",
            "passingYards": "46",
            "yardsPerPassAttempt": "11.5",
            "passingTouchdowns": "0",
            "interceptions": "0",
            "sacks-sackYardsLost": "1-6",
            "adjQBR": "85.5",
            "QBRating": "112.5"
          },
          "rushing": {
            "rushingAttempts": "1",
            "rushingYards": "35",
            "yardsPerRushAttempt": "35.0",
            "rushingTouchdowns": "0",
            "longRushing": "35"
          }
        }
      }
    ],
    "awayPlayers": [
      {
        "id": "3917792",
        "name": "Daniel Jones",
        "jersey": "17",
        "categories": {
          "passing": {
            "completions/passingAttempts": "19/34",
            "passingYards": "143",
            "yardsPerPassAttempt": "4.2",
            "passingTouchdowns": "0",
            "interceptions": "1",
            "sacks-sackYardsLost": "2-14",
            "adjQBR": "16.2",
            "QBRating": "53.9"
          },
          "rushing": {
            "rushingAttempts": "4",
            "rushingYards": "2",
            "yardsPerRushAttempt": "0.5",
            "rushingTouchdowns": "1",
            "longRushing": "4"
          },
          "fumbles": {
            "fumbles": "1",
            "fumblesLost": "1",
            "fumblesRecovered": "0"
          }
        }
      },
      {
        "id": "4242335",
        "name": "Jonathan Taylor",
        "jersey": "28",
        "categories": {
          "rushing": {
            "rushingAttempts": "20",
            "rushingYards": "95",
            "yardsPerRushAttempt": "4.8",
            "rushingTouchdowns": "2",
            "longRushing": "12"
          },
          "receiving": {
            "receptions": "1",
            "receivingYards": "2",
            "yardsPerReception": "2.0",
            "receivingTouchdowns": "0",
            "longReception": "2",
            "receivingTargets": "4"
          }
        }
      }
    ],
    "periodScores": {
      "home": [
        6,
        0,
        7,
        "... 1 more"
      ],
      "away": [
        0,
        10,
        10,
        "... 1 more"
      ]
    }
  },
  "meta": {
    "rateLimit": {
      "limit": 125,
      "remaining": 124,
      "reset": 1793491200000
    }
  }
}

Fields

FieldTypeNotes
homeTeamobject
awayTeamobject
homePlayersobject[]
awayPlayersobject[]
periodScoresobject

League support

Checked against live data on 2026-10-04: 4 available, 23 limited, 1 seasonal or not verified, 1 not available.

Available
Available
Seasonal / not verified
Available
Not available
MLS

Team totals and period scores only; player stats are not returned.

Limited
U.S. Open Cup

Team totals and period scores only; player stats are not returned.

Limited
Premier League

Team totals and period scores only; player stats are not returned.

Limited
Champions League

Team totals and period scores only; player stats are not returned.

Limited
Europa League

Team totals and period scores only; player stats are not returned.

Limited
FA Cup

Team totals and period scores only; player stats are not returned.

Limited
LaLiga

Team totals and period scores only; player stats are not returned.

Limited
Serie A

Team totals and period scores only; player stats are not returned.

Limited
Liga MX

Team totals and period scores only; player stats are not returned.

Limited
FIFA World Cup

Team totals and period scores only; player stats are not returned.

Limited
Women's Super League

Team totals and period scores only; player stats are not returned.

Limited
Women's Champions League

Team totals and period scores only; player stats are not returned.

Limited
Conference League

Team totals and period scores only; player stats are not returned.

Limited
English League Cup

Team totals and period scores only; player stats are not returned.

Limited
Bundesliga

Team totals and period scores only; player stats are not returned.

Limited
Ligue 1

Team totals and period scores only; player stats are not returned.

Limited
NWSL

Team totals and period scores only; player stats are not returned.

Limited
EFL Championship

Team totals and period scores only; player stats are not returned.

Limited
World Cup Qualifying (UEFA)

Team totals and period scores only; player stats are not returned.

Limited
World Cup Qualifying (CONMEBOL)

Team totals and period scores only; player stats are not returned.

Limited
World Cup Qualifying (AFC)

Team totals and period scores only; player stats are not returned.

Limited
World Cup Qualifying (CAF)

Team totals and period scores only; player stats are not returned.

Limited
World Cup Qualifying (CONCACAF)

Team totals and period scores only; player stats are not returned.

Limited

Code samples

curl

curl -H "Authorization: Bearer $RSA_API_KEY" \
  "https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/401872965/boxscore"

JavaScript (fetch)

const res = await fetch("https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/401872965/boxscore", {
  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/401872965/boxscore",
    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_box_score with sport "football" and league "nfl" and pick a finished game from get_events and list the top performers for NFL.

Connect the hosted MCP server first: setup guide. Each tool call counts as one API call.

Rate limits and pricing

PlanPriceCallsRateWebSocketWebhooks
Free$0125/mo (1,000 first 30 days)1/s500 msgs/moNo
Starter$29/mo ($290/yr)10,000/mo5/sShares monthly poolShares monthly pool
Growth$49/mo ($490/yr)25,000/mo10/sShares monthly poolShares monthly pool
Pro$99/mo ($990/yr)50,000/mo20/s100,000 msgs/mo25,000/mo
Scale$299/mo ($2,990/yr)500,000/mo100/s500,000 msgs/mo100,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 box score endpoint return?
Team totals, period-by-period scores and player stat lines for one game. Football players carry per-category stats (passing, rushing, receiving, defense, kicking, returns).
Which leagues support box score?
Verified on 2026-10-04: NFL, College Football, NBA, MLB. Limited: MLS, U.S. Open Cup, Premier League, Champions League, Europa League, FA Cup, LaLiga, Serie A, Liga MX, FIFA World Cup, Women's Super League, Women's Champions League, Conference League, English League Cup, Bundesliga, Ligue 1, NWSL, EFL Championship, World Cup Qualifying (UEFA), World Cup Qualifying (CONMEBOL), World Cup Qualifying (AFC), World Cup Qualifying (CAF), World Cup Qualifying (CONCACAF). Seasonal or not verified: Men's College Basketball. Not available: 1 other league.
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.