Pro Data

Gebruik de modelcijfers in je eigen code binnen enkele minuten

156,421

datapunten

13,507 records verdeeld over 13 datasets, met elk tot 148 velden: elke waarde modelgegenereerd of gecureerd, en dagelijks opnieuw opgebouwd uit de brondata. Gratis te verkennen op deze pagina; haal alles binnen via de API met een gratis sleutel.

48 nations1,215 players8,964 player-seasons958 match results

Alle waarschijnlijkheden voor de 48 landen en 104 wedstrijden, verwachte selecties, carrierecijfers per speler per seizoen, recente resultaten en het historische bestand dat het model voedt: als JSON of CSV, of als MCP-tool die je assistent kan aanroepen. Gebouwd voor onderzoekers, fantasy-spelers, journalisten en analytische teams die de modeluitvoer in een datapipeline willen in plaats van op een pagina. Probeer hieronder een live endpoint met een commando: geen registratie nodig.

Nu live in early access· Bulk-zip en historische selectie live · Reproduceerbare notebooks en teruggevulde WC2018/WC2022-uitvoer verschijnen voor de aftrap

Snel starten

Probeer het nu: geen registratie

Voer dit uit. Het retourneert de vijf meest waarschijnlijke toernooiwinnaars rechtstreeks uit het live model: geen account, geen API-sleutel. Voeg ?format=csv toe voor de tabelvariant.

curl "https://onthepitch.now/api/v1/sample/"

Het volledige beeld: alle 48 teams, elke wedstrijd, spelers, selecties? Log in, genereer een API-sleutel (10 gratis aanroepen om mee te beginnen), en geef deze als Bearer-token mee bij elk endpoint:

curl -H "Authorization: Bearer otp_live_…" \
  "https://onthepitch.now/api/v1/forecast/"

Probeer het gratis: 10 aanroepen

Log in en genereer een API-sleutel 10 gratis programmatische aanroepen, gedeeld over deze REST-endpoints en de gehoste MCP-server: genoeg om de data aan een notebook of assistent te koppelen en het werkend te zien. De MCP-handshake telt niet mee; alleen de data-aanroepen tellen. De Pro Pass is ongelimiteerd.

13 datasets, elk beschikbaar onder /api/v1/ as JSON or — with ?format=csv — a flat table. /api/v1/sample/ is public; the rest are gated (a Bearer API key or a Pro session cookie). Below is exactly what each one returns. Full schemas live in the interactive reference (OpenAPI 3.0 spec at /api/v1/openapi.json).

  • Tournament forecast

    48 nations

    /api/v1/forecast/

    Each nation's probability of lifting the trophy and of reaching every stage.

    Retourneert · 17 fields Tournament-win probability · advance from group · reach R16 / QF / SF / final · win-group probability · P(finish 1st–4th in group) · confederation · FIFA rank · group

  • Team forecast trajectory

    480 snapshots

    /api/v1/team-history/

    How each team's forecast has moved over time — one row per daily build.

    Retourneert · 7 fields Team · build timestamp · Elo rating · tournament-win probability · 90% CI band (low & high)

  • Match forecast

    104 matches

    /api/v1/fixtures/

    Win / draw / win plus match-event probabilities for every fixture in the bracket.

    Retourneert · 25 fields P(home / draw / away) · expected goals each side · over 0.5 / 1.5 / 2.5 / 3.5 goals · both teams to score · clean-sheet probability each side · kickoff, venue & city · stage & group

  • Predicted squads

    1,246 players

    /api/v1/predicted-squads/

    Projected 26-man squad for every nation, one row per player.

    Retourneert · 13 fields Starting-XI vs bench slot · position · jersey number · captain flag · international caps & goals · composite rating · rank within position

  • Player index

    1,215 players

    /api/v1/players/

    Career profile for every player in the modelling pool.

    Retourneert · 9 fields Name · nation · position · current club & league · birth year · career goals & assists

  • Player season history

    8,964 player-seasons

    /api/v1/player-history/

    Season-by-season career record for every player — one row per player-season.

    Retourneert · 12 fields Player · season · team & league · position · matches & minutes · goals & assists · xG & xAG

  • Anytime scorer

    50 ranked scorers

    /api/v1/anytime-scorer/

    Tournament scoring probabilities for the most likely goalscorers.

    Retourneert · 15 fields P(scores ≥1 in the tournament) · expected matches played · per-stage scoring probability (group → final) · rank

  • Recent match results

    958 matches

    /api/v1/results/

    Every team's recent senior-international results — last 24 months, their POV.

    Retourneert · 10 fields Date · opponent · home / away / neutral · goals for & against · result · competition

  • Head-to-head records

    144 pairings

    /api/v1/h2h/

    All-time record between each nation and its group-stage opponents.

    Retourneert · 12 fields Meetings · wins / draws / losses · last-meeting date, score, tournament & winner

  • Major-tournament history

    106 tournament rows

    /api/v1/majors/

    Each nation's most-recent run at every major, with squad and coach continuity.

    Retourneert · 15 fields Tournament & year · matches · W-D-L · goals for / against · bracket finish · coach (name, year appointed, still in charge) · squad-pool continuity · ?tournament=&year= slicing

  • Group schedule

    144 team-matchdays

    /api/v1/schedule/

    Every nation's three group-stage fixtures.

    Retourneert · 7 fields Matchday · date · opponent · host city & country

  • Team list

    48 nations

    /api/v1/teams/

    The tournament field — the lookup table to join everything else on team_id.

    Retourneert · 6 fields team_id · name · confederation · FIFA rank · host flag · group

  • Bulk snapshot

    One zip · ~3–5 MB

    /api/v1/bulk/snapshot/

    Every source file the site renders from, in a single download, with checksums.

    Retourneert 11 source JSONs + manifest (size, sha256 & built_at per file) · includes the deep fixture-enrichment blobs the per-endpoint variants flatten away

