FIFA World Cup 2026

Eight WC2026-relevant endpoints, tournament progression probabilities, per-match predictions, the 48 qualified nations, team form, team stats, against-the-spread records, single-match predictions, and live group standings. The 2026 edition is the first 48-team World Cup: 104 matches across the US, Canada, and Mexico, running June 11 – July 19, 2026.

All endpoints below are on the standard gateway at api.bigballsdata.com and require an API key in the Authorization: Bearer … header.

Match schedule

Live

GET /v1/wc2026/matches

The full 110-match schedule (72 group-stage plus 38 knockout). This is the canonical response contract for the endpoint. data is an envelope, { total, matches }, not a bare array; the match array is data.matches and data.total equals data.matches.length (there is no pagination, filter with ?group=A-L and ?status=upcoming|live|final). The 38 knockout rows are placeholders until the group stage resolves: home_team and away_team are always objects, never null, but their name, id, flag_url, and elo_rating are null and a feeder sub-object plus a top-level bracket describe the slot (for example "Winner Group A"). Detect a placeholder with home_team.name === null (equivalently bracket !== null), and null-guard name, flag_url, and odds before you render. The bracket.round value is one of R32, R16, QF, SF, THIRD (the third-place playoff), or FINAL, read from the authoritative FIFA stage on the match rather than inferred from the kickoff date. A cold-cache recompute can take a few seconds, so set a client timeout of at least 60 seconds.

Example responsejson
{
  "data": {
    "total": 110,
    "matches": [
      {
        "match_id": "a6eeb48c-...",
        "group": "A",
        "scheduled_at": "2026-06-11T19:00:00.000Z",
        "venue": "Estadio Azteca, Mexico City",
        "status": "final",
        "home_team": { "id": "bb_team_...", "name": "Mexico", "flag_url": "https://...", "elo_rating": 1812, "score": 2 },
        "away_team": { "id": "bb_team_...", "name": "South Africa", "flag_url": "https://...", "elo_rating": 1690, "score": 0 },
        "odds": { "home_ml": -660, "draw": 685, "away_ml": 3015 },
        "bracket": null
      },
      {
        "match_id": "0b3f1c52-...",
        "group": null,
        "scheduled_at": "2026-06-28T19:00:00.000Z",
        "venue": "MetLife Stadium, East Rutherford",
        "status": "upcoming",
        "home_team": { "id": null, "name": null, "flag_url": null, "elo_rating": null, "score": null, "feeder": { "source": "group_winner", "group": "A", "description": "Winner Group A" } },
        "away_team": { "id": null, "name": null, "flag_url": null, "elo_rating": null, "score": null, "feeder": { "source": "group_runner_up", "group": "B", "description": "Runner-up Group B" } },
        "odds": null,
        "bracket": { "round": "R32", "home_feeder": { "source": "group_winner", "group": "A", "description": "Winner Group A" }, "away_feeder": { "source": "group_runner_up", "group": "B", "description": "Runner-up Group B" } }
      }
    ]
  },
  "meta": { "cached": true, "cache_age_ms": 286318 }
}

Tournament progression

Live

GET /v1/formulas/wc2026/progression

Elo Monte Carlo simulation across the bracket. Returns each nation's probability of advancing out of group, reaching R16, QF, SF, final, and winning the tournament, recomputed after every result.

Example responsejson
{
  "data": [
    {
      "team_id": "bb_team_brazil",
      "name": "Brazil",
      "group": "A",
      "elo": 2087.4,
      "group_advance_prob": 0.91,
      "r16_prob": 0.91,
      "qf_prob": 0.62,
      "sf_prob": 0.34,
      "final_prob": 0.17,
      "win_prob": 0.09
    }
    /* + 47 more teams, sorted DESC by win_prob */
  ],
  "meta": { "iterations": 10000, "cached": false, "cache_age_ms": 0 }
}

Match predictions

LiveSolo+

GET /v1/predictions?tournament=wc2026

Per-match Elo-based win / draw / loss probabilities for all 72 group stage matches; the full knockout bracket (Round of 32 through the Final) is now in the WC2026 schedule. Includes value-bet analysis (model probability vs. market-implied probability) when bookmaker odds are loaded.

