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), drafted or drafted_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.

ParameterTypeRequiredMeaning
querystringyesA name or part of one, e.g. "Dan Gable", "Oklahoma State", "1993".
kindwrestler | program | tournamentnoRestrict 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.

ParameterTypeRequiredMeaning
statfalls | tech_falls | majors | bonus_wins | fastest_falls | titles | placements | team_pointsyesWhich statistic.
scopecareer | tournament | program | program_tournament | streakyesHow to group.
yearslist of integernoTournament years to include; omit for all.
weightstringnoWeight 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_idstringnoOnly this school's wrestlers, or the school itself for team_points (from find_entity).
roundstringnoA round, by code ("1st", "Champ 4") or name ("Final", "Semifinal").
limitinteger ≥ 1, ≤ 50noRows to return, 1 to 50 (default 10).

Example: /api/v1/leaders?stat=falls&scope=career&limit=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.

ParameterTypeRequiredMeaning
wrestler_idstringyesA 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.

ParameterTypeRequiredMeaning
wrestler_astringyesA wr_ id.
wrestler_bstringyesAnother 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.

ParameterTypeRequiredMeaning
yearintegeryesTournament year; coverage gives the first and last year and the calendar gaps.
weightstringnoWeight 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.

ParameterTypeRequiredMeaning
program_idstringyesA pr_ id from find_entity.
yearintegeryesTournament 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.

ParameterTypeRequiredMeaning
program_idstringyesA 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.

ParameterTypeRequiredMeaning
yearintegeryesTournament year; coverage gives the first and last year and the calendar gaps.
weightstringyesWeight 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.
roundstringnoA round, by code ("1st") or name ("Final").
wrestler_idstringnoOnly 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.

ParameterTypeRequiredMeaning
yearintegeryesTournament year; coverage gives the first and last year and the calendar gaps.
weightstringyesWeight 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/bracket_evidence?year=1937&weight=126

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.

ParameterTypeRequiredMeaning
match_idstringnoAn mt_ id from match_lookup or wrestler_card.
wrestler_idstringnoA 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.

ParameterTypeRequiredMeaning
categorytakedowns | takedowns-allowed | escapes | reversals | near-fall | stalling-drawn | riding-time | points | points-allowedyesThe scoring category to rank.
listcareer | tournamentnocareer (the default) sums each wrestler over the span; tournament lists each wrestler at one championship.
fromintegernoA championship year; coverage's scoring section gives the scoring record's first and last year.
tointegernoA championship year; coverage's scoring section gives the scoring record's first and last year.
unittotals | per_bout | per_7nototals (the default), per_bout or per_7 (per 7 minutes of mat time).
limitinteger ≥ 1, ≤ 50noRows 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.

ParameterTypeRequiredMeaning
fromintegernoA championship year; coverage's scoring section gives the scoring record's first and last year.
tointegernoA championship year; coverage's scoring section gives the scoring record's first and last year.
unittotals | per_qualifier | per_bout | per_7nototals (the default), per_qualifier (per program qualifier), per_bout or per_7 (per 7 minutes of mat time).
limitinteger ≥ 1, ≤ 100noPrograms to return, 1 to 100 (default 25).

Example: /api/v1/scoring_teams?from=2026&to=2026

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.

ParameterTypeRequiredMeaning
match_idstringyesAn mt_ id from match_lookup or wrestler_card.

Example: /api/v1/bout_sheet?match_id=mt_e5dlahlltibqhibe

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.