Hoe je toegang krijgt

Elke dataset hierboven is afgeschermd, behalve de openbare /api/v1/sample/ teaser. Authenticeer met een Bearer API-sleutel of een Pro-sessiecookie; al het andere over het ophalen van de data staat hieronder.

  • CSV variant on every endpoint

    Live

    Pass ?format=csv on any endpoint for a tabular response, RFC-4180 quoted, suitable for spreadsheet or notebook import. All row types are flat — no nested JSON in CSV cells.

  • Daily refresh + provenance metadata

    Live

    Every response carries the upstream snapshot's built_at timestamp in the envelope (JSON) or X-OnThePitch-Generated-At header (CSV). Pipeline refits daily; cache is private 1h.

  • Bulk snapshot download (zip)

    Live

    GET /api/v1/bulk/snapshot/ returns one DEFLATE-compressed archive with the 11 source JSONs + a manifest (per-file size + sha256 + built_at). Includes the deep fixture enrichment blobs the per-endpoint variants flatten away. ~3–5 MB on the wire.

  • Historical tournament slicing

    Live

    Pass ?tournament=&year= on /api/v1/majors/ to extract a single tournament-year — e.g. every WC2026 team's WC2022 row in one call. The dataset stores each team's most-recent appearance per tournament, so WC2022 covers most qualifiers; WC2018 only covers teams that haven't been at a WC since.

  • Long-lived API keys

    Live

    Generate a Bearer key at /account/api-key/ and pass it as Authorization: Bearer otp_live_… on any endpoint — no cookie juggling for headless / CI / scheduled jobs. One key per account; reset it any time if it leaks.

  • MCP server — connect Claude / Cursor

    Live

    A hosted Model Context Protocol server at /api/mcp exposes every endpoint as an MCP tool. Add it to Claude Code, Claude Desktop, or Cursor with one command and ask questions against the live model — no install, no glue code.

  • Backfilled model outputs — WC2018, WC2022

    Binnenkort beschikbaar

    Pre-tournament model probabilities for the last two World Cups, replayed against frozen inputs so you can backtest the model end-to-end against known outcomes. Requires re-pulling historical FBref / Wikipedia snapshots; tracked as a separate research initiative.

  • Reproducible notebooks

    Binnenkort beschikbaar

    Jupyter notebooks that fit the model end-to-end from the public data files and reproduce the website's outputs. Run locally with the published datasets.

Voorbeelden

Drie dingen die je vandaag kunt doen

Set OTP_KEY to the API key you generate here (export OTP_KEY=otp_live_…) — one token, no cookie juggling, works the same from a shell, a notebook, or a scheduled job. (Signed in already? A Pro session cookie works too, but the key is the friendlier path.)

Full forecast as CSV

curl -H "Authorization: Bearer $OTP_KEY" \
  "https://onthepitch.now/api/v1/forecast/?format=csv" \
  -o forecast.csv

WC2022 historical slice

curl -H "Authorization: Bearer $OTP_KEY" \
  "https://onthepitch.now/api/v1/majors/?tournament=FIFA%20World%20Cup&year=2022" \
  -o wc2022.json

Bulk snapshot as a single zip

curl -H "Authorization: Bearer $OTP_KEY" \
  "https://onthepitch.now/api/v1/bulk/snapshot/" \
  -o onthepitch-snapshot-v1.zip