Example responsejson
{
  "data": [
    {
      "match_id": "bb_match_brazil_serbia",
      "prediction_type": "match_result",
      "home_team": "Brazil",
      "away_team": "Serbia",
      "home_win_probability": 0.62,
      "draw_probability": 0.21,
      "away_win_probability": 0.17,
      "home_elo": 2087,
      "away_elo": 1882,
      "kickoff_utc": "2026-06-13T19:00:00.000Z",
      "group": "Group A",
      "value_bet": true,
      "best_side": "home_win",
      "elo_prob": 0.62,
      "market_prob": 0.56,
      "edge": 0.06
    }
  ],
  "meta": { "model": "v1_elo_form", "total": 72 }
}

48 qualified teams

Live

GET /v1/teams?tournament=wc2026

Shorthand filter that returns the 48 nations qualified for WC2026 with flag URLs. Equivalent to filtering by the FIFA World Cup 2026 league ID.

Example responsejson
{
  "data": [
    {
      "id": "bb_team_brazil",
      "name": "Brazil",
      "short_name": "BRA",
      "flag_url": "https://flagcdn.com/w80/br.png",
      "logo_url": "..."
    }
    /* + 47 more */
  ],
  "pagination": { "total": 48, "limit": 50, "offset": 0 }
}

Team form

Live

GET /v1/teams/:id/form?limit=10

Last N matches for a team, opponent, scores, competition, W/D/L. Use it to build a form string ("WWDLW") or to drive head-to-head views before each WC fixture.

Example responsejson
{
  "data": [
    {
      "match_id": "bb_match_xyz",
      "opponent": "Argentina",
      "score": { "for": 2, "against": 1 },
      "competition": "Copa America",
      "result": "W",
      "kickoff_utc": "2026-05-15T22:00:00Z"
    }
    /* + 9 more */
  ]
}

Team stats

Live

GET /v1/teams/:id/stats

Aggregate stats over the season window, goals_scored, goals_conceded, clean_sheets, wins, draws, losses, form_string (WWDLW), btts_rate, over_2_5_rate. Adds the `?tournament=wc2026` filter to scope to WC qualifiers / WC matches only.

Example responsejson
{
  "data": {
    "team_id": "bb_team_brazil",
    "goals_scored": 24,
    "goals_conceded": 8,
    "clean_sheets": 6,
    "wins": 9,
    "draws": 3,
    "losses": 1,
    "form_string": "WWDLW",
    "btts_rate": 0.46,
    "over_2_5_rate": 0.62
  }
}

Team against-the-spread record

LiveEdge+

GET /v1/teams/:id/ats?season=2025

Against-the-spread record for a team, total, home/away, and favored/underdog splits. Currency for handicapping UIs and pre-match cards. Returns null fields when no closing line was available for a given fixture.

Example responsejson
{
  "data": {
    "team_id": "bb_team_brazil",
    "season": "2025",
    "ats": {
      "total":     { "wins": 7, "losses": 4, "pushes": 1, "pct": 0.636 },
      "home":      { "wins": 4, "losses": 2, "pushes": 0, "pct": 0.667 },
      "away":      { "wins": 3, "losses": 2, "pushes": 1, "pct": 0.600 },
      "favored":   { "wins": 5, "losses": 3, "pushes": 1, "pct": 0.625 },
      "underdog":  { "wins": 2, "losses": 1, "pushes": 0, "pct": 0.667 }
    }
  }
}

Single-match prediction (clean alias)

LiveSolo+

GET /v1/predictions/:matchId

Single (latest) Elo-based prediction for a given match ID. Clean alias for /v1/predictions/match/:id, equivalent payload, shorter URL. Use this on the match detail page when you only need one fixture's win / draw / loss probabilities and value-bet fields.

Example responsejson
{
  "data": {
    "match_id": "bb_match_brazil_serbia",
    "home_team": "Brazil",
    "away_team": "Serbia",
    "home_win_probability": 0.62,
    "draw_probability": 0.21,
    "away_win_probability": 0.17,
    "home_elo": 2087,
    "away_elo": 1882,
    "value_bet": { "side": "home", "edge": 0.04 }
  }
}

Group standings

Live

GET /v1/formulas/wc2026/group-standings

Live group tables during the tournament, points, goals for/against, goal difference, and head-to-head tiebreakers per FIFA rules. One row per team across the 12 groups; recomputed after every group-stage result.

Example responsejson
{
  "data": [
    {
      "group": "A",
      "team_id": "bb_team_mexico",
      "team_name": "Mexico",
      "played": 2,
      "wins": 2,
      "draws": 0,
      "losses": 0,
      "goals_for": 5,
      "goals_against": 1,
      "goal_difference": 4,
      "points": 6,
      "position": 1
    }
    /* + 47 more rows across 12 groups */
  ],
  "meta": { "generated_at": "..." }
}

