j:jurat

Sports scores and settlement results with proof

Normalized scoreboards and final results for 24 leagues, each final available with a notarized snapshot of the source: settlement-grade sports data for prediction market agents.

Endpoints

GET /v1/sports (free) lists supported leagues. GET /v1/scores?league=mlb&date=YYYYMMDD ($0.01) returns the normalized scoreboard. GET /v1/result?league=mlb&event=<id>&attest=true ($0.02) returns one final result with a notarized snapshot of the source bundled.

Supported leagues

slugleague
nflNFL
nbaNBA
wnbaWNBA
mlbMLB
nhlNHL
eplEnglish Premier League
uclUEFA Champions League
laligaSpanish LaLiga
bundesligaGerman Bundesliga
serieaItalian Serie A
ligue1French Ligue 1
mlsMLS
pslSouth African Premiership
ufcUFC
urcUnited Rugby Championship
rugbychampionshipThe Rugby Championship
superrugbySuper Rugby Pacific
sixnationsSix Nations
top14French Top 14
champscupEuropean Rugby Champions Cup
premrugbyEnglish Premiership Rugby
mlrMajor League Rugby
iplIndian Premier League
bblBig Bash League

The settlement rule

The result endpoint refuses to attest an event that is not final: attest=true on a live or scheduled event returns 409 not_final and no attestation is created. An agent can wire jurat directly into settlement logic without writing its own is-it-over guard. Completion semantics: the upstream completed flag when present; for cricket, which omits it, a final is state post. Cricket scores are strings ("161/5 (18/20 ov, target 156)") and are preserved verbatim; other sports return numbers.

Every event, shape

{
  "event_id": "401816171",
  "short_name": "CHW @ TOR",
  "start": "2026-07-19T17:07:00Z",
  "state": "post",
  "completed": true,
  "home": { "team": "Toronto Blue Jays", "abbrev": "TOR", "score": 0, "winner": false },
  "away": { "team": "Chicago White Sox", "abbrev": "CHW", "score": 3, "winner": true },
  "venue": "Rogers Centre"
}

Watching a whole league day

GET /v1/watch/league?league=mlb&webhook=https://... ($0.10) watches every event in a league for the day: each final is delivered to your webhook as it lands, with one shared source attestation per check batch, and the watch closes itself when the slate completes. For a single fixture, use a watcher in result:<league>:<event_id> mode.

Scores are facts and facts are not copyrightable (NBA v. Motorola, 2d Cir. 1997). jurat serves facts plus its own attestations of what a source said.