Put it on the record
Anyone can add an incident or fix one. The whole dataset lives in a public GitHub repository, so every change is reviewed, attributed and permanently in the history.
Fill in the form
No code needed. Open a guided GitHub issue with the match, the call, the officials and a source link. A maintainer turns it into a data file.
Submit an incident →02Open a pull request
Add a JSON file to data/incidents/<league>/<season>/. CI checks it against the schema and confirms every club and official exists before merging.
Correct the record
When the KMI panel rules on an incident, update its verdict from media-consensus tokmi-panel and add the vote. Corrections are as valuable as new entries.
House rules
- Source everything. Every incident needs at least one link to reputable reporting or an official statement.
- Judge the call, not the person. Describe what happened and cite who ruled it wrong. No speculation about motives.
- Prefer authority. A KMI panel ruling or referees'-body statement outranks punditry. Mark provisional verdicts
media-consensus. - Mark paraphrases. A quote must be word for word. Otherwise set
"paraphrased": true. - Log correct calls too. A leaderboard with only mistakes can't show who is actually good.
An incident file
{
"id": "mun-mci-haaland-enzo-offside",
"league": "premier-league",
"season": "2026-27",
"date": "2026-09-13",
"home": "man-utd",
"away": "man-city",
"score": "0-1",
"minute": "60'",
"type": "offside",
"title": "Haaland derby winner stands despite Enzo Fernández offside",
"summary": "What happened, in plain words…",
"onField": "No goal: offside flag",
"varOutcome": "overturned",
"verdictSource": "official-statement",
"calls": { "referee": "correct", "var": "error" },
"officials": {
"referee": "michael-oliver",
"var": "matt-donohue",
"avar": "blake-antrobus"
},
"benefited": "man-city",
"harmed": "man-utd",
"impact": "match-deciding",
"controversy": 5,
"sources": [
{ "title": "…", "publisher": "ESPN", "url": "https://…", "kind": "official" }
]
}Full field reference in CONTRIBUTING.md. Runnpm run validate locally before you push.
Next leagues
The schema already supports multiple leagues. La Liga, Serie A and the Bundesliga open once each has a few maintainers. Want to lead one? Say hello on GitHub. See how verdicts are weighed on the methodology page.