Free API to return consumable data from ncaa.com.
Works with scores, stats, rankings, standings, schedules, brackets, history, logos, news, and game details (box score, play by play, scoring summary, team stats).
Try it out here: https://ncaa-api.henrygd.me/openapi
Make a GET request using the same path as the URL on ncaa.com. You'll get a JSON response with the data.
You can test using the demo API. Host your own if you need it to be reliable long term.
Note: The public API is limited to 5 requests per second per IP.
The following URL parameters are supported:
| Parameter | Description |
|---|---|
page |
Page number. Defaults to 1. |
All routes can be tested here: https://ncaa-api.henrygd.me/openapi
Fetches live scores for a given sport, division, and date.
Website: https://www.ncaa.com/scoreboard/football/fbs/2023/13/all-conf
GET /scoreboard/football/fbs/2023/13/all-conf
Website: https://www.ncaa.com/stats/football/fbs/current/team/28
GET /stats/football/fbs/current/team/28
Website: https://www.ncaa.com/stats/football/fbs/current/individual/750
GET /stats/football/fbs/current/individual/750
Website: https://www.ncaa.com/rankings/football/fbs/associated-press
GET /rankings/football/fbs/associated-press
Website: https://www.ncaa.com/standings/basketball-women/d1
GET /standings/basketball-women/d1
Provides details of a single game.
Website: https://www.ncaa.com/game/6305900
GET /game/6305900returns general informationGET /game/6305900/boxscorereturns box scoreGET /game/6305900/play-by-playreturns play by playGET /game/6305900/scoring-summaryreturns scoring summary if availableGET /game/6305900/team-statsreturns team stats if available
Website: https://www.ncaa.com/history/bowling/nc
GET /history/bowling/nc
Returns game dates for a given sport, division, and date range.
This is the only route that doesn't exactly match a website URL. The website doesn't have schedule pages, but the sport and division are consistent with other URLs.
It also requires different dates for different sports. Football uses YYYY, while basketball, hockey, and others use YYYY/MM.
GET /schedule/basketball-men/d1/2023/02
Tournament bracket for a given sport, division, and year, including live scores.
Like the official website, this endpoint does not include FBS football brackets prior to 2025.
Website: https://www.ncaa.com/brackets/basketball-men/d1/2026
GET /brackets/basketball-men/d1/2026
News articles and videos for a given sport and division. Returns parsed RSS feed data in JSON format.
Website: https://www.ncaa.com/news/basketball-men/d1/rss.xml
GET /news/basketball-men/d1
Returns a list of all schools.
Website: https://www.ncaa.com/schools-index
GET /schools-index
Logos for all NCAA schools. Use the school slug or team_seo property.
GET /logo/michigan.svgGET /logo/michigan.svg?dark=truereturns a version of the logo that works better on dark backgrounds.
Use the included docker-compose.yml or run directly with Docker:
docker run --rm -p 3000:3000 henrygd/ncaa-apiThe app should be available at http://localhost:3000.
If you host your own instance, you may specify a custom header value to be present in all requests as a way to restrict access to the API.
To do this, set the NCAA_HEADER_KEY environment variable to the desired value and include the header x-ncaa-key in your requests. See the docker-compose.yml for an example.
This is an ElysiaJS application. To start the development server run:
bun run devTo run tests:
bun testContributions welcome.