Bouw verder op de data

Haal de snapshot op, fit je eigen model

De bulk-zip bevat alles waaruit de publieke site rendert: voorspelling, wedstrijden, verwachte selecties, onderlinge confrontaties, interlandgeschiedenis van grote toernooien. Drie startrecepten om het in een notebook te laden en je eigen analyse erop los te laten.

1 · Laad de snapshot in pandas

Haal de zip op, pak hem eenmaal uit en lees elk bestand als een DataFrame. De voorspellingsenvelop nestelt een rij per team: plat maken met pd.json_normalize.

import io, json, os, zipfile, requests, pandas as pd

z = zipfile.ZipFile(io.BytesIO(requests.get(
    "https://onthepitch.now/api/v1/bulk/snapshot/",
    headers={"Authorization": f"Bearer {os.environ['OTP_KEY']}"},
).content))

forecast = pd.json_normalize(
    json.loads(z.read("data.json"))["teams"],
)
fixtures = pd.json_normalize(
    json.loads(z.read("fixtures.json"))["fixtures"],
)
squads = pd.json_normalize(
    json.loads(z.read("predicted_squads.json"))["squads"],
    record_path="players",
    meta=["team_id"],
)

2 · Fit een basismodel voor winstwaarschijnlijkheid

Bouw je eigen W/G/V-model met de verwachte selecties en de teamvoorspelling. Samengestelde beoordelingen plus een selectiesterktesomatie zijn een redelijke starterset aan features; vergelijk met de gepubliceerde waarschijnlijkheden om te zien waar je model overeenkomt en afwijkt.

from sklearn.linear_model import LogisticRegression

# Aggregate predicted-XI composite to a team strength score.
xi = squads.query("slot == 'xi'")
strength = xi.groupby("team_id")["composite"].sum().rename("strength")

# Join strength onto fixtures and fit a logistic on prior tournament
# results (intl_majors.json has W/D/L from previous WCs + qualifiers).
intl = pd.json_normalize(
    json.loads(z.read("intl_majors.json"))["rows"],
)
features = intl.merge(strength, left_on="team_id", right_index=True)
X = features[["strength", "fifa_rank"]]
y = (features["finish"] >= 9).astype(int)  # 1 = quarter-final or better

clf = LogisticRegression().fit(X, y)
print(clf.coef_)

3 · Kalibreer je model tegen de gepubliceerde voorspelling

Zodra je model toernooiwinstwaarschijnlijkheden per team produceert, vergelijk het met het onze via Brier score en een betrouwbaarheidsdiagram: dezelfde maatstaf die we gebruiken in de methodologiedocumenten.

from sklearn.metrics import brier_score_loss

merged = forecast.merge(
    pd.Series(my_probs, name="my_p_win"),
    left_on="team_id", right_index=True,
)
print("OnThePitch Brier:", brier_score_loss(merged["won"], merged["p_win"]))
print("Yours        Brier:", brier_score_loss(merged["won"], merged["my_p_win"]))

De Pass-licentie is voor onderzoeksgebruik: fitten, backtesten, bevindingen publiceren. Bronvermelding naar het methodologiedocument wordt gewaardeerd maar is niet verplicht.

Agents

Verbind Claude, Cursor of elke MCP-client

Een gehoste Model Context Protocol -server op /api/mcp stelt elk endpoint beschikbaar als MCP-tool, zodat je vragen kunt stellen aan het live model direct in je assistent: geen installatie, geen tussencode. Authenticeer met een API-sleutel elk ingelogd account kan er een genereren, en je eerste 10 tool-aanroepen zijn gratis.

Toevoegen aan Claude Code

claude mcp add --transport http onthepitch \
  https://onthepitch.now/api/mcp \
  --header "Authorization: Bearer otp_live_…"

Then prompt naturally — “which team is most likely to win the group?”, “compare the projected XIs for France and England”, “how did Brazil do at WC2022?” — and the assistant calls the matching tool (get_forecast, get_predicted_squads, get_majors) and answers from the live data.

Pro Pass

Neem de Pro Pass voor ongelimiteerde toegang

Elk account krijgt 10 gratis aanroepen om de API en MCP te proberen. De Pro Pass is een eenmalige aankoop van $35 voor ongelimiteerde toegang: alles in de Standard Pass plus de data-endpoints, bulk-zipdownload en historische toernooiselectie. Reproduceerbare notebooks verschijnen voor de aftrap. Heb je al de Standard Pass? Upgrade voor $20.

24h self-service refund·No subscription, no auto-renewal·Access through 31 Dec 2026. See refund policy.