NCAA men's college basketball box score API

Team totals and every player's stat line for Division I men's college basketball games, live or final. Checked on the first week of the 2026-27 season.

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.

AvailableVerified 2026-11-05: team and player stats on the first week of games.

Endpoint

  • GET/api/v1/sports/basketball/leagues/mens-college-basketball/events/{eventId}/boxscore

Live Men's College Basketball example

Request

curl -H "Authorization: Bearer $RSA_API_KEY" \
  "https://www.realtimesportsapi.com/api/v1/sports/basketball/leagues/mens-college-basketball/events/401920685/boxscore"

Response captured from live data at 2026-11-07 13:48 UTC (refreshed every few minutes). Long arrays are trimmed; meta.rateLimit values are illustrative for a Free key. Box score for UConn Huskies at Michigan Wolverines; player lists trimmed to 2 of 17 (home) and 15 (away).

Response

{
  "success": true,
  "data": {
    "homeTeam": {
      "id": "130",
      "name": "Michigan Wolverines",
      "abbreviation": "MICH",
      "score": 77
    },
    "awayTeam": {
      "id": "41",
      "name": "UConn Huskies",
      "abbreviation": "CONN",
      "score": 85
    },
    "homePlayers": [
      {
        "id": "5093142",
        "name": "J.P. Estrella",
        "jersey": "13",
        "position": "F",
        "starter": true,
        "didNotPlay": false,
        "points": "19",
        "rebounds": "9",
        "assists": "3",
        "minutes": "33",
        "fieldGoalsMade-fieldGoalsAttempted": "6-7",
        "threePointFieldGoalsMade-threePointFieldGoalsAttempted": "0-1",
        "freeThrowsMade-freeThrowsAttempted": "7-8",
        "turnovers": "2",
        "steals": "1",
        "blocks": "0",
        "offensiveRebounds": "3",
        "defensiveRebounds": "6",
        "fouls": "4"
      },
      {
        "id": "5149078",
        "name": "Moustapha Thiam",
        "jersey": "52",
        "position": "C",
        "starter": true,
        "didNotPlay": false,
        "points": "2",
        "rebounds": "5",
        "assists": "1",
        "minutes": "15",
        "fieldGoalsMade-fieldGoalsAttempted": "1-3",
        "threePointFieldGoalsMade-threePointFieldGoalsAttempted": "0-0",
        "freeThrowsMade-freeThrowsAttempted": "0-0",
        "turnovers": "2",
        "steals": "0",
        "blocks": "0",
        "offensiveRebounds": "1",
        "defensiveRebounds": "4",
        "fouls": "4"
      }
    ],
    "awayPlayers": [
      {
        "id": "5144124",
        "name": "Nik Khamenia",
        "jersey": "4",
        "position": "F",
        "starter": true,
        "didNotPlay": false,
        "points": "7",
        "rebounds": "2",
        "assists": "1",
        "minutes": "23",
        "fieldGoalsMade-fieldGoalsAttempted": "3-5",
        "threePointFieldGoalsMade-threePointFieldGoalsAttempted": "1-2",
        "freeThrowsMade-freeThrowsAttempted": "0-0",
        "turnovers": "3",
        "steals": "0",
        "blocks": "1",
        "offensiveRebounds": "0",
        "defensiveRebounds": "2",
        "fouls": "3"
      },
      {
        "id": "4895753",
        "name": "Jayden Ross",
        "jersey": "23",
        "position": "F",
        "starter": true,
        "didNotPlay": false,
        "points": "9",
        "rebounds": "4",
        "assists": "0",
        "minutes": "30",
        "fieldGoalsMade-fieldGoalsAttempted": "2-6",
        "threePointFieldGoalsMade-threePointFieldGoalsAttempted": "2-4",
        "freeThrowsMade-freeThrowsAttempted": "3-4",
        "turnovers": "2",
        "steals": "0",
        "blocks": "0",
        "offensiveRebounds": "2",
        "defensiveRebounds": "2",
        "fouls": "2"
      }
    ],
    "periodScores": {
      "home": [
        30,
        47
      ],
      "away": [
        43,
        42
      ]
    }
  },
  "meta": {
    "rateLimit": {
      "limit": 125,
      "remaining": 124,
      "reset": 1796083200000
    }
  }
}

Code samples

curl

curl -H "Authorization: Bearer $RSA_API_KEY" \
  "https://www.realtimesportsapi.com/api/v1/sports/basketball/leagues/mens-college-basketball/events/401920685/boxscore"

JavaScript (fetch)

const res = await fetch("https://www.realtimesportsapi.com/api/v1/sports/basketball/leagues/mens-college-basketball/events/401920685/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/basketball/leagues/mens-college-basketball/events/401920685/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 "basketball" and league "mens-college-basketball" and pick a finished game from get_events and list the top performers for Men's College Basketball.

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

Each request above is 1 call. Free covers 125 calls a month after a 1,000-call first month, at 1 request/second. Starter is $29/month for 10,000 calls (about 333 a day) plus webhooks and WebSocket, so you stop polling for changes; 7-day free trial. Compare plans

Fields

FieldTypeNotes
homeTeamobject
awayTeamobject
homePlayersobject[]
awayPlayersobject[]
periodScoresobject

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
Business$179/mo ($1,790/yr)150,000/mo40/s300,000 msgs/mo75,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

Is there a free college basketball box score API?
Yes. A free key (no card) includes every endpoint and league: 1,000 calls in the first 30 days, then 125 a month at 1 request per second. Paid plans start at $29/month for 10,000 calls and add webhooks and WebSocket.
Are box scores live?
They update while the game is in progress and are final afterwards. Data typically runs 20-30 seconds behind live play, so it suits apps, alerts, dashboards and bots, not in-play betting.

Related