Tournament odds

Live

GET /v1/odds?tournament=wc2026

Tournament-wide odds list: the freshest snapshot per (match, sportsbook, market, participant), grouped per match. tournament is required (wc2026 today). Returns an empty matches[] until books open, then self-fills. Optional date=YYYY-MM-DD and market filters.

Example responsejson
{
  "data": {
    "tournament": "wc2026",
    "matches": [
      {
        "match_id": "bb_match_mexico_south_africa",
        "kickoff": "2026-06-11T19:00:00Z",
        "status": "upcoming",
        "home": { "id": "...", "name": "Mexico", "abbr": "MEX" },
        "away": { "id": "...", "name": "South Africa", "abbr": "RSA" },
        "odds": [
          { "sportsbook": "DraftKings", "market": "moneyline", "line": { "participant": "home", "price": -165 }, "fetched_at": "..." }
        ]
      }
    ],
    "generated_at": "..."
  },
  "meta": { "cached": false, "cache_age_ms": 0, "matches": 1 }
}

Golden Boot leaderboard

Live

GET /v1/wc2026/golden-boot

Tournament-wide top 20 scorers, aggregated from per-match fixture player stats across the 48 qualified nations. Ranked by DENSE_RANK on goals, so players tied on goals share the same rank; the list is then ordered by goals, then assists, then fewest minutes (the FIFA tiebreaker). Only players who have scored appear. Each leader's country is the national team's full name (for example "Argentina"), not an ISO code, so you can group by country directly in picker UIs; team_id and team_name carry the same team. player_id is null when the scorer is not yet bridged to our player records. tournament_state is pre_tournament (empty leaders[]) before June 11, then in_progress, then finished; updated_at is the freshness of the underlying stats (null before any match is scored).

Example responsejson
{
  "data": {
    "tournament_state": "in_progress",
    "leaders": [
      {
        "rank": 1,
        "name": "Kylian Mbappe",
        "country": "France",
        "team_id": "bb_team_france",
        "team_name": "France",
        "player_id": "bb_player_mbappe",
        "goals": 5,
        "assists": 1,
        "minutes": 540
      },
      {
        "rank": 1,
        "name": "Julian Alvarez",
        "country": "Argentina",
        "team_id": "bb_team_argentina",
        "team_name": "Argentina",
        "player_id": null,
        "goals": 5,
        "assists": 0,
        "minutes": 510
      },
      {
        "rank": 2,
        "name": "Vinicius Junior",
        "country": "Brazil",
        "team_id": "bb_team_brazil",
        "team_name": "Brazil",
        "player_id": "bb_player_vinicius",
        "goals": 4,
        "assists": 2,
        "minutes": 498
      }
      /* + up to 17 more, top 20 by goals */
    ],
    "updated_at": "2026-06-27T15:30:00.000Z"
  },
  "meta": { "cached": false, "source": "aggregator-paid" }
}

Top scorers (lighter)

Live

GET /v1/wc2026/leaders

Rank, goals, assists, and games_played per player with a flat team object. Lighter sibling of golden-boot, same explicit tournament_state but without the FIFA tiebreaker sort or squad filter.

Example responsejson
{
  "data": {
    "tournament_state": "pre_tournament",
    "leaders": [],
    "updated_at": null
  },
  "meta": { "source": "aggregator-paid" }
}

Group advancement

Live

GET /v1/wc2026/group/:group/advancement

Per-team probability of finishing 1st, 2nd, 3rd, or 4th in one group, from a 10,000-iteration Monte Carlo over the remaining fixtures anchored on the current standings. p_advance is direct qualification (1st + 2nd); p_third_contention is the raw P(3rd). Group letter A through L.

Example responsejson
{
  "data": {
    "group": "A",
    "iterations": 10000,
    "matches_played": 0,
    "matches_remaining": 6,
    "teams": [
      {
        "team": { "id": "...", "name": "Mexico", "elo": 1764 },
        "current": { "played": 0, "points": 0, "gd": 0 },
        "p_1st": 0.41,
        "p_2nd": 0.27,
        "p_3rd": 0.19,
        "p_4th": 0.13,
        "p_advance": 0.68,
        "p_third_contention": 0.19,
        "p_eliminated": 0.13
      }
    ],
    "as_of": "..."
  },
  "meta": { "cached": false, "cache_age_ms": 0 }
}

Next steps