College basketball rankings API (AP Top 25, Coaches Poll)
The men's college basketball AP Top 25 and Coaches Poll in JSON: each ranked team with rank, previous rank, record, points and first-place votes, plus others receiving votes. Latest release by default, or any past week.
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.
Endpoint
- GET/api/v1/sports/basketball/leagues/mens-college-basketball/rankings
- College football and men's college basketball only.
- CFP rankings have no points or first-place votes (null).
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/rankings?poll=ap"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. AP Top 25, Preseason: trimmed to the top 3 of 25 ranked teams.
Response
{
"success": true,
"data": [
{
"id": "1",
"name": "AP Top 25",
"shortName": "AP Poll",
"type": "ap",
"week": {
"number": 1,
"label": "Preseason",
"seasonType": 2
},
"season": 2027,
"date": "2026-10-19T07:00Z",
"lastUpdated": "2026-10-19T19:11Z",
"ranks": [
{
"rank": 1,
"previousRank": null,
"trend": null,
"points": 1461,
"firstPlaceVotes": 47,
"record": "0-0",
"team": {
"id": "57",
"name": "Gators",
"location": "Florida",
"displayName": "Florida Gators",
"abbreviation": "FLA",
"conference": null,
"logo": "https://www.realtimesportsapi.com/api/images/proxy?id=GgcVSgNPTUMITUgaFFQVVVQXBVwOHV5LRQBZD1lbBllDXR0CWxFaV1xZTBheSkoYVg"
}
},
{
"rank": 2,
"previousRank": null,
"trend": null,
"points": 1411,
"firstPlaceVotes": 10,
"record": "0-0",
"team": {
"id": "150",
"name": "Blue Devils",
"location": "Duke",
"displayName": "Duke Blue Devils",
"abbreviation": "DUKE",
"conference": null,
"logo": "https://www.realtimesportsapi.com/api/images/proxy?id=GgcVSgNPTUMITUgaFFQVVVQXBVwOHV5LRQBZD1lbBllDXR0CWxFaV1xZTBxcVBQGX10"
}
},
{
"rank": 3,
"previousRank": null,
"trend": null,
"points": 1342,
"firstPlaceVotes": 2,
"record": "0-0",
"team": {
"id": "356",
"name": "Fighting Illini",
"location": "Illinois",
"displayName": "Illinois Fighting Illini",
"abbreviation": "ILL",
"conference": null,
"logo": "https://www.realtimesportsapi.com/api/images/proxy?id=GgcVSgNPTUMITUgaFFQVVVQXBVwOHV5LRQBZD1lbBllDXR0CWxFaV1xZTB5cUhQGX10"
}
}
],
"othersReceivingVotes": [
{
"points": 167,
"record": "0-0",
"team": {
"id": "142",
"name": "Tigers",
"location": "Missouri",
"displayName": "Missouri Tigers",
"abbreviation": "MIZ",
"conference": null,
"logo": "https://www.realtimesportsapi.com/api/images/proxy?id=GgcVSgNPTUMITUgaFFQVVVQXBVwOHV5LRQBZD1lbBllDXR0CWxFaV1xZTBxdVhQGX10"
}
}
],
"droppedOut": []
}
],
"meta": {
"count": 1,
"note": "Latest release of each poll.",
"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/rankings?poll=ap"JavaScript (fetch)
const res = await fetch("https://www.realtimesportsapi.com/api/v1/sports/basketball/leagues/mens-college-basketball/rankings?poll=ap", {
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/rankings?poll=ap",
headers={"Authorization": f"Bearer {os.environ['RSA_API_KEY']}"},
timeout=10,
)
body = res.json()
print(body["data"])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
| Field | Type | Notes |
|---|---|---|
| id | string | |
| name | string | |
| shortName | string | |
| type | string | ap, usa (coaches), cfp, fcs, afca (Division II / III) |
| week | object | |
| season | integer | College basketball seasons are named by the year they end (2026-27 = 2027). |
| date | string | |
| lastUpdated | string | |
| ranks | RankEntry[] | |
| othersReceivingVotes | object[] | |
| droppedOut | object[] |
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 |
| Business | $179/mo ($1,790/yr) | 150,000/mo | 40/s | 300,000 msgs/mo | 75,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
- Is there a free college basketball rankings 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.
- Which season number do I use?
- College basketball seasons are named by the year they end, so the 2026-27 season is season=2027.
- How do I show a team's ranking next to its score?
- Each ranked team carries the same team id as /events, so match on id.