Pro Data

Integra i numeri del modello nel tuo codice in pochi minuti

156,421

data point

13,507 record distribuiti su 13 dataset, fino a 148 campi ciascuno: ogni valore generato dal modello o curato, e ricostruito dalle fonti ogni giorno. Consultabili qui gratuitamente; scaricali tutti via API con una chiave gratuita.

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

Tutte le probabilità per le 48 nazionali e le 104 partite, rose previste, carriere dei giocatori stagione per stagione, risultati recenti e lo storico che alimenta il modello: in JSON o CSV, oppure come strumento MCP che il tuo assistente IA può interrogare. Pensato per ricercatori, giocatori di fantasy, giornalisti e team di analisi che vogliono l'output del modello in una pipeline, non in una pagina. Prova un endpoint live qui sotto con un solo comando, senza registrazione.

Disponibile ora in accesso anticipato· Download zip massivo + slicing storico disponibili · Notebook riproducibili e output WC2018/WC2022 in arrivo prima del calcio d'inizio

Quickstart

Provalo subito, senza registrazione

Esegui questo comando. Restituisce le cinque vincitrici più probabili del torneo direttamente dal modello live: nessun account, nessuna chiave API. Aggiungi ?format=csv per la variante tabulare.

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

Vuoi il quadro completo: tutte le 48 squadre, ogni partita, giocatori, rose? Accedi, genera una chiave API (10 chiamate gratuite per iniziare), e passala come token Bearer su qualsiasi endpoint:

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

Provalo gratis: 10 chiamate

Accedi e genera una chiave API 10 chiamate programmatiche gratuite, condivise tra questi endpoint REST e il server MCP ospitato: sufficienti per collegare i dati a un notebook o a un assistente e vederli funzionare. L'handshake MCP non conta; solo le chiamate dati contano. Il Pro Pass non ha limiti.

13 dataset, ciascuno raggiungibile sotto /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.

    Restituisce · 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.

    Restituisce · 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.

    Restituisce · 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.

    Restituisce · 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.

    Restituisce · 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.

    Restituisce · 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.

    Restituisce · 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.

    Restituisce · 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.

    Restituisce · 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.

    Restituisce · 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.

    Restituisce · 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.

    Restituisce · 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.

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

Come accedere

Ogni dataset qui sopra richiede autenticazione, tranne il /api/v1/sample/ teaser pubblico. Autenticati con una chiave API Bearer o un cookie di sessione Pro; tutto il resto su come estrarre i dati si trova qui sotto.

  • CSV variant on every endpoint

    Attivo

    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

    Attivo

    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)

    Attivo

    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

    Attivo

    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

    Attivo

    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

    Attivo

    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

    In arrivo

    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

    In arrivo

    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.

Esempi

Tre cose che puoi fare oggi

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

Costruisci sui dati

Scarica lo snapshot, addestra il tuo modello

Il download zip massivo contiene tutto ciò che il sito pubblico visualizza: previsioni, partite, rose previste, testa a testa, storico dei grandi tornei internazionali. Tre ricette per caricare i dati in un notebook e analizzarli in autonomia.

1 · Carica lo snapshot in pandas

Scarica il file zip, estrailo, poi leggi ogni file come DataFrame. La busta previsionale contiene una riga per squadra: espandila con 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 · Addestra un modello base per la probabilità di vittoria

Costruisci il tuo modello V/P/S a partire dalle rose previste e dalla previsione per squadra. I rating compositi + una somma della forza della rosa sono un set di feature ragionevole. Confronta i risultati con le probabilità pubblicate per vedere dove il tuo modello concorda e dove diverge.

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 · Calibra il tuo modello rispetto alla previsione pubblicata

Una volta che il tuo modello produce probabilità di vittoria del torneo per squadra, confrontale con le nostre tramite Brier score e un grafico di affidabilità: la stessa metrica che usiamo nella documentazione metodologica.

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"]))

La licenza del Pass è per uso di ricerca: addestra, testa, pubblica i tuoi risultati. L'attribuzione a la documentazione metodologica è gradita ma non obbligatoria.

Agenti

Collega Claude, Cursor o qualsiasi client MCP

Un server Model Context Protocol ospitato su /api/mcp espone ogni endpoint come strumento MCP, così puoi interrogare il modello live direttamente nel tuo assistente: nessuna installazione, nessun codice di collante. Autenticati con una chiave API qualsiasi account registrato può generarne una, e le tue prime 10 chiamate sono gratuite.

Aggiungilo a 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

Ottieni il Pro Pass per accesso illimitato

Ogni account riceve 10 chiamate gratuite per provare API + MCP. Il Pro Pass costa $35 una tantum per l'accesso illimitato: tutto lo Standard Pass più gli endpoint dati, il download zip massivo e lo slicing storico dei tornei. Notebook riproducibili in arrivo prima del calcio d'inizio. Hai già lo Standard Pass? Upgrade a $20.

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