For agents and scripts
Query the record
NCAA Division I championships, 1928–2026; no tournaments in 1943–1945 and 2020. 14 read-only tools, served two ways: an MCP server for Claude, ChatGPT, Claude Code and other agents, and a plain JSON API for everything else. Every answer carries the data release it came from, the bracket's evidence level where one is involved, links to the pages that show the same results, and a line to cite.
Connect
MCP server: https://www.marchmatness.app/mcp (stateless Streamable HTTP, protocol revisions 2025-11-25, 2025-06-18, 2025-03-26, no sign-in). Server card: /.well-known/mcp/server.json. Machine-readable summary: /llms.txt.
- Claude Code
claude mcp add --transport http marchmatness https://www.marchmatness.app/mcp- Claude.ai
- Customize → Connectors → Add custom connector → paste
https://www.marchmatness.app/mcp. Choose “No sign-in”. - ChatGPT and other clients
- Add a custom MCP server (ChatGPT: developer mode, where your plan allows it) with the same URL.
- curl, a spreadsheet, a script
curl "https://www.marchmatness.app/api/v1/leaders?stat=falls&scope=career&limit=10"
The API lists itself at /api/v1/. Responses are JSON, cached for 5 minutes, and limited to about 60 requests a minute per address, in bursts of up to 20.
What every answer carries
{
"tool": "leaders",
"release": "pub_v1_75169e972871bad371d3a666",
"as_of": "YYYY-MM-DD",
"coverage": "NCAA Division I championships, 1928–2026; no tournaments in 1943–1945 and 2020",
"evidence": null,
"records": [
"…"
],
"total": 1,
"note": null,
"links": [
"https://www.marchmatness.app/stats/career/?types=fall"
],
"corrections": [],
"cite_as": "March Matness, NCAA Division I championship record, release 75169e97, retrieved YYYY-MM-DD"
}- release: the data release that answered; it changes when the record does.
- evidence: for anything about a bracket,
verified(checked against the archived bracket sheet),draftedordrafted_with_gaps. Quote it with the fact. - links: the pages that show the same results, computed by the same code.
- corrections: documented corrections to any bout in the answer, with the evidence link.
- cite_as: one line to cite.
Tools
coverage · What the record covers
The record's scope, counts and release: NCAA Division I championships only, first and last year, the calendar gaps, the number of bouts, wrestlers, schools and bracket boards by evidence level, the data sources, and how to cite. Call this first when unsure whether a question is inside the record. It also describes the bout scoring record (scoring: its first and last year, gaps, bundle and source), which counts reconciled bouts only and is cited with its bundle.
Example: /api/v1/coverage
find_entity · Find a wrestler, school or year
Resolve a name to the record's ids. Returns up to 10 candidates with id, kind (wrestler, program or tournament), label, a subtitle (school and years for a wrestler, individual titles and years for a school, weights and bouts for a year), individual titles for a wrestler, the year for a tournament, and the page url. A note says when the candidates are only near spellings. Same-name wrestlers are separate candidates: pick by school and years. Use the id in the other tools.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
query | string | yes | A name or part of one, e.g. "Dan Gable", "Oklahoma State", "1993". |
kind | wrestler | program | tournament | no | Restrict to one kind. |
Example: /api/v1/find_entity?query=Dan+Gable
leaders · Record lists
Ranked lists computed from the record. stat: falls, tech_falls, majors, bonus_wins (all four bonus types), fastest_falls, titles (individual championships), placements (top-8 finishes), team_points. scope: career (per wrestler, all years), tournament (per wrestler in one tournament), program (per school, all years), program_tournament (per school in one tournament), streak (consecutive bonus wins; bonus stats only). fastest_falls ignores scope. team_points needs scope tournament with one year in years, or program / program_tournament. Filters narrow by years (a list of tournament years), weight, program_id and round (a round code such as "1st" or its name such as "Final"). Ties share a rank, and a tie at the cut is kept whole up to twice limit (at least limit + 10 rows), so more rows than limit can come back; past that the note says how many more share the last rank. fastest_falls carries any documented correction to a listed bout in corrections. An unknown program_id is refused (404); resolve a school with find_entity. Every record carries id, the wrestler's or program's public id (for fastest_falls, the winner's). team_points by tournament follows the published standings: rank is the NCAA's published place, and schools the standings do not list come after every listed school with rank null and reconstructed: true.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
stat | falls | tech_falls | majors | bonus_wins | fastest_falls | titles | placements | team_points | yes | Which statistic. |
scope | career | tournament | program | program_tournament | streak | yes | How to group. |
years | list of integer | no | Tournament years to include; omit for all. |
weight | string | no | Weight class as the site prints it: a number such as "125" or "177", or "unlimited" (also written 450). "heavyweight" means each year's heaviest class: Unlimited, 275 or 285. |
program_id | string | no | Only this school's wrestlers, or the school itself for team_points (from find_entity). |
round | string | no | A round, by code ("1st", "Champ 4") or name ("Final", "Semifinal"). |
limit | integer ≥ 1, ≤ 50 | no | Rows to return, 1 to 50 (default 10). |
wrestler_card · A wrestler's record
One wrestler's championship record: schools, years, wins, losses, falls, individual titles, every year's weight, seed, finish and record, bonus wins by method (bonus_wins: falls, tech_falls, majors, superior_decisions and their total, counted as the leaders stats count them), and every bout with opponent, round, result, score and time. The card, each program, each opponent and each bout carry a url to their page. Ids come from find_entity. From the bout scoring record's first year, scoring gives the year lines (totals, per bout, per 7 minutes) and each bout carries its scoring counts or its status.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
wrestler_id | string | yes | A wr_ id from find_entity. |
Example: /api/v1/wrestler_card?wrestler_id=wr_bn7nbaqfavanz6dt
head_to_head · Two wrestlers' meetings
Every championship bout between two wrestlers, with year, weight, round, winner, result, score and time, and the match pages. Empty records with a note when they never met.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
wrestler_a | string | yes | A wr_ id. |
wrestler_b | string | yes | Another wr_ id. |
Example: /api/v1/head_to_head?wrestler_a=wr_bn7nbaqfavanz6dt&wrestler_b=wr_ifop7ukjkgzt36uz
tournament · One year's championships
A tournament year: every weight with its champion, placers 1-8, bout count, bracket evidence level (verified against the sheet, drafted, or drafted with gaps) and board url, plus the team standings as records of kind team: place is the NCAA's published place (tied when schools share it); schools the published standings do not list come after every listed school with place null, computed_rank and points calculated from the bouts, and reconstructed: true. In years whose team points cannot be calculated from the bouts the standings are as published, with a note; in years the NCAA did not score teams there are none, with a note. With weight, one weight class only. A calendar-gap year (one of coverage's missing_years) returns no weights and a note.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
year | integer | yes | Tournament year; coverage gives the first and last year and the calendar gaps. |
weight | string | no | Weight class as the site prints it: a number such as "125" or "177", or "unlimited" (also written 450). "heavyweight" (or "hwt") means that year's heaviest class: Unlimited, 275 or 285. |
Example: /api/v1/tournament?year=1993
program_year · A school in one tournament
One school's tournament in one year: entrants, wins, losses, falls, titles, All-Americans, team points and place (team.reconstructed is true when the NCAA does not list the school and its points and place are computed from the bouts), the champions and placers, and the full roster with each wrestler's weight, record, place or exit round. In a year the bout scoring record covers, scoring gives the school's line in every unit.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
program_id | string | yes | A pr_ id from find_entity. |
year | integer | yes | Tournament year; coverage gives the first and last year and the calendar gaps. |
Example: /api/v1/program_year?program_id=pr_m6nvcppn6ysyit5w&year=1994
program_summary · A school's championship history
One school across every tournament: totals (entrants, wins, losses, falls, individual titles, All-Americans), team championships and top-five finishes, and one row per year with entrants, record, titles, team points and place. team_place is the NCAA's published place; in a year scored from the bouts, when the published standings do not list the school, team_place is null, team_computed_rank is the place computed from the bouts, team_points are computed too, and team_reconstructed is true. team_points, team_place and team_computed_rank are null, and team_reconstructed false, when the school has no team figure that year. Links to the program and team pages. Years the bout scoring record covers carry the school's scoring line.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
program_id | string | yes | A pr_ id from find_entity. |
Example: /api/v1/program_summary?program_id=pr_m6nvcppn6ysyit5w
match_lookup · Bouts in a weight class
The bouts of one weight class in one year, each with round, winner, loser, result, score, time, seeds and match page, optionally narrowed to a round or to one wrestler. Up to 200 bouts. The evidence level of the weight's board comes with the rows.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
year | integer | yes | Tournament year; coverage gives the first and last year and the calendar gaps. |
weight | string | yes | Weight class as the site prints it: a number such as "125" or "177", or "unlimited" (also written 450). "heavyweight" (or "hwt") means that year's heaviest class: Unlimited, 275 or 285. |
round | string | no | A round, by code ("1st") or name ("Final"). |
wrestler_id | string | no | Only bouts involving this wrestler. |
Example: /api/v1/match_lookup?year=1993&weight=158&round=Final
bracket_evidence · How a bracket was checked
One weight class's bracket board and how far it is trusted: verified against the archived bracket sheet (with the sheet link), drafted from the bout record, or drafted with noted gaps (with the gap count and the notes), or no bracket drawing with the reason.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
year | integer | yes | Tournament year; coverage gives the first and last year and the calendar gaps. |
weight | string | yes | Weight class as the site prints it: a number such as "125" or "177", or "unlimited" (also written 450). "heavyweight" (or "hwt") means that year's heaviest class: Unlimited, 275 or 285. |
corrections_for · Corrections to a bout or a wrestler's bouts
The documented corrections applied to one bout, or to every bout of one wrestler, each with the reason and the evidence link. Give match_id or wrestler_id, not both.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
match_id | string | no | An mt_ id from match_lookup or wrestler_card. |
wrestler_id | string | no | A wr_ id from find_entity. |
Example: /api/v1/corrections_for?match_id=mt_4jxhloyctplgu57g
scoring_leaders · Scoring leaders
Ranked lists from the bout scoring record, as the /scoring/ pages show them. category is one of the scoring categories (takedowns-allowed and points-allowed rank fewest first). list: career (each wrestler summed over the championships wrestled in the span, the default) or tournament (each wrestler at one championship). from and to bound the span by championship year; omitted, the span is the whole scoring record (coverage's scoring section gives it), and from equal to to is one year's board. unit: totals, per_bout or per_7 (per 7 minutes of mat time); per_qualifier is a team unit (scoring_teams). Rates list wrestlers with three bouts per championship wrestled, and the note says how many are left out. Ties share a rank, and a tie at the cut is kept whole up to twice limit (at least limit + 10 rows). A year outside the scoring record is refused (404), and from after to (400). Every record carries the wrestler's public id, the program or programs, the value as a number and as printed, and the wrestler's page.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
category | takedowns | takedowns-allowed | escapes | reversals | near-fall | stalling-drawn | riding-time | points | points-allowed | yes | The scoring category to rank. |
list | career | tournament | no | career (the default) sums each wrestler over the span; tournament lists each wrestler at one championship. |
from | integer | no | A championship year; coverage's scoring section gives the scoring record's first and last year. |
to | integer | no | A championship year; coverage's scoring section gives the scoring record's first and last year. |
unit | totals | per_bout | per_7 | no | totals (the default), per_bout or per_7 (per 7 minutes of mat time). |
limit | integer ≥ 1, ≤ 50 | no | Rows to return, 1 to 50 (default 10). |
Example: /api/v1/scoring_leaders?category=takedowns&limit=10
scoring_teams · Team scoring comparison
How schools compared on the bout scoring record, one championship or a span, as /scoring/<year>/teams/ and /scoring/all/teams/ show it: each program's qualifiers, bouts, mat time and the seven scoring pairs (for and against), in one unit: totals, per_qualifier, per_bout or per_7. Ordered as the page orders them: by points scored in the chosen unit, most first, ties in the Totals order. from and to as in scoring_leaders. Up to limit programs (default 25); total gives the full count.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
from | integer | no | A championship year; coverage's scoring section gives the scoring record's first and last year. |
to | integer | no | A championship year; coverage's scoring section gives the scoring record's first and last year. |
unit | totals | per_qualifier | per_bout | per_7 | no | totals (the default), per_qualifier (per program qualifier), per_bout or per_7 (per 7 minutes of mat time). |
limit | integer ≥ 1, ≤ 100 | no | Programs to return, 1 to 100 (default 25). |
bout_sheet · A bout's scoring sheet
One bout's scoring sheet from the bout scoring record, as its match page shows it: the box score by period, the counts for each side, every scored action with its clock and the running score, the riding-time readings, the status line naming the source bout and whether its score agrees with the record, and a banner when the sheet needs review. One match_id per call. A bout the scoring record does not hold returns no records and a note.
| Parameter | Type | Required | Meaning |
|---|---|---|---|
match_id | string | yes | An mt_ id from match_lookup or wrestler_card. |
Terms
Use of the record and this service is under the terms of use: free for personal, fan, journalistic and educational use; commercial use, bulk copying and training on the articles need permission. Please cite March Matness and the release id shown in every response. No warranty: brackets marked drafted or with gaps are exactly that.
Server marchmatness 1.1.1. Data release pub_v1_75169e972871bad371d3a666. How the record is made: Methods. The corrections log: Corrections.