Pro Data

Integra los números del modelo en tu código en minutos

156,421

puntos de datos

13,507 registros en 13 conjuntos de datos, con hasta 148 campos cada uno: cada valor generado por el modelo o curado, y reconstruido desde el origen a diario. Explóralos gratis aquí; extráelos todos vía la API con una clave gratuita.

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

Todas las probabilidades de las 48 selecciones y los 104 partidos, plantillas proyectadas, carreras de jugadores temporada a temporada, resultados recientes y el registro histórico que alimenta el modelo: en JSON o CSV, o como herramienta MCP que tu asistente puede invocar. Pensado para investigadores, jugadores de fantasy, periodistas y equipos de analítica que quieren la salida del modelo en su flujo de trabajo, no en una página. Prueba un endpoint en vivo con un solo comando, sin registrarte.

Disponible en acceso anticipado· Descarga masiva en zip + cortes históricos disponibles · Notebooks reproducibles y datos retroactivos de WC2018/WC2022 próximamente

Inicio rápido

Pruébalo ahora: sin registro

Ejecuta esto. Devuelve los cinco equipos con mayor probabilidad de ganar el torneo directamente desde el modelo en vivo: sin cuenta, sin clave API. Añade ?format=csv para la variante en tabla.

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

¿Quieres el panorama completo: las 48 selecciones, todos los partidos, jugadores, plantillas? Inicia sesión, genera una clave API (10 llamadas gratuitas para empezar) y pásala como token Bearer en cualquier endpoint:

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

Pruébalo gratis: 10 llamadas

Inicia sesión y genera una clave API 10 llamadas programáticas gratuitas, compartidas entre estos endpoints REST y el servidor MCP alojado: suficiente para conectar los datos a un notebook o un asistente y ver cómo funciona. El handshake MCP no cuenta; solo cuentan las llamadas a datos. El Pro Pass no tiene límite.

13 conjuntos de datos, cada uno accesible en /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.

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

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

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

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

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

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

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

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

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

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

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

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

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

Cómo se accede

Todos los conjuntos de datos están restringidos excepto el /api/v1/sample/ de muestra pública. Autentícate con una clave API Bearer o una cookie de sesión Pro; todo lo demás sobre cómo obtener los datos está más abajo.

  • CSV variant on every endpoint

    Activo

    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

    Activo

    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)

    Activo

    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

    Activo

    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

    Activo

    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

    Activo

    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

    Próximamente

    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

    Próximamente

    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.

Ejemplos

Tres cosas que puedes hacer hoy

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

Construye sobre los datos

Descarga la instantánea, ajusta tu propio modelo

La descarga masiva en zip incluye todo lo que el sitio público muestra: pronóstico, partidos, plantillas predichas, enfrentamientos directos, historial de torneos internacionales mayores. Tres recetas para cargarlo en un notebook y ejecutar tu propio análisis.

1 · Carga la instantánea en pandas

Descarga el zip, extráelo una vez y lee cada archivo como un DataFrame. El sobre del pronóstico anida una fila por equipo: aplana 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 · Ajusta un modelo base de probabilidad de victoria

Construye tu propio modelo H/D/A a partir de las plantillas predichas y el pronóstico por equipo. Las valoraciones compuestas más una suma de fuerza de plantilla son un conjunto razonable de características iniciales; compara con las probabilidades publicadas para ver dónde coincide y dónde difiere tu modelo.

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 tu modelo contra el pronóstico publicado

Una vez que tu modelo produzca probabilidades de victoria a nivel de torneo, compara con las nuestras mediante Brier score y un diagrama de fiabilidad: la misma métrica que usamos en los documentos de metodología.

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 licencia del Pass es para uso de investigación: ajustar, hacer backtests, publicar tus hallazgos. La atribución a el documento de metodología es bienvenida pero no obligatoria.

Agentes

Conecta Claude, Cursor o cualquier cliente MCP

Un servidor Model Context Protocol alojado en /api/mcp expone cada endpoint como una herramienta MCP, para que puedas hacer consultas contra el modelo en vivo directamente desde tu asistente: sin instalación, sin código adicional. Autentícate con una clave API cualquier cuenta registrada puede generar una, y tus primeras 10 llamadas son gratuitas.

Añádelo 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

Consigue el Pro Pass para acceso sin límite

Cada cuenta recibe 10 llamadas gratuitas para probar la API y MCP. El Pro Pass es una compra única de 35 $ para acceso sin límite: todo lo incluido en el Standard Pass más los endpoints de datos, la descarga masiva en zip y el corte histórico de torneos. Los notebooks reproducibles estarán disponibles antes del inicio. ¿Ya tienes el Standard Pass? Mejora por 20 $.

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