---
title: "Get raw team/match statistics for an event (Data layer)"
method: GET
path: "/v1/events/{event_id}/stats"
tags: ["events"]
---

# Get raw team/match statistics for an event (Data layer)

`GET /v1/events/{event_id}/stats`

## Request

- Base URL: `https://lumify.ai`
- URL: `https://lumify.ai/v1/events/{event_id}/stats`
- Auth: HTTP bearer

Soccer, MLB, tennis, NFL, NCAAF, NBA, NCAAB, and NHL. Deterministic aggregates from completed results — no odds (see /odds) and no scoring (see /intelligence). Payload shapes are sport-specific (team-keyed except tennis). Tennis: main-draw singles only (doubles/qualifying return available:false). Form/record/H2H exclude walkovers and NFL/NCAAF/NBA/NCAAB preseason. Other sports return HTTP 400. available:false is free. Field catalog: https://lumify.ai/docs/reference#event-stats

## Path parameters

- `event_id` integer, required: Lumify event ID

## Response `200`

Sport-specific Data-layer statistics. Soccer/MLB/NFL/NCAAF/NBA/NCAAB/NHL use teams.home/away; tennis uses players.player_1/player_2 plus match.scoreboard. Null/empty fields mean too few completed games, not a failed call. Catalog: https://lumify.ai/docs/reference#event-stats

- union
  - object
    - `event_id` integer, required: Lumify event ID.
    - `available` boolean, required: False when either team hasn't resolved for this fixture yet — every other field is omitted in that case and the call isn't billed.
    - `league_slug` string, nullable: League slug, e.g. 'mls'.
    - `profile` string, nullable: 'club' or 'world_cup'. Determines the shape of `teams.*.team_strength`, `teams.*.venue`, and whether `teams.*.sos` is populated.
    - `neutral_site` boolean, nullable: Whether this fixture is at a neutral venue. Informational here — not used in any of this endpoint's own aggregates, but factored into home-advantage scoring on GET /v1/events/{id}/intelligence.
    - `windows` StatsWindows
      - `recent_form` integer, required: Trailing games covered by each team's `recent_form`.
      - `rates_l5` integer, required: Trailing games covered by each team's `rates_l5`.
      - `rates_season` union, required: Always the literal string 'season' — a deliberately variable-length window (see each team's `rates_season.games`), unlike the fixed integer windows above.
        - string
        - integer
      - `head_to_head` integer, required: Trailing meetings between these two teams considered for `head_to_head`.
      - `sos` integer, required: Trailing opponents covered by each team's `sos`.
    - `teams` StatsTeams
      - `home` StatsTeam
        - `team_id` integer, nullable
        - `name` string, nullable
        - `abbreviation` string, nullable
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/soccer/855.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` StatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W', 'D', or 'L'.
          - `goals_scored` integer[]: Goals this team scored in each game, same order as `results`.
          - `goals_conceded` integer[]: Goals this team conceded in each game, same order as `results`.
        - `rates_l5` StatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted box-score averages).
          - `window` union: Which rolling window this block covers: 'l5' (see `window_size` for the fixed game count) or 'season' (an intentionally variable-length window — see `games` for how many games it actually covers for this team).
            - string
            - integer
          - `window_size` integer, nullable: Fixed sample depth for this window, only present when the window has one (e.g. 5 for 'l5'). Omitted for 'season', since season length varies by team — use `games` instead.
          - `games` integer: Games with box-score data included in this average.
          - `shots_for` number, nullable: Avg. shots taken per game.
          - `shots_against` number, nullable: Avg. shots conceded per game.
          - `shots_on_target_for` number, nullable: Avg. shots on target taken per game.
          - `shots_on_target_against` number, nullable: Avg. shots on target conceded per game.
          - `possession_pct` number, nullable: Avg. possession percentage (0-100).
          - `corners_for` number, nullable: Avg. corners won per game.
          - `corners_against` number, nullable: Avg. corners conceded per game.
          - `fouls` number, nullable: Avg. fouls committed per game.
          - `yellow_cards` number, nullable: Avg. yellow cards received per game.
          - `red_cards` number, nullable: Avg. red cards received per game.
          - `passes` number, nullable: Avg. total passes per game (see pass_accuracy_pct for completion rate).
          - `pass_accuracy_pct` number, nullable: Avg. pass completion percentage (0-100).
          - `saves` number, nullable: Avg. goalkeeper saves per game.
          - `offsides` number, nullable: Avg. offsides committed per game.
          - `tackles` number, nullable: Avg. total tackles per game (total tackles, not effective tackles).
          - `interceptions` number, nullable: Avg. interceptions per game.
          - `blocked_shots` number, nullable: Avg. shots blocked by this team per game.
          - `assists` number, nullable: Avg. team assists per game, summed from per-player goalAssists (the ingested team box has no team-level assists field).
          - `save_rate` number, nullable: Saves / shots on target faced across the window (not an average of per-game rates).
          - `field_games` object: Per-field sample size, keyed by the metric names above (including Phase 1C offsides/tackles/interceptions/blocked_shots/assists). `games` is how many games are in this window overall, but an individual field can have a smaller count when a source's box score omits that stat for some fixtures — lets agents tell 'averaged over all N games' apart from 'averaged over fewer'. Derived `save_rate` is the one exception that also appears here (joint saves + SoT faced coverage).
        - `rates_season` StatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted box-score averages).
          - `window` union: Which rolling window this block covers: 'l5' (see `window_size` for the fixed game count) or 'season' (an intentionally variable-length window — see `games` for how many games it actually covers for this team).
            - string
            - integer
          - `window_size` integer, nullable: Fixed sample depth for this window, only present when the window has one (e.g. 5 for 'l5'). Omitted for 'season', since season length varies by team — use `games` instead.
          - `games` integer: Games with box-score data included in this average.
          - `shots_for` number, nullable: Avg. shots taken per game.
          - `shots_against` number, nullable: Avg. shots conceded per game.
          - `shots_on_target_for` number, nullable: Avg. shots on target taken per game.
          - `shots_on_target_against` number, nullable: Avg. shots on target conceded per game.
          - `possession_pct` number, nullable: Avg. possession percentage (0-100).
          - `corners_for` number, nullable: Avg. corners won per game.
          - `corners_against` number, nullable: Avg. corners conceded per game.
          - `fouls` number, nullable: Avg. fouls committed per game.
          - `yellow_cards` number, nullable: Avg. yellow cards received per game.
          - `red_cards` number, nullable: Avg. red cards received per game.
          - `passes` number, nullable: Avg. total passes per game (see pass_accuracy_pct for completion rate).
          - `pass_accuracy_pct` number, nullable: Avg. pass completion percentage (0-100).
          - `saves` number, nullable: Avg. goalkeeper saves per game.
          - `offsides` number, nullable: Avg. offsides committed per game.
          - `tackles` number, nullable: Avg. total tackles per game (total tackles, not effective tackles).
          - `interceptions` number, nullable: Avg. interceptions per game.
          - `blocked_shots` number, nullable: Avg. shots blocked by this team per game.
          - `assists` number, nullable: Avg. team assists per game, summed from per-player goalAssists (the ingested team box has no team-level assists field).
          - `save_rate` number, nullable: Saves / shots on target faced across the window (not an average of per-game rates).
          - `field_games` object: Per-field sample size, keyed by the metric names above (including Phase 1C offsides/tackles/interceptions/blocked_shots/assists). `games` is how many games are in this window overall, but an individual field can have a smaller count when a source's box score omits that stat for some fixtures — lets agents tell 'averaged over all N games' apart from 'averaged over fewer'. Derived `save_rate` is the one exception that also appears here (joint saves + SoT faced coverage).
        - `lineup` StatsLineup
          - `available` boolean, required: False when no lineup has been ingested yet for this side.
          - `formation` string, nullable: e.g. '4-3-3'. Null when unavailable.
          - `starters` StatsLineupPlayer[]
            - `name` string, nullable
            - `position` string, nullable: Position abbreviation, e.g. 'GK', 'CB'.
            - `jersey` string, nullable
            - `formation_place` integer, nullable: Slot index within the formation, when the source provides one.
            - `espn_athlete_id` string, nullable
            - `starter` boolean: True in `starters`, false in `bench`.
          - `bench` StatsLineupPlayer[]
            - `name` string, nullable
            - `position` string, nullable: Position abbreviation, e.g. 'GK', 'CB'.
            - `jersey` string, nullable
            - `formation_place` integer, nullable: Slot index within the formation, when the source provides one.
            - `espn_athlete_id` string, nullable
            - `starter` boolean: True in `starters`, false in `bench`.
          - `captured_at` string, nullable: When this lineup was captured from the source, 'YYYY-MM-DD HH:MM:SS'.
        - `team_strength` object, nullable: Club fixtures: {source: 'league_table_ppg', ppg, games, points, w, d, l, gf, ga, gd, rank} from the current league table.
        - `venue` object, nullable: Club fixtures: {source: 'home_away_ppg_split', home_ppg, home_games, away_ppg, away_games}.
        - `sos` StatsSos
          - `source` string, nullable: Provenance tag, e.g. 'opp_ppg_avg'.
          - `window` integer, required: Number of trailing opponents this strength-of-schedule average covers.
          - `games` integer: Opponent games actually available within `window`.
          - `avg_opp_ppg` number, nullable: Average points-per-game of the opponents faced in `window`.
          - `avg_opp_rank` number, nullable: Average league-table rank of the opponents faced in `window`.
      - `away` StatsTeam
        - `team_id` integer, nullable
        - `name` string, nullable
        - `abbreviation` string, nullable
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/soccer/855.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` StatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W', 'D', or 'L'.
          - `goals_scored` integer[]: Goals this team scored in each game, same order as `results`.
          - `goals_conceded` integer[]: Goals this team conceded in each game, same order as `results`.
        - `rates_l5` StatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted box-score averages).
          - `window` union: Which rolling window this block covers: 'l5' (see `window_size` for the fixed game count) or 'season' (an intentionally variable-length window — see `games` for how many games it actually covers for this team).
            - string
            - integer
          - `window_size` integer, nullable: Fixed sample depth for this window, only present when the window has one (e.g. 5 for 'l5'). Omitted for 'season', since season length varies by team — use `games` instead.
          - `games` integer: Games with box-score data included in this average.
          - `shots_for` number, nullable: Avg. shots taken per game.
          - `shots_against` number, nullable: Avg. shots conceded per game.
          - `shots_on_target_for` number, nullable: Avg. shots on target taken per game.
          - `shots_on_target_against` number, nullable: Avg. shots on target conceded per game.
          - `possession_pct` number, nullable: Avg. possession percentage (0-100).
          - `corners_for` number, nullable: Avg. corners won per game.
          - `corners_against` number, nullable: Avg. corners conceded per game.
          - `fouls` number, nullable: Avg. fouls committed per game.
          - `yellow_cards` number, nullable: Avg. yellow cards received per game.
          - `red_cards` number, nullable: Avg. red cards received per game.
          - `passes` number, nullable: Avg. total passes per game (see pass_accuracy_pct for completion rate).
          - `pass_accuracy_pct` number, nullable: Avg. pass completion percentage (0-100).
          - `saves` number, nullable: Avg. goalkeeper saves per game.
          - `offsides` number, nullable: Avg. offsides committed per game.
          - `tackles` number, nullable: Avg. total tackles per game (total tackles, not effective tackles).
          - `interceptions` number, nullable: Avg. interceptions per game.
          - `blocked_shots` number, nullable: Avg. shots blocked by this team per game.
          - `assists` number, nullable: Avg. team assists per game, summed from per-player goalAssists (the ingested team box has no team-level assists field).
          - `save_rate` number, nullable: Saves / shots on target faced across the window (not an average of per-game rates).
          - `field_games` object: Per-field sample size, keyed by the metric names above (including Phase 1C offsides/tackles/interceptions/blocked_shots/assists). `games` is how many games are in this window overall, but an individual field can have a smaller count when a source's box score omits that stat for some fixtures — lets agents tell 'averaged over all N games' apart from 'averaged over fewer'. Derived `save_rate` is the one exception that also appears here (joint saves + SoT faced coverage).
        - `rates_season` StatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted box-score averages).
          - `window` union: Which rolling window this block covers: 'l5' (see `window_size` for the fixed game count) or 'season' (an intentionally variable-length window — see `games` for how many games it actually covers for this team).
            - string
            - integer
          - `window_size` integer, nullable: Fixed sample depth for this window, only present when the window has one (e.g. 5 for 'l5'). Omitted for 'season', since season length varies by team — use `games` instead.
          - `games` integer: Games with box-score data included in this average.
          - `shots_for` number, nullable: Avg. shots taken per game.
          - `shots_against` number, nullable: Avg. shots conceded per game.
          - `shots_on_target_for` number, nullable: Avg. shots on target taken per game.
          - `shots_on_target_against` number, nullable: Avg. shots on target conceded per game.
          - `possession_pct` number, nullable: Avg. possession percentage (0-100).
          - `corners_for` number, nullable: Avg. corners won per game.
          - `corners_against` number, nullable: Avg. corners conceded per game.
          - `fouls` number, nullable: Avg. fouls committed per game.
          - `yellow_cards` number, nullable: Avg. yellow cards received per game.
          - `red_cards` number, nullable: Avg. red cards received per game.
          - `passes` number, nullable: Avg. total passes per game (see pass_accuracy_pct for completion rate).
          - `pass_accuracy_pct` number, nullable: Avg. pass completion percentage (0-100).
          - `saves` number, nullable: Avg. goalkeeper saves per game.
          - `offsides` number, nullable: Avg. offsides committed per game.
          - `tackles` number, nullable: Avg. total tackles per game (total tackles, not effective tackles).
          - `interceptions` number, nullable: Avg. interceptions per game.
          - `blocked_shots` number, nullable: Avg. shots blocked by this team per game.
          - `assists` number, nullable: Avg. team assists per game, summed from per-player goalAssists (the ingested team box has no team-level assists field).
          - `save_rate` number, nullable: Saves / shots on target faced across the window (not an average of per-game rates).
          - `field_games` object: Per-field sample size, keyed by the metric names above (including Phase 1C offsides/tackles/interceptions/blocked_shots/assists). `games` is how many games are in this window overall, but an individual field can have a smaller count when a source's box score omits that stat for some fixtures — lets agents tell 'averaged over all N games' apart from 'averaged over fewer'. Derived `save_rate` is the one exception that also appears here (joint saves + SoT faced coverage).
        - `lineup` StatsLineup
          - `available` boolean, required: False when no lineup has been ingested yet for this side.
          - `formation` string, nullable: e.g. '4-3-3'. Null when unavailable.
          - `starters` StatsLineupPlayer[]
            - `name` string, nullable
            - `position` string, nullable: Position abbreviation, e.g. 'GK', 'CB'.
            - `jersey` string, nullable
            - `formation_place` integer, nullable: Slot index within the formation, when the source provides one.
            - `espn_athlete_id` string, nullable
            - `starter` boolean: True in `starters`, false in `bench`.
          - `bench` StatsLineupPlayer[]
            - `name` string, nullable
            - `position` string, nullable: Position abbreviation, e.g. 'GK', 'CB'.
            - `jersey` string, nullable
            - `formation_place` integer, nullable: Slot index within the formation, when the source provides one.
            - `espn_athlete_id` string, nullable
            - `starter` boolean: True in `starters`, false in `bench`.
          - `captured_at` string, nullable: When this lineup was captured from the source, 'YYYY-MM-DD HH:MM:SS'.
        - `team_strength` object, nullable: Club fixtures: {source: 'league_table_ppg', ppg, games, points, w, d, l, gf, ga, gd, rank} from the current league table.
        - `venue` object, nullable: Club fixtures: {source: 'home_away_ppg_split', home_ppg, home_games, away_ppg, away_games}.
        - `sos` StatsSos
          - `source` string, nullable: Provenance tag, e.g. 'opp_ppg_avg'.
          - `window` integer, required: Number of trailing opponents this strength-of-schedule average covers.
          - `games` integer: Opponent games actually available within `window`.
          - `avg_opp_ppg` number, nullable: Average points-per-game of the opponents faced in `window`.
          - `avg_opp_rank` number, nullable: Average league-table rank of the opponents faced in `window`.
    - `head_to_head` StatsHeadToHead
      - `window` integer, required: Max trailing meetings considered (see `windows.head_to_head`).
      - `meetings` StatsHeadToHeadMeeting[]: Most-recent-first past meetings between these two teams, up to `window`.
        - `home_goals` integer, nullable: Goals scored by this event's home team in that past meeting.
        - `away_goals` integer, nullable: Goals scored by this event's away team in that past meeting.
      - `total` integer: Number of meetings returned in `meetings`.
    - `league_context` StatsLeagueContext
      - `avg_goals_per_team` number, nullable: League-wide average goals scored per team per game this season, used as the baseline the /intelligence layer compares each team's attack/defense against. Null before enough club-season games exist.
  - object
    - `event_id` integer, required: Lumify event ID.
    - `available` boolean, required: False when either team hasn't resolved for this fixture yet — every other field is omitted in that case and the call isn't billed.
    - `league_slug` string, nullable: League slug — always 'mlb'.
    - `windows` MlbStatsWindows
      - `recent_form` integer, required: Trailing games covered by each team's `recent_form`.
      - `rates_l5` integer, required: Trailing games covered by each team's `rates_l5`.
      - `rates_season` string, required: Always the literal string 'season' — a deliberately variable-length window (see each team's `rates_season.games`), unlike the fixed integer windows above.
      - `head_to_head` integer, required: Trailing meetings between these two teams considered for `head_to_head`.
    - `teams` MlbStatsTeams
      - `home` MlbStatsTeam
        - `team_id` integer, nullable
        - `name` string, nullable
        - `abbreviation` string, nullable
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/mlb/70.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` MlbStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (no ties in MLB).
          - `runs_scored` integer[]: Runs this team scored in each game, same order as `results`.
          - `runs_allowed` integer[]: Runs this team allowed in each game, same order as `results`.
        - `record` MlbStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses.
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `runs_for` integer: Total runs scored this season to date.
          - `runs_against` integer: Total runs allowed this season to date.
          - `run_differential` integer: runs_for - runs_against.
        - `rates_l5` MlbStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'player_game_stats_sum' (own box scores, summed to team level).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size` for the fixed game count) or 'season' (an intentionally variable-length window — see `games` for how many games it actually covers for this team).
          - `window_size` integer, nullable: Fixed sample depth for this window, only present when the window has one (e.g. 5 for 'l5'). Omitted for 'season' — use `games` instead.
          - `games` integer: Games with box-score data included in this aggregate.
          - `at_bats` number, nullable: Avg. team at-bats per game.
          - `hits` number, nullable: Avg. team hits per game.
          - `runs` number, nullable: Avg. team runs scored per game.
          - `home_runs` number, nullable: Avg. team home runs per game.
          - `walks` number, nullable: Avg. team walks (bases on balls) drawn per game.
          - `strikeouts` number, nullable: Avg. team batter strikeouts per game.
          - `doubles` number, nullable: Avg. team doubles per game.
          - `triples` number, nullable: Avg. team triples per game.
          - `rbi` number, nullable: Avg. team runs batted in per game.
          - `hit_by_pitch` number, nullable: Avg. team hit-by-pitch plate appearances per game.
          - `stolen_bases` number, nullable: Avg. team stolen bases per game.
          - `total_bases` number, nullable: Avg. team total bases per game (H + 2B + 2·3B + 3·HR). Null when any TB component (hits/doubles/triples/home_runs) is missing from the window.
          - `batting_avg` number, nullable: Team batting average across the window: total hits / total at-bats (not an average of per-game averages).
          - `obp` number, nullable: Team on-base percentage across the window: (H + BB + HBP) / (AB + BB + HBP). Sacrifice flies are not in Path A box ingest, so SF is omitted from the denominator (slightly higher than official OBP when SF > 0).
          - `slg` number, nullable: Team slugging percentage across the window: total bases / total at-bats.
          - `ops` number, nullable: Team OPS across the window: obp + slg (same SF caveat as `obp`).
          - `outs` number, nullable: Avg. team outs recorded per game. The additive unit behind innings_pitched/ERA/WHIP/K9/BB9.
          - `innings_pitched` number, nullable: Avg. team innings pitched per game as true innings (total outs ÷ 3 ÷ games). Not baseball notation — see starting_pitcher.innings_pitched for N.outs display.
          - `earned_runs` number, nullable: Avg. team earned runs allowed per game.
          - `hits_allowed` number, nullable: Avg. team hits allowed per game.
          - `walks_allowed` number, nullable: Avg. team walks allowed per game.
          - `strikeouts_pitched` number, nullable: Avg. team pitcher strikeouts recorded per game.
          - `home_runs_allowed` number, nullable: Avg. team home runs allowed per game.
          - `era` number, nullable: Team ERA across the window: (total earned runs × 9) / (total outs ÷ 3). Uses outs math — baseball IP notation (.1/.2 = outs) is not additive.
          - `whip` number, nullable: Team WHIP across the window: (total walks allowed + total hits allowed) / (total outs ÷ 3).
          - `k9` number, nullable: Team strikeouts per 9 innings across the window: (total pitcher strikeouts × 9) / (total outs ÷ 3).
          - `bb9` number, nullable: Team walks allowed per 9 innings across the window: (total walks allowed × 9) / (total outs ÷ 3).
          - `field_games` object: Per-field sample size, keyed by the raw box-score slugs summed into the fields above (at_bats, hits, runs, home_runs, walks, strikeouts, doubles, triples, rbi, hit_by_pitch, stolen_bases, outs, innings_pitched, earned_runs, hits_allowed, walks_allowed, strikeouts_pitched, home_runs_allowed). `games` is how many games are in this window overall, but an individual field can have a smaller count when a box score omits that stat. Derived ratios (batting_avg/obp/slg/ops/total_bases/era/whip/k9/bb9) are NOT keys here — they are computed from the sum of their raw component slugs above, so check the relevant component slug(s) instead (e.g. `hits` + `at_bats` for `batting_avg`).
        - `rates_season` MlbStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'player_game_stats_sum' (own box scores, summed to team level).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size` for the fixed game count) or 'season' (an intentionally variable-length window — see `games` for how many games it actually covers for this team).
          - `window_size` integer, nullable: Fixed sample depth for this window, only present when the window has one (e.g. 5 for 'l5'). Omitted for 'season' — use `games` instead.
          - `games` integer: Games with box-score data included in this aggregate.
          - `at_bats` number, nullable: Avg. team at-bats per game.
          - `hits` number, nullable: Avg. team hits per game.
          - `runs` number, nullable: Avg. team runs scored per game.
          - `home_runs` number, nullable: Avg. team home runs per game.
          - `walks` number, nullable: Avg. team walks (bases on balls) drawn per game.
          - `strikeouts` number, nullable: Avg. team batter strikeouts per game.
          - `doubles` number, nullable: Avg. team doubles per game.
          - `triples` number, nullable: Avg. team triples per game.
          - `rbi` number, nullable: Avg. team runs batted in per game.
          - `hit_by_pitch` number, nullable: Avg. team hit-by-pitch plate appearances per game.
          - `stolen_bases` number, nullable: Avg. team stolen bases per game.
          - `total_bases` number, nullable: Avg. team total bases per game (H + 2B + 2·3B + 3·HR). Null when any TB component (hits/doubles/triples/home_runs) is missing from the window.
          - `batting_avg` number, nullable: Team batting average across the window: total hits / total at-bats (not an average of per-game averages).
          - `obp` number, nullable: Team on-base percentage across the window: (H + BB + HBP) / (AB + BB + HBP). Sacrifice flies are not in Path A box ingest, so SF is omitted from the denominator (slightly higher than official OBP when SF > 0).
          - `slg` number, nullable: Team slugging percentage across the window: total bases / total at-bats.
          - `ops` number, nullable: Team OPS across the window: obp + slg (same SF caveat as `obp`).
          - `outs` number, nullable: Avg. team outs recorded per game. The additive unit behind innings_pitched/ERA/WHIP/K9/BB9.
          - `innings_pitched` number, nullable: Avg. team innings pitched per game as true innings (total outs ÷ 3 ÷ games). Not baseball notation — see starting_pitcher.innings_pitched for N.outs display.
          - `earned_runs` number, nullable: Avg. team earned runs allowed per game.
          - `hits_allowed` number, nullable: Avg. team hits allowed per game.
          - `walks_allowed` number, nullable: Avg. team walks allowed per game.
          - `strikeouts_pitched` number, nullable: Avg. team pitcher strikeouts recorded per game.
          - `home_runs_allowed` number, nullable: Avg. team home runs allowed per game.
          - `era` number, nullable: Team ERA across the window: (total earned runs × 9) / (total outs ÷ 3). Uses outs math — baseball IP notation (.1/.2 = outs) is not additive.
          - `whip` number, nullable: Team WHIP across the window: (total walks allowed + total hits allowed) / (total outs ÷ 3).
          - `k9` number, nullable: Team strikeouts per 9 innings across the window: (total pitcher strikeouts × 9) / (total outs ÷ 3).
          - `bb9` number, nullable: Team walks allowed per 9 innings across the window: (total walks allowed × 9) / (total outs ÷ 3).
          - `field_games` object: Per-field sample size, keyed by the raw box-score slugs summed into the fields above (at_bats, hits, runs, home_runs, walks, strikeouts, doubles, triples, rbi, hit_by_pitch, stolen_bases, outs, innings_pitched, earned_runs, hits_allowed, walks_allowed, strikeouts_pitched, home_runs_allowed). `games` is how many games are in this window overall, but an individual field can have a smaller count when a box score omits that stat. Derived ratios (batting_avg/obp/slg/ops/total_bases/era/whip/k9/bb9) are NOT keys here — they are computed from the sum of their raw component slugs above, so check the relevant component slug(s) instead (e.g. `hits` + `at_bats` for `batting_avg`).
        - `starting_pitcher` MlbStatsStartingPitcher
          - `available` boolean, required: False until this event's post-final box score lineup is ingested. Pregame probable starters stay on GET /intelligence (and the Fact Ledger) — /stats stays DB-only and does not live-fetch probablePitcher.
          - `player_id` integer, nullable: Lumify player ID.
          - `name` string, nullable
          - `position` string, nullable: Position abbreviation from the lineup (typically 'P'; may be 'DH' etc. for two-way players).
          - `games_started` integer: Season-to-date games started (boxscore gamesStarted=1 only — relief appearances do not count).
          - `innings_pitched` number, nullable: Season-to-date total innings pitched in baseball notation (e.g. 128.1 = 128⅔), derived from summed outs.
          - `era` number, nullable: Season-to-date ERA: (total earned runs × 9) / (total outs ÷ 3) — derived from our own box scores, not a live vendor fetch.
          - `whip` number, nullable: Season-to-date WHIP: (total walks allowed + total hits allowed) / (total outs ÷ 3).
          - `k9` number, nullable: Season-to-date strikeouts per 9 innings (outs-based denominator).
          - `bb9` number, nullable: Season-to-date walks allowed per 9 innings (outs-based denominator).
        - `lineup` MlbStatsLineup
          - `available` boolean, required: False when no lineup has been ingested yet for this side.
          - `batting_order` MlbStatsLineupPlayer[]: The 9 starting batters, ordered by `batting_order` (1-9).
            - `name` string, nullable
            - `position` string, nullable: Position abbreviation, e.g. '1B', 'SS', 'P'.
            - `player_id` integer, nullable: Lumify player ID.
            - `role` string, nullable: 'batter' or 'pitcher'.
            - `batting_order` integer, nullable: Batting order slot (1-9) for starters with role='batter'. Null for pitchers and subs.
            - `starter` boolean: True in `batting_order`/`starting_pitcher`, false in `bench`.
          - `starting_pitcher` MlbStatsLineupPlayer
            - `name` string, nullable
            - `position` string, nullable: Position abbreviation, e.g. '1B', 'SS', 'P'.
            - `player_id` integer, nullable: Lumify player ID.
            - `role` string, nullable: 'batter' or 'pitcher'.
            - `batting_order` integer, nullable: Batting order slot (1-9) for starters with role='batter'. Null for pitchers and subs.
            - `starter` boolean: True in `batting_order`/`starting_pitcher`, false in `bench`.
          - `bench` MlbStatsLineupPlayer[]: Players who entered the game but weren't in the starting lineup (pinch hitters, relievers, defensive subs).
            - `name` string, nullable
            - `position` string, nullable: Position abbreviation, e.g. '1B', 'SS', 'P'.
            - `player_id` integer, nullable: Lumify player ID.
            - `role` string, nullable: 'batter' or 'pitcher'.
            - `batting_order` integer, nullable: Batting order slot (1-9) for starters with role='batter'. Null for pitchers and subs.
            - `starter` boolean: True in `batting_order`/`starting_pitcher`, false in `bench`.
          - `captured_at` string, nullable: When this lineup was captured from the source, 'YYYY-MM-DD HH:MM:SS'.
        - `player_box` MlbStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested player-stat row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `batters` MlbStatsBatterLine[]: This game's batting lines, sorted by name. Raw counting stats only — no per-player AVG/OBP/SLG. Two-way players also appear on `pitchers`.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation, e.g. '1B', 'SS', 'DH'. Sourced from this exact box score row when available (per-game accurate — matters for two-way players), else this event's own ingested lineup, else falls back to the player's season-level roster position.
            - `at_bats` integer, nullable: At-bats in this game.
            - `runs` integer, nullable: Runs scored in this game.
            - `hits` integer, nullable: Hits in this game (batting). Distinct from pitcher `hits_allowed`.
            - `rbi` integer, nullable: Runs batted in in this game.
            - `doubles` integer, nullable: Doubles in this game.
            - `triples` integer, nullable: Triples in this game.
            - `home_runs` integer, nullable: Home runs in this game (batting).
            - `walks` integer, nullable: Walks drawn in this game.
            - `strikeouts` integer, nullable: Strikeouts as a batter in this game.
            - `stolen_bases` integer, nullable: Stolen bases in this game.
            - `caught_stealing` integer, nullable: Caught-stealing in this game.
            - `hit_by_pitch` integer, nullable: Times hit by pitch in this game.
            - `left_on_base` integer, nullable: Runners left on base in this game.
          - `pitchers` MlbStatsPitcherLine[]: This game's pitching lines, sorted starter-first (`games_started` desc), then `outs` desc, then name. Raw counting stats only — no per-player ERA/WHIP. Two-way players also appear on `batters`.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation (typically 'P'). Sourced from this exact box score row when available (per-game accurate — matters for two-way players), else this event's own ingested lineup, else falls back to the player's season-level roster position.
            - `innings_pitched` number, nullable: Innings pitched in baseball notation (e.g. 6.1 = 6⅓). Not additive — use `outs` for math.
            - `outs` integer, nullable: Outs recorded in this game (additive; 3 outs = 1 inning).
            - `games_started` integer, nullable: 1 if this pitcher started the game, 0 if they appeared in relief.
            - `earned_runs` integer, nullable: Earned runs allowed in this game.
            - `hits_allowed` integer, nullable: Hits allowed in this game. Distinct from batter `hits`.
            - `runs_allowed` integer, nullable: Runs allowed in this game.
            - `walks_allowed` integer, nullable: Walks allowed in this game.
            - `strikeouts_pitched` integer, nullable: Strikeouts recorded as a pitcher in this game.
            - `home_runs_allowed` integer, nullable: Home runs allowed in this game.
            - `hit_batsmen` integer, nullable: Batters hit by this pitcher in this game.
            - `pitches_thrown` integer, nullable: Pitches thrown in this game.
            - `strikes_thrown` integer, nullable: Strikes thrown in this game.
            - `batters_faced` integer, nullable: Batters faced in this game.
      - `away` MlbStatsTeam
        - `team_id` integer, nullable
        - `name` string, nullable
        - `abbreviation` string, nullable
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/mlb/70.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` MlbStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (no ties in MLB).
          - `runs_scored` integer[]: Runs this team scored in each game, same order as `results`.
          - `runs_allowed` integer[]: Runs this team allowed in each game, same order as `results`.
        - `record` MlbStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses.
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `runs_for` integer: Total runs scored this season to date.
          - `runs_against` integer: Total runs allowed this season to date.
          - `run_differential` integer: runs_for - runs_against.
        - `rates_l5` MlbStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'player_game_stats_sum' (own box scores, summed to team level).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size` for the fixed game count) or 'season' (an intentionally variable-length window — see `games` for how many games it actually covers for this team).
          - `window_size` integer, nullable: Fixed sample depth for this window, only present when the window has one (e.g. 5 for 'l5'). Omitted for 'season' — use `games` instead.
          - `games` integer: Games with box-score data included in this aggregate.
          - `at_bats` number, nullable: Avg. team at-bats per game.
          - `hits` number, nullable: Avg. team hits per game.
          - `runs` number, nullable: Avg. team runs scored per game.
          - `home_runs` number, nullable: Avg. team home runs per game.
          - `walks` number, nullable: Avg. team walks (bases on balls) drawn per game.
          - `strikeouts` number, nullable: Avg. team batter strikeouts per game.
          - `doubles` number, nullable: Avg. team doubles per game.
          - `triples` number, nullable: Avg. team triples per game.
          - `rbi` number, nullable: Avg. team runs batted in per game.
          - `hit_by_pitch` number, nullable: Avg. team hit-by-pitch plate appearances per game.
          - `stolen_bases` number, nullable: Avg. team stolen bases per game.
          - `total_bases` number, nullable: Avg. team total bases per game (H + 2B + 2·3B + 3·HR). Null when any TB component (hits/doubles/triples/home_runs) is missing from the window.
          - `batting_avg` number, nullable: Team batting average across the window: total hits / total at-bats (not an average of per-game averages).
          - `obp` number, nullable: Team on-base percentage across the window: (H + BB + HBP) / (AB + BB + HBP). Sacrifice flies are not in Path A box ingest, so SF is omitted from the denominator (slightly higher than official OBP when SF > 0).
          - `slg` number, nullable: Team slugging percentage across the window: total bases / total at-bats.
          - `ops` number, nullable: Team OPS across the window: obp + slg (same SF caveat as `obp`).
          - `outs` number, nullable: Avg. team outs recorded per game. The additive unit behind innings_pitched/ERA/WHIP/K9/BB9.
          - `innings_pitched` number, nullable: Avg. team innings pitched per game as true innings (total outs ÷ 3 ÷ games). Not baseball notation — see starting_pitcher.innings_pitched for N.outs display.
          - `earned_runs` number, nullable: Avg. team earned runs allowed per game.
          - `hits_allowed` number, nullable: Avg. team hits allowed per game.
          - `walks_allowed` number, nullable: Avg. team walks allowed per game.
          - `strikeouts_pitched` number, nullable: Avg. team pitcher strikeouts recorded per game.
          - `home_runs_allowed` number, nullable: Avg. team home runs allowed per game.
          - `era` number, nullable: Team ERA across the window: (total earned runs × 9) / (total outs ÷ 3). Uses outs math — baseball IP notation (.1/.2 = outs) is not additive.
          - `whip` number, nullable: Team WHIP across the window: (total walks allowed + total hits allowed) / (total outs ÷ 3).
          - `k9` number, nullable: Team strikeouts per 9 innings across the window: (total pitcher strikeouts × 9) / (total outs ÷ 3).
          - `bb9` number, nullable: Team walks allowed per 9 innings across the window: (total walks allowed × 9) / (total outs ÷ 3).
          - `field_games` object: Per-field sample size, keyed by the raw box-score slugs summed into the fields above (at_bats, hits, runs, home_runs, walks, strikeouts, doubles, triples, rbi, hit_by_pitch, stolen_bases, outs, innings_pitched, earned_runs, hits_allowed, walks_allowed, strikeouts_pitched, home_runs_allowed). `games` is how many games are in this window overall, but an individual field can have a smaller count when a box score omits that stat. Derived ratios (batting_avg/obp/slg/ops/total_bases/era/whip/k9/bb9) are NOT keys here — they are computed from the sum of their raw component slugs above, so check the relevant component slug(s) instead (e.g. `hits` + `at_bats` for `batting_avg`).
        - `rates_season` MlbStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'player_game_stats_sum' (own box scores, summed to team level).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size` for the fixed game count) or 'season' (an intentionally variable-length window — see `games` for how many games it actually covers for this team).
          - `window_size` integer, nullable: Fixed sample depth for this window, only present when the window has one (e.g. 5 for 'l5'). Omitted for 'season' — use `games` instead.
          - `games` integer: Games with box-score data included in this aggregate.
          - `at_bats` number, nullable: Avg. team at-bats per game.
          - `hits` number, nullable: Avg. team hits per game.
          - `runs` number, nullable: Avg. team runs scored per game.
          - `home_runs` number, nullable: Avg. team home runs per game.
          - `walks` number, nullable: Avg. team walks (bases on balls) drawn per game.
          - `strikeouts` number, nullable: Avg. team batter strikeouts per game.
          - `doubles` number, nullable: Avg. team doubles per game.
          - `triples` number, nullable: Avg. team triples per game.
          - `rbi` number, nullable: Avg. team runs batted in per game.
          - `hit_by_pitch` number, nullable: Avg. team hit-by-pitch plate appearances per game.
          - `stolen_bases` number, nullable: Avg. team stolen bases per game.
          - `total_bases` number, nullable: Avg. team total bases per game (H + 2B + 2·3B + 3·HR). Null when any TB component (hits/doubles/triples/home_runs) is missing from the window.
          - `batting_avg` number, nullable: Team batting average across the window: total hits / total at-bats (not an average of per-game averages).
          - `obp` number, nullable: Team on-base percentage across the window: (H + BB + HBP) / (AB + BB + HBP). Sacrifice flies are not in Path A box ingest, so SF is omitted from the denominator (slightly higher than official OBP when SF > 0).
          - `slg` number, nullable: Team slugging percentage across the window: total bases / total at-bats.
          - `ops` number, nullable: Team OPS across the window: obp + slg (same SF caveat as `obp`).
          - `outs` number, nullable: Avg. team outs recorded per game. The additive unit behind innings_pitched/ERA/WHIP/K9/BB9.
          - `innings_pitched` number, nullable: Avg. team innings pitched per game as true innings (total outs ÷ 3 ÷ games). Not baseball notation — see starting_pitcher.innings_pitched for N.outs display.
          - `earned_runs` number, nullable: Avg. team earned runs allowed per game.
          - `hits_allowed` number, nullable: Avg. team hits allowed per game.
          - `walks_allowed` number, nullable: Avg. team walks allowed per game.
          - `strikeouts_pitched` number, nullable: Avg. team pitcher strikeouts recorded per game.
          - `home_runs_allowed` number, nullable: Avg. team home runs allowed per game.
          - `era` number, nullable: Team ERA across the window: (total earned runs × 9) / (total outs ÷ 3). Uses outs math — baseball IP notation (.1/.2 = outs) is not additive.
          - `whip` number, nullable: Team WHIP across the window: (total walks allowed + total hits allowed) / (total outs ÷ 3).
          - `k9` number, nullable: Team strikeouts per 9 innings across the window: (total pitcher strikeouts × 9) / (total outs ÷ 3).
          - `bb9` number, nullable: Team walks allowed per 9 innings across the window: (total walks allowed × 9) / (total outs ÷ 3).
          - `field_games` object: Per-field sample size, keyed by the raw box-score slugs summed into the fields above (at_bats, hits, runs, home_runs, walks, strikeouts, doubles, triples, rbi, hit_by_pitch, stolen_bases, outs, innings_pitched, earned_runs, hits_allowed, walks_allowed, strikeouts_pitched, home_runs_allowed). `games` is how many games are in this window overall, but an individual field can have a smaller count when a box score omits that stat. Derived ratios (batting_avg/obp/slg/ops/total_bases/era/whip/k9/bb9) are NOT keys here — they are computed from the sum of their raw component slugs above, so check the relevant component slug(s) instead (e.g. `hits` + `at_bats` for `batting_avg`).
        - `starting_pitcher` MlbStatsStartingPitcher
          - `available` boolean, required: False until this event's post-final box score lineup is ingested. Pregame probable starters stay on GET /intelligence (and the Fact Ledger) — /stats stays DB-only and does not live-fetch probablePitcher.
          - `player_id` integer, nullable: Lumify player ID.
          - `name` string, nullable
          - `position` string, nullable: Position abbreviation from the lineup (typically 'P'; may be 'DH' etc. for two-way players).
          - `games_started` integer: Season-to-date games started (boxscore gamesStarted=1 only — relief appearances do not count).
          - `innings_pitched` number, nullable: Season-to-date total innings pitched in baseball notation (e.g. 128.1 = 128⅔), derived from summed outs.
          - `era` number, nullable: Season-to-date ERA: (total earned runs × 9) / (total outs ÷ 3) — derived from our own box scores, not a live vendor fetch.
          - `whip` number, nullable: Season-to-date WHIP: (total walks allowed + total hits allowed) / (total outs ÷ 3).
          - `k9` number, nullable: Season-to-date strikeouts per 9 innings (outs-based denominator).
          - `bb9` number, nullable: Season-to-date walks allowed per 9 innings (outs-based denominator).
        - `lineup` MlbStatsLineup
          - `available` boolean, required: False when no lineup has been ingested yet for this side.
          - `batting_order` MlbStatsLineupPlayer[]: The 9 starting batters, ordered by `batting_order` (1-9).
            - `name` string, nullable
            - `position` string, nullable: Position abbreviation, e.g. '1B', 'SS', 'P'.
            - `player_id` integer, nullable: Lumify player ID.
            - `role` string, nullable: 'batter' or 'pitcher'.
            - `batting_order` integer, nullable: Batting order slot (1-9) for starters with role='batter'. Null for pitchers and subs.
            - `starter` boolean: True in `batting_order`/`starting_pitcher`, false in `bench`.
          - `starting_pitcher` MlbStatsLineupPlayer
            - `name` string, nullable
            - `position` string, nullable: Position abbreviation, e.g. '1B', 'SS', 'P'.
            - `player_id` integer, nullable: Lumify player ID.
            - `role` string, nullable: 'batter' or 'pitcher'.
            - `batting_order` integer, nullable: Batting order slot (1-9) for starters with role='batter'. Null for pitchers and subs.
            - `starter` boolean: True in `batting_order`/`starting_pitcher`, false in `bench`.
          - `bench` MlbStatsLineupPlayer[]: Players who entered the game but weren't in the starting lineup (pinch hitters, relievers, defensive subs).
            - `name` string, nullable
            - `position` string, nullable: Position abbreviation, e.g. '1B', 'SS', 'P'.
            - `player_id` integer, nullable: Lumify player ID.
            - `role` string, nullable: 'batter' or 'pitcher'.
            - `batting_order` integer, nullable: Batting order slot (1-9) for starters with role='batter'. Null for pitchers and subs.
            - `starter` boolean: True in `batting_order`/`starting_pitcher`, false in `bench`.
          - `captured_at` string, nullable: When this lineup was captured from the source, 'YYYY-MM-DD HH:MM:SS'.
        - `player_box` MlbStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested player-stat row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `batters` MlbStatsBatterLine[]: This game's batting lines, sorted by name. Raw counting stats only — no per-player AVG/OBP/SLG. Two-way players also appear on `pitchers`.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation, e.g. '1B', 'SS', 'DH'. Sourced from this exact box score row when available (per-game accurate — matters for two-way players), else this event's own ingested lineup, else falls back to the player's season-level roster position.
            - `at_bats` integer, nullable: At-bats in this game.
            - `runs` integer, nullable: Runs scored in this game.
            - `hits` integer, nullable: Hits in this game (batting). Distinct from pitcher `hits_allowed`.
            - `rbi` integer, nullable: Runs batted in in this game.
            - `doubles` integer, nullable: Doubles in this game.
            - `triples` integer, nullable: Triples in this game.
            - `home_runs` integer, nullable: Home runs in this game (batting).
            - `walks` integer, nullable: Walks drawn in this game.
            - `strikeouts` integer, nullable: Strikeouts as a batter in this game.
            - `stolen_bases` integer, nullable: Stolen bases in this game.
            - `caught_stealing` integer, nullable: Caught-stealing in this game.
            - `hit_by_pitch` integer, nullable: Times hit by pitch in this game.
            - `left_on_base` integer, nullable: Runners left on base in this game.
          - `pitchers` MlbStatsPitcherLine[]: This game's pitching lines, sorted starter-first (`games_started` desc), then `outs` desc, then name. Raw counting stats only — no per-player ERA/WHIP. Two-way players also appear on `batters`.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation (typically 'P'). Sourced from this exact box score row when available (per-game accurate — matters for two-way players), else this event's own ingested lineup, else falls back to the player's season-level roster position.
            - `innings_pitched` number, nullable: Innings pitched in baseball notation (e.g. 6.1 = 6⅓). Not additive — use `outs` for math.
            - `outs` integer, nullable: Outs recorded in this game (additive; 3 outs = 1 inning).
            - `games_started` integer, nullable: 1 if this pitcher started the game, 0 if they appeared in relief.
            - `earned_runs` integer, nullable: Earned runs allowed in this game.
            - `hits_allowed` integer, nullable: Hits allowed in this game. Distinct from batter `hits`.
            - `runs_allowed` integer, nullable: Runs allowed in this game.
            - `walks_allowed` integer, nullable: Walks allowed in this game.
            - `strikeouts_pitched` integer, nullable: Strikeouts recorded as a pitcher in this game.
            - `home_runs_allowed` integer, nullable: Home runs allowed in this game.
            - `hit_batsmen` integer, nullable: Batters hit by this pitcher in this game.
            - `pitches_thrown` integer, nullable: Pitches thrown in this game.
            - `strikes_thrown` integer, nullable: Strikes thrown in this game.
            - `batters_faced` integer, nullable: Batters faced in this game.
    - `head_to_head` MlbStatsHeadToHead
      - `window` integer, required: Max trailing meetings considered (see `windows.head_to_head`).
      - `meetings` MlbStatsHeadToHeadMeeting[]: Most-recent-first past meetings between these two teams, up to `window`.
        - `home_runs` integer, nullable: Runs scored by this event's home team in that past meeting.
        - `away_runs` integer, nullable: Runs scored by this event's away team in that past meeting.
      - `total` integer: Number of meetings returned in `meetings`.
  - object
    - `event_id` integer, required: Lumify event ID.
    - `available` boolean, required: False when draw_type is not exactly 'singles' (doubles and qualifying are out of scope for Stage-1/Stage-2) or either player_id is unresolved — every other field is omitted in that case and the call isn't billed.
    - `league_slug` string, nullable: Tour slug — 'atp' or 'wta'.
    - `draw_type` string, nullable: Event draw format. Always 'singles' when available is true. draw_type values other than 'singles' (including 'doubles' and 'qualifying') return available:false — consistent with the rest of the tennis predictive stack.
    - `windows` TennisStatsWindows
      - `recent_form` integer, required: Trailing matches covered by each player's recent_form.
      - `surface_form` integer, required: Trailing matches covered by each player's surface_form.
      - `head_to_head` integer, required: Trailing meetings considered for head_to_head.
      - `record_lookback_days` integer, required: Calendar days covered by each player's record (tour_lookback).
      - `career_surface_years` integer, nullable: Trailing calendar years covered by each player's career_surface (Stage-2).
    - `match` TennisStatsMatch
      - `surface` string, nullable: Competition surface slug (hard/clay/grass/carpet/indoor_hard/…).
      - `competition_id` integer, nullable: Lumify competition ID.
      - `competition_name` string, nullable: Tournament / competition name.
      - `tier` string, nullable: Competition tier when known (e.g. '1000', '500').
      - `round` string, nullable: Draw round label as ingested (e.g. 'Round of 16', 'Quarterfinal', 'Semifinal', 'Final') — not abbreviated codes like 'R16'.
      - `court` string, nullable: Named court within the venue when known. Not currently populated by ingest (effectively always null).
      - `status` string, nullable: Event status (scheduled/inprogress/final/…).
      - `result_type` string, nullable: How the match ended when final: regulation/retired; walkovers never went live.
      - `scoreboard` TennisStatsScoreboard
        - `sets_won` TennisStatsSetsWon, required
          - `player_1` integer, nullable: Sets won by player_1.
          - `player_2` integer, nullable: Sets won by player_2.
        - `winner_role` string, nullable: 'player_1' or 'player_2' when decided; null for upcoming/live undecided matches.
        - `sets` TennisStatsSet[]: Per-set game scores from lumify_period_scores (period_type='set'), ordered by period_num.
          - `period_num` integer, required: Set number (1-based).
          - `player_1_games` integer, nullable: Games won by player_1 in this set.
          - `player_2_games` integer, nullable: Games won by player_2 in this set.
          - `tiebreak_score` integer, nullable: Tiebreak points for this set when present on the source row. Not currently populated by ingest (effectively always null).
    - `players` TennisStatsPlayers
      - `player_1` TennisStatsPlayer
        - `player_id` integer, nullable: Lumify player ID.
        - `name` string, nullable
        - `country_code` string, nullable
        - `ranking` integer, nullable: Current singles ranking from lumify_players.tennis_ranking.
        - `ranking_points` integer, nullable: Current ranking points from lumify_players.tennis_ranking_points.
        - `rest_days` integer, nullable: Days since this player's previous completed singles match (any tour). Anchored on status final/complete only — walkovers do not reset rest; retirements do.
        - `recent_form` TennisStatsForm
          - `window` integer, required: Trailing completed singles matches considered.
          - `results` string[]: Most-recent-first W/L results from ingested match history (no draws). Counts only status final/complete — walkovers are excluded (no games played); retirements count (status final, result_type retired).
          - `sets_for` integer[]: Sets won by this player in each form match (aligned with results when scores exist).
          - `sets_against` integer[]: Sets won by the opponent in each form match (aligned with results when scores exist).
          - `surface` string, nullable: Present on surface_form only — the competition surface this window is filtered to.
        - `surface_form` TennisStatsForm
          - `window` integer, required: Trailing completed singles matches considered.
          - `results` string[]: Most-recent-first W/L results from ingested match history (no draws). Counts only status final/complete — walkovers are excluded (no games played); retirements count (status final, result_type retired).
          - `sets_for` integer[]: Sets won by this player in each form match (aligned with results when scores exist).
          - `sets_against` integer[]: Sets won by the opponent in each form match (aligned with results when scores exist).
          - `surface` string, nullable: Present on surface_form only — the competition surface this window is filtered to.
        - `record` TennisStatsRecord
          - `source` string, required: Always 'tour_lookback' — wins/losses from our DB over lookback_days (not a vendor season table).
          - `lookback_days` integer, required: Calendar days of lookback used for this record.
          - `wins` integer: Singles wins in the lookback window (status final/complete only; walkovers excluded, retirements count).
          - `losses` integer: Singles losses in the lookback window (status final/complete only; walkovers excluded, retirements count).
          - `games` integer: Matches counted (wins + losses). Walkovers are not played matches and are excluded; retirements are included.
        - `career_rates` TennisStatsCareerRates
          - `source` string, required: Always 'tennis_api' — career aggregates persisted by stats_ingest_tennis from our Stage-2 tennis data provider.
          - `window` string, required: Always 'career' — persisted career match-stats (not a trailing L10).
          - `captured_at` string, nullable: UTC timestamp when these rates were last persisted, 'YYYY-MM-DD HH:MM:SS'.
          - `hold_pct` number, nullable: Career service-hold rate (0–1) from persisted serve game counts.
          - `break_pts_converted` number, nullable: Career break-point conversion rate (0–1) on return.
          - `break_pts_saved` number, nullable: Career break-point save rate (0–1) on serve when available.
          - `first_serve_pct` number, nullable: Career first-serve-in rate (0–1) when the vendor exposes counts.
          - `first_serve_won` number, nullable: Career first-serve points won rate (0–1) when available.
          - `second_serve_won` number, nullable: Career second-serve points won rate (0–1) when available.
          - `aces` integer, nullable: Career ace count when present; null when the source does not expose aces on match-stats for this player.
          - `double_faults` integer, nullable: Career double-fault count when present; null when the vendor does not expose double faults on match-stats for this player.
        - `career_surface` TennisStatsCareerSurface
          - `source` string, required: Always 'tennis_api' — persisted surface-summary from our Stage-2 tennis data provider.
          - `window_years` integer, required: Trailing calendar years of surface W/L included (currently 3).
          - `surface` string, required: Match competition surface slug this block is filtered to (hard/clay/grass/indoor_hard/carpet).
          - `wins` integer, required: Wins on this surface in the window.
          - `losses` integer, required: Losses on this surface in the window.
          - `win_pct` number, required: wins / (wins + losses) as 0–1.
          - `captured_at` string, nullable: UTC timestamp when surface W/L was last persisted, 'YYYY-MM-DD HH:MM:SS'.
      - `player_2` TennisStatsPlayer
        - `player_id` integer, nullable: Lumify player ID.
        - `name` string, nullable
        - `country_code` string, nullable
        - `ranking` integer, nullable: Current singles ranking from lumify_players.tennis_ranking.
        - `ranking_points` integer, nullable: Current ranking points from lumify_players.tennis_ranking_points.
        - `rest_days` integer, nullable: Days since this player's previous completed singles match (any tour). Anchored on status final/complete only — walkovers do not reset rest; retirements do.
        - `recent_form` TennisStatsForm
          - `window` integer, required: Trailing completed singles matches considered.
          - `results` string[]: Most-recent-first W/L results from ingested match history (no draws). Counts only status final/complete — walkovers are excluded (no games played); retirements count (status final, result_type retired).
          - `sets_for` integer[]: Sets won by this player in each form match (aligned with results when scores exist).
          - `sets_against` integer[]: Sets won by the opponent in each form match (aligned with results when scores exist).
          - `surface` string, nullable: Present on surface_form only — the competition surface this window is filtered to.
        - `surface_form` TennisStatsForm
          - `window` integer, required: Trailing completed singles matches considered.
          - `results` string[]: Most-recent-first W/L results from ingested match history (no draws). Counts only status final/complete — walkovers are excluded (no games played); retirements count (status final, result_type retired).
          - `sets_for` integer[]: Sets won by this player in each form match (aligned with results when scores exist).
          - `sets_against` integer[]: Sets won by the opponent in each form match (aligned with results when scores exist).
          - `surface` string, nullable: Present on surface_form only — the competition surface this window is filtered to.
        - `record` TennisStatsRecord
          - `source` string, required: Always 'tour_lookback' — wins/losses from our DB over lookback_days (not a vendor season table).
          - `lookback_days` integer, required: Calendar days of lookback used for this record.
          - `wins` integer: Singles wins in the lookback window (status final/complete only; walkovers excluded, retirements count).
          - `losses` integer: Singles losses in the lookback window (status final/complete only; walkovers excluded, retirements count).
          - `games` integer: Matches counted (wins + losses). Walkovers are not played matches and are excluded; retirements are included.
        - `career_rates` TennisStatsCareerRates
          - `source` string, required: Always 'tennis_api' — career aggregates persisted by stats_ingest_tennis from our Stage-2 tennis data provider.
          - `window` string, required: Always 'career' — persisted career match-stats (not a trailing L10).
          - `captured_at` string, nullable: UTC timestamp when these rates were last persisted, 'YYYY-MM-DD HH:MM:SS'.
          - `hold_pct` number, nullable: Career service-hold rate (0–1) from persisted serve game counts.
          - `break_pts_converted` number, nullable: Career break-point conversion rate (0–1) on return.
          - `break_pts_saved` number, nullable: Career break-point save rate (0–1) on serve when available.
          - `first_serve_pct` number, nullable: Career first-serve-in rate (0–1) when the vendor exposes counts.
          - `first_serve_won` number, nullable: Career first-serve points won rate (0–1) when available.
          - `second_serve_won` number, nullable: Career second-serve points won rate (0–1) when available.
          - `aces` integer, nullable: Career ace count when present; null when the source does not expose aces on match-stats for this player.
          - `double_faults` integer, nullable: Career double-fault count when present; null when the vendor does not expose double faults on match-stats for this player.
        - `career_surface` TennisStatsCareerSurface
          - `source` string, required: Always 'tennis_api' — persisted surface-summary from our Stage-2 tennis data provider.
          - `window_years` integer, required: Trailing calendar years of surface W/L included (currently 3).
          - `surface` string, required: Match competition surface slug this block is filtered to (hard/clay/grass/indoor_hard/carpet).
          - `wins` integer, required: Wins on this surface in the window.
          - `losses` integer, required: Losses on this surface in the window.
          - `win_pct` number, required: wins / (wins + losses) as 0–1.
          - `captured_at` string, nullable: UTC timestamp when surface W/L was last persisted, 'YYYY-MM-DD HH:MM:SS'.
    - `head_to_head` TennisStatsH2H
      - `window` integer, required: Max trailing meetings considered (see windows.head_to_head).
      - `meetings` TennisStatsH2HMeeting[]: Most-recent-first prior singles meetings between these two players (status final/complete only — walkovers excluded; retirements included).
        - `event_id` integer, required: Lumify event ID of the past meeting.
        - `starts_at` string, nullable: UTC start time of that meeting, 'YYYY-MM-DD HH:MM:SS'.
        - `surface` string, nullable: Competition surface of that meeting.
        - `winner_role` string, nullable: 'player_1' or 'player_2' relative to *this* fixture's player ids (not the historical event's role labels).
        - `sets_won` TennisStatsSetsWon, required
          - `player_1` integer, nullable: Sets won by player_1.
          - `player_2` integer, nullable: Sets won by player_2.
      - `total` integer: Number of meetings returned in meetings.
  - object
    - `event_id` integer, required: Lumify event ID.
    - `available` boolean, required: False when either team hasn't resolved for this fixture yet — every other field is omitted in that case and the call isn't billed.
    - `league_slug` string, nullable: League slug — always 'nfl'.
    - `windows` NflStatsWindows
      - `recent_form` integer, required: Trailing games covered by each team's `recent_form`.
      - `rates_l5` integer, required: Trailing games covered by each team's `rates_l5`.
      - `rates_season` string, required: Always the literal string 'season' — a deliberately variable-length window (see each team's `rates_season.games`).
      - `head_to_head` integer, required: Trailing meetings between these two teams considered for `head_to_head`.
    - `teams` NflStatsTeams
      - `home` NflStatsTeam
        - `team_id` integer, nullable: Lumify team ID.
        - `name` string, nullable: Team display name.
        - `abbreviation` string, nullable: Team abbreviation, e.g. 'KC'.
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/nfl/12.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` NflStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (ties omitted).
          - `points_scored` integer[]: Points this team scored in each game, same order as `results`.
          - `points_allowed` integer[]: Points this team allowed in each game, same order as `results`.
        - `record` NflStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses.
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `points_for` integer: Total points scored this season to date.
          - `points_against` integer: Total points allowed this season to date.
          - `point_differential` integer: points_for - points_against.
        - `rates_l5` NflStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `total_yards` number, nullable: Avg. total offensive yards per game.
          - `yards_allowed` number, nullable: Avg. total yards allowed per game (opponent total_yards).
          - `passing_yards` number, nullable: Avg. net passing yards per game.
          - `rushing_yards` number, nullable: Avg. rushing yards per game.
          - `rush_attempts` number, nullable: Avg. rush attempts per game.
          - `pass_completions` number, nullable: Avg. pass completions per game.
          - `pass_attempts` number, nullable: Avg. pass attempts per game.
          - `turnovers` number, nullable: Avg. turnovers committed per game.
          - `third_down_pct` number, nullable: Third-down conversion percentage across the window: 100 × total conversions / total attempts (not an average of per-game %).
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `rates_season` NflStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `total_yards` number, nullable: Avg. total offensive yards per game.
          - `yards_allowed` number, nullable: Avg. total yards allowed per game (opponent total_yards).
          - `passing_yards` number, nullable: Avg. net passing yards per game.
          - `rushing_yards` number, nullable: Avg. rushing yards per game.
          - `rush_attempts` number, nullable: Avg. rush attempts per game.
          - `pass_completions` number, nullable: Avg. pass completions per game.
          - `pass_attempts` number, nullable: Avg. pass attempts per game.
          - `turnovers` number, nullable: Avg. turnovers committed per game.
          - `third_down_pct` number, nullable: Third-down conversion percentage across the window: 100 × total conversions / total attempts (not an average of per-game %).
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `player_box` NflStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested player-stat row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows. Settleable prop lines stay on GET /player-props.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `players` NflStatsPlayerLine[]: This game's per-player counting stats, one line per player (passing + rushing + receiving + defense + kicking fields; unused groups are null). Sorted passing_yards desc, then rushing_yards, receiving_yards, name. Raw counts only — no QB rating. Settleables live on GET /player-props.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation from this box-score row when written, else the player's season-level roster position. Per-game position is not yet stamped on every row.
            - `pass_completions` integer, nullable: Pass completions in this game.
            - `pass_attempts` integer, nullable: Pass attempts in this game.
            - `passing_yards` integer, nullable: Passing yards in this game.
            - `passing_tds` integer, nullable: Passing touchdowns in this game.
            - `interceptions` integer, nullable: Interceptions thrown in this game.
            - `rush_attempts` integer, nullable: Rush attempts in this game.
            - `rushing_yards` integer, nullable: Rushing yards in this game.
            - `rushing_tds` integer, nullable: Rushing touchdowns in this game.
            - `receptions` integer, nullable: Receptions in this game.
            - `receiving_yards` integer, nullable: Receiving yards in this game.
            - `receiving_tds` integer, nullable: Receiving touchdowns in this game.
            - `targets` integer, nullable: Targets in this game.
            - `fumbles_lost` integer, nullable: Fumbles lost in this game.
            - `tackles` number, nullable: Tackles in this game. Fractional when a tackle is split between two defenders.
            - `sacks` number, nullable: Sacks in this game. Fractional (e.g. 1.5) when a sack is split between two defenders.
            - `tackles_for_loss` number, nullable: Tackles for loss in this game. Fractional when split between two defenders.
            - `pass_deflections` integer, nullable: Pass deflections in this game.
            - `defensive_tds` integer, nullable: Defensive touchdowns in this game.
            - `def_interceptions` integer, nullable: Interceptions as a defender in this game.
            - `fg_made` integer, nullable: Field goals made in this game.
            - `fg_attempts` integer, nullable: Field goal attempts in this game.
            - `xp_made` integer, nullable: Extra points made in this game.
            - `kicking_points` integer, nullable: Total kicking points in this game.
      - `away` NflStatsTeam
        - `team_id` integer, nullable: Lumify team ID.
        - `name` string, nullable: Team display name.
        - `abbreviation` string, nullable: Team abbreviation, e.g. 'KC'.
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/nfl/12.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` NflStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (ties omitted).
          - `points_scored` integer[]: Points this team scored in each game, same order as `results`.
          - `points_allowed` integer[]: Points this team allowed in each game, same order as `results`.
        - `record` NflStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses.
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `points_for` integer: Total points scored this season to date.
          - `points_against` integer: Total points allowed this season to date.
          - `point_differential` integer: points_for - points_against.
        - `rates_l5` NflStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `total_yards` number, nullable: Avg. total offensive yards per game.
          - `yards_allowed` number, nullable: Avg. total yards allowed per game (opponent total_yards).
          - `passing_yards` number, nullable: Avg. net passing yards per game.
          - `rushing_yards` number, nullable: Avg. rushing yards per game.
          - `rush_attempts` number, nullable: Avg. rush attempts per game.
          - `pass_completions` number, nullable: Avg. pass completions per game.
          - `pass_attempts` number, nullable: Avg. pass attempts per game.
          - `turnovers` number, nullable: Avg. turnovers committed per game.
          - `third_down_pct` number, nullable: Third-down conversion percentage across the window: 100 × total conversions / total attempts (not an average of per-game %).
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `rates_season` NflStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `total_yards` number, nullable: Avg. total offensive yards per game.
          - `yards_allowed` number, nullable: Avg. total yards allowed per game (opponent total_yards).
          - `passing_yards` number, nullable: Avg. net passing yards per game.
          - `rushing_yards` number, nullable: Avg. rushing yards per game.
          - `rush_attempts` number, nullable: Avg. rush attempts per game.
          - `pass_completions` number, nullable: Avg. pass completions per game.
          - `pass_attempts` number, nullable: Avg. pass attempts per game.
          - `turnovers` number, nullable: Avg. turnovers committed per game.
          - `third_down_pct` number, nullable: Third-down conversion percentage across the window: 100 × total conversions / total attempts (not an average of per-game %).
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `player_box` NflStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested player-stat row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows. Settleable prop lines stay on GET /player-props.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `players` NflStatsPlayerLine[]: This game's per-player counting stats, one line per player (passing + rushing + receiving + defense + kicking fields; unused groups are null). Sorted passing_yards desc, then rushing_yards, receiving_yards, name. Raw counts only — no QB rating. Settleables live on GET /player-props.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation from this box-score row when written, else the player's season-level roster position. Per-game position is not yet stamped on every row.
            - `pass_completions` integer, nullable: Pass completions in this game.
            - `pass_attempts` integer, nullable: Pass attempts in this game.
            - `passing_yards` integer, nullable: Passing yards in this game.
            - `passing_tds` integer, nullable: Passing touchdowns in this game.
            - `interceptions` integer, nullable: Interceptions thrown in this game.
            - `rush_attempts` integer, nullable: Rush attempts in this game.
            - `rushing_yards` integer, nullable: Rushing yards in this game.
            - `rushing_tds` integer, nullable: Rushing touchdowns in this game.
            - `receptions` integer, nullable: Receptions in this game.
            - `receiving_yards` integer, nullable: Receiving yards in this game.
            - `receiving_tds` integer, nullable: Receiving touchdowns in this game.
            - `targets` integer, nullable: Targets in this game.
            - `fumbles_lost` integer, nullable: Fumbles lost in this game.
            - `tackles` number, nullable: Tackles in this game. Fractional when a tackle is split between two defenders.
            - `sacks` number, nullable: Sacks in this game. Fractional (e.g. 1.5) when a sack is split between two defenders.
            - `tackles_for_loss` number, nullable: Tackles for loss in this game. Fractional when split between two defenders.
            - `pass_deflections` integer, nullable: Pass deflections in this game.
            - `defensive_tds` integer, nullable: Defensive touchdowns in this game.
            - `def_interceptions` integer, nullable: Interceptions as a defender in this game.
            - `fg_made` integer, nullable: Field goals made in this game.
            - `fg_attempts` integer, nullable: Field goal attempts in this game.
            - `xp_made` integer, nullable: Extra points made in this game.
            - `kicking_points` integer, nullable: Total kicking points in this game.
    - `head_to_head` NflStatsHeadToHead
      - `window` integer, required: Max trailing meetings considered (see `windows.head_to_head`).
      - `meetings` NflStatsHeadToHeadMeeting[]: Most-recent-first past meetings between these two teams, up to `window`.
        - `home_points` integer, nullable: Points scored by this event's home team in that past meeting.
        - `away_points` integer, nullable: Points scored by this event's away team in that past meeting.
      - `total` integer: Number of meetings returned in `meetings`.
  - object
    - `event_id` integer, required: Lumify event ID.
    - `available` boolean, required: False when either team hasn't resolved for this fixture yet — every other field is omitted in that case and the call isn't billed.
    - `league_slug` string, nullable: League slug — always 'nba'.
    - `windows` NbaStatsWindows
      - `recent_form` integer, required: Trailing games covered by each team's `recent_form`.
      - `rates_l5` integer, required: Trailing games covered by each team's `rates_l5`.
      - `rates_season` string, required: Always the literal string 'season' — a deliberately variable-length window (see each team's `rates_season.games`).
      - `head_to_head` integer, required: Trailing meetings between these two teams considered for `head_to_head`.
    - `teams` NbaStatsTeams
      - `home` NbaStatsTeam
        - `team_id` integer, nullable: Lumify team ID.
        - `name` string, nullable: Team display name.
        - `abbreviation` string, nullable: Team abbreviation, e.g. 'BOS'.
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/nba/35.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` NbaStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (ties don't occur in NBA).
          - `points_scored` integer[]: Points this team scored in each game, same order as `results`.
          - `points_allowed` integer[]: Points this team allowed in each game, same order as `results`.
        - `record` NbaStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses.
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `points_for` integer: Total points scored this season to date.
          - `points_against` integer: Total points allowed this season to date.
          - `point_differential` integer: points_for - points_against.
        - `rates_l5` NbaStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `rebounds` number, nullable: Avg. total rebounds per game.
          - `assists` number, nullable: Avg. assists per game.
          - `steals` number, nullable: Avg. steals per game.
          - `blocks` number, nullable: Avg. blocks per game.
          - `turnovers` number, nullable: Avg. turnovers per game.
          - `fouls` number, nullable: Avg. personal fouls per game.
          - `fg_pct` number, nullable: Field goal % over the window (0-100): ratio-of-sums of field_goals_made / field_goals_attempted across games — not an average of per-game percentages.
          - `three_point_pct` number, nullable: 3-point field goal % over the window (0-100): ratio-of-sums of three_pointers_made / three_pointers_attempted.
          - `free_throw_pct` number, nullable: Free throw % over the window (0-100): ratio-of-sums of free_throws_made / free_throws_attempted.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `rates_season` NbaStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `rebounds` number, nullable: Avg. total rebounds per game.
          - `assists` number, nullable: Avg. assists per game.
          - `steals` number, nullable: Avg. steals per game.
          - `blocks` number, nullable: Avg. blocks per game.
          - `turnovers` number, nullable: Avg. turnovers per game.
          - `fouls` number, nullable: Avg. personal fouls per game.
          - `fg_pct` number, nullable: Field goal % over the window (0-100): ratio-of-sums of field_goals_made / field_goals_attempted across games — not an average of per-game percentages.
          - `three_point_pct` number, nullable: 3-point field goal % over the window (0-100): ratio-of-sums of three_pointers_made / three_pointers_attempted.
          - `free_throw_pct` number, nullable: Free throw % over the window (0-100): ratio-of-sums of free_throws_made / free_throws_attempted.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `player_box` NbaStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested player-stat row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows. Settleable prop lines stay on GET /player-props.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `players` NbaStatsPlayerLine[]: This game's per-player counting stats, sorted points desc then name. Raw counts only — no per-player FG%/3P%/FT%. Settleables (including combo and double-double) live on GET /player-props.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation from this box-score row when written, else the player's season-level roster position.
            - `points` integer, nullable: Points in this game.
            - `rebounds` integer, nullable: Rebounds in this game.
            - `assists` integer, nullable: Assists in this game.
            - `turnovers` integer, nullable: Turnovers in this game.
            - `steals` integer, nullable: Steals in this game.
            - `blocks` integer, nullable: Blocks in this game.
            - `fouls` integer, nullable: Personal fouls in this game.
            - `three_pointers_made` integer, nullable: Three-pointers made in this game.
            - `three_pointers_attempted` integer, nullable: Three-pointers attempted in this game.
      - `away` NbaStatsTeam
        - `team_id` integer, nullable: Lumify team ID.
        - `name` string, nullable: Team display name.
        - `abbreviation` string, nullable: Team abbreviation, e.g. 'BOS'.
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/nba/35.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` NbaStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (ties don't occur in NBA).
          - `points_scored` integer[]: Points this team scored in each game, same order as `results`.
          - `points_allowed` integer[]: Points this team allowed in each game, same order as `results`.
        - `record` NbaStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses.
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `points_for` integer: Total points scored this season to date.
          - `points_against` integer: Total points allowed this season to date.
          - `point_differential` integer: points_for - points_against.
        - `rates_l5` NbaStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `rebounds` number, nullable: Avg. total rebounds per game.
          - `assists` number, nullable: Avg. assists per game.
          - `steals` number, nullable: Avg. steals per game.
          - `blocks` number, nullable: Avg. blocks per game.
          - `turnovers` number, nullable: Avg. turnovers per game.
          - `fouls` number, nullable: Avg. personal fouls per game.
          - `fg_pct` number, nullable: Field goal % over the window (0-100): ratio-of-sums of field_goals_made / field_goals_attempted across games — not an average of per-game percentages.
          - `three_point_pct` number, nullable: 3-point field goal % over the window (0-100): ratio-of-sums of three_pointers_made / three_pointers_attempted.
          - `free_throw_pct` number, nullable: Free throw % over the window (0-100): ratio-of-sums of free_throws_made / free_throws_attempted.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `rates_season` NbaStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `rebounds` number, nullable: Avg. total rebounds per game.
          - `assists` number, nullable: Avg. assists per game.
          - `steals` number, nullable: Avg. steals per game.
          - `blocks` number, nullable: Avg. blocks per game.
          - `turnovers` number, nullable: Avg. turnovers per game.
          - `fouls` number, nullable: Avg. personal fouls per game.
          - `fg_pct` number, nullable: Field goal % over the window (0-100): ratio-of-sums of field_goals_made / field_goals_attempted across games — not an average of per-game percentages.
          - `three_point_pct` number, nullable: 3-point field goal % over the window (0-100): ratio-of-sums of three_pointers_made / three_pointers_attempted.
          - `free_throw_pct` number, nullable: Free throw % over the window (0-100): ratio-of-sums of free_throws_made / free_throws_attempted.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `player_box` NbaStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested player-stat row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows. Settleable prop lines stay on GET /player-props.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `players` NbaStatsPlayerLine[]: This game's per-player counting stats, sorted points desc then name. Raw counts only — no per-player FG%/3P%/FT%. Settleables (including combo and double-double) live on GET /player-props.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation from this box-score row when written, else the player's season-level roster position.
            - `points` integer, nullable: Points in this game.
            - `rebounds` integer, nullable: Rebounds in this game.
            - `assists` integer, nullable: Assists in this game.
            - `turnovers` integer, nullable: Turnovers in this game.
            - `steals` integer, nullable: Steals in this game.
            - `blocks` integer, nullable: Blocks in this game.
            - `fouls` integer, nullable: Personal fouls in this game.
            - `three_pointers_made` integer, nullable: Three-pointers made in this game.
            - `three_pointers_attempted` integer, nullable: Three-pointers attempted in this game.
    - `head_to_head` NbaStatsHeadToHead
      - `window` integer, required: Max trailing meetings considered (see `windows.head_to_head`).
      - `meetings` NbaStatsHeadToHeadMeeting[]: Most-recent-first past meetings between these two teams, up to `window`.
        - `home_points` integer, nullable: Points scored by this event's home team in that past meeting.
        - `away_points` integer, nullable: Points scored by this event's away team in that past meeting.
      - `total` integer: Number of meetings returned in `meetings`.
  - object
    - `event_id` integer, required: Lumify event ID.
    - `available` boolean, required: False when either team hasn't resolved for this fixture yet — every other field is omitted in that case and the call isn't billed.
    - `league_slug` string, nullable: League slug — always 'nhl'.
    - `windows` NhlStatsWindows
      - `recent_form` integer, required: Trailing games covered by each team's `recent_form`.
      - `rates_l5` integer, required: Trailing games covered by each team's `rates_l5`.
      - `rates_season` string, required: Always the literal string 'season' — a deliberately variable-length window (see each team's `rates_season.games`).
      - `head_to_head` integer, required: Trailing meetings between these two teams considered for `head_to_head`.
    - `teams` NhlStatsTeams
      - `home` NhlStatsTeam
        - `team_id` integer, nullable: Lumify team ID.
        - `name` string, nullable: Team display name.
        - `abbreviation` string, nullable: Team abbreviation, e.g. 'BOS'.
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/nhl/124.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` NhlStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (NHL games always resolve via OT/shootout).
          - `goals_scored` integer[]: Goals this team scored in each game, same order as `results`.
          - `goals_allowed` integer[]: Goals this team allowed in each game, same order as `results`.
        - `record` NhlStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses (includes OT/shootout losses).
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `goals_for` integer: Total goals scored this season to date.
          - `goals_against` integer: Total goals allowed this season to date.
          - `goal_differential` integer: goals_for - goals_against.
        - `rates_l5` NhlStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `shots_on_goal` number, nullable: Avg. shots on goal per game.
          - `hits` number, nullable: Avg. hits per game.
          - `penalty_minutes` number, nullable: Avg. penalty minutes per game (skaters + goalies).
          - `power_play_goals` number, nullable: Avg. power play goals per game.
          - `giveaways` number, nullable: Avg. giveaways per game.
          - `takeaways` number, nullable: Avg. takeaways per game.
          - `blocked_shots` number, nullable: Avg. shots blocked per game.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `rates_season` NhlStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `shots_on_goal` number, nullable: Avg. shots on goal per game.
          - `hits` number, nullable: Avg. hits per game.
          - `penalty_minutes` number, nullable: Avg. penalty minutes per game (skaters + goalies).
          - `power_play_goals` number, nullable: Avg. power play goals per game.
          - `giveaways` number, nullable: Avg. giveaways per game.
          - `takeaways` number, nullable: Avg. takeaways per game.
          - `blocked_shots` number, nullable: Avg. shots blocked per game.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `player_box` NhlStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested skater or goalie row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows. Settleable prop lines stay on GET /player-props.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `skaters` NhlStatsSkaterLine[]: This game's skater lines, sorted goals desc then assists then name. Raw counting stats only. Settleables live on GET /player-props.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation from this box-score row when written, else the player's season-level roster position.
            - `goals` integer, nullable: Goals in this game.
            - `assists` integer, nullable: Assists in this game. Persisted as slug `assists_nhl` (NBA owns global `assists`).
            - `plus_minus` integer, nullable: Plus/minus in this game.
            - `penalty_minutes` integer, nullable: Penalty minutes in this game.
            - `hits` integer, nullable: Body-checks in this game. Persisted as slug `hits_nhl` (MLB owns global `hits`).
            - `power_play_goals` integer, nullable: Power-play goals in this game.
            - `shots_on_goal` integer, nullable: Shots on goal in this game.
            - `blocked_shots` integer, nullable: Blocked shots in this game.
            - `giveaways` integer, nullable: Giveaways in this game.
            - `takeaways` integer, nullable: Takeaways in this game.
          - `goalies` NhlStatsGoalieLine[]: This game's goalie lines, sorted saves desc then name. A player with both skater-only and goalie-only slugs appears on both lists.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Typically 'G'. From this box-score row when written, else roster position.
            - `saves` integer, nullable: Saves in this game.
            - `goals_against` integer, nullable: Goals allowed in this game.
            - `shots_against` integer, nullable: Shots faced in this game.
            - `penalty_minutes` integer, nullable: Penalty minutes in this game.
      - `away` NhlStatsTeam
        - `team_id` integer, nullable: Lumify team ID.
        - `name` string, nullable: Team display name.
        - `abbreviation` string, nullable: Team abbreviation, e.g. 'BOS'.
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/nhl/124.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` NhlStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (NHL games always resolve via OT/shootout).
          - `goals_scored` integer[]: Goals this team scored in each game, same order as `results`.
          - `goals_allowed` integer[]: Goals this team allowed in each game, same order as `results`.
        - `record` NhlStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses (includes OT/shootout losses).
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `goals_for` integer: Total goals scored this season to date.
          - `goals_against` integer: Total goals allowed this season to date.
          - `goal_differential` integer: goals_for - goals_against.
        - `rates_l5` NhlStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `shots_on_goal` number, nullable: Avg. shots on goal per game.
          - `hits` number, nullable: Avg. hits per game.
          - `penalty_minutes` number, nullable: Avg. penalty minutes per game (skaters + goalies).
          - `power_play_goals` number, nullable: Avg. power play goals per game.
          - `giveaways` number, nullable: Avg. giveaways per game.
          - `takeaways` number, nullable: Avg. takeaways per game.
          - `blocked_shots` number, nullable: Avg. shots blocked per game.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `rates_season` NhlStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `shots_on_goal` number, nullable: Avg. shots on goal per game.
          - `hits` number, nullable: Avg. hits per game.
          - `penalty_minutes` number, nullable: Avg. penalty minutes per game (skaters + goalies).
          - `power_play_goals` number, nullable: Avg. power play goals per game.
          - `giveaways` number, nullable: Avg. giveaways per game.
          - `takeaways` number, nullable: Avg. takeaways per game.
          - `blocked_shots` number, nullable: Avg. shots blocked per game.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `player_box` NhlStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested skater or goalie row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows. Settleable prop lines stay on GET /player-props.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `skaters` NhlStatsSkaterLine[]: This game's skater lines, sorted goals desc then assists then name. Raw counting stats only. Settleables live on GET /player-props.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation from this box-score row when written, else the player's season-level roster position.
            - `goals` integer, nullable: Goals in this game.
            - `assists` integer, nullable: Assists in this game. Persisted as slug `assists_nhl` (NBA owns global `assists`).
            - `plus_minus` integer, nullable: Plus/minus in this game.
            - `penalty_minutes` integer, nullable: Penalty minutes in this game.
            - `hits` integer, nullable: Body-checks in this game. Persisted as slug `hits_nhl` (MLB owns global `hits`).
            - `power_play_goals` integer, nullable: Power-play goals in this game.
            - `shots_on_goal` integer, nullable: Shots on goal in this game.
            - `blocked_shots` integer, nullable: Blocked shots in this game.
            - `giveaways` integer, nullable: Giveaways in this game.
            - `takeaways` integer, nullable: Takeaways in this game.
          - `goalies` NhlStatsGoalieLine[]: This game's goalie lines, sorted saves desc then name. A player with both skater-only and goalie-only slugs appears on both lists.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Typically 'G'. From this box-score row when written, else roster position.
            - `saves` integer, nullable: Saves in this game.
            - `goals_against` integer, nullable: Goals allowed in this game.
            - `shots_against` integer, nullable: Shots faced in this game.
            - `penalty_minutes` integer, nullable: Penalty minutes in this game.
    - `head_to_head` NhlStatsHeadToHead
      - `window` integer, required: Max trailing meetings considered (see `windows.head_to_head`).
      - `meetings` NhlStatsHeadToHeadMeeting[]: Most-recent-first past meetings between these two teams, up to `window`.
        - `home_goals` integer, nullable: Goals scored by this event's home team in that past meeting.
        - `away_goals` integer, nullable: Goals scored by this event's away team in that past meeting.
      - `total` integer: Number of meetings returned in `meetings`.
  - object
    - `event_id` integer, required: Lumify event ID.
    - `available` boolean, required: False when either team hasn't resolved for this fixture yet — every other field is omitted in that case and the call isn't billed.
    - `league_slug` string, nullable: League slug — always 'ncaaf'.
    - `windows` NcaafStatsWindows
      - `recent_form` integer, required: Trailing games covered by each team's `recent_form`.
      - `rates_l5` integer, required: Trailing games covered by each team's `rates_l5`.
      - `rates_season` string, required: Always the literal string 'season' — a deliberately variable-length window (see each team's `rates_season.games`).
      - `head_to_head` integer, required: Trailing meetings between these two teams considered for `head_to_head`.
    - `teams` NcaafStatsTeams
      - `home` NcaafStatsTeam
        - `team_id` integer, nullable: Lumify team ID.
        - `name` string, nullable: Team display name.
        - `abbreviation` string, nullable: Team abbreviation, e.g. 'KC'.
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/ncaaf/153.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` NcaafStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (ties omitted).
          - `points_scored` integer[]: Points this team scored in each game, same order as `results`.
          - `points_allowed` integer[]: Points this team allowed in each game, same order as `results`.
        - `record` NcaafStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses.
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `points_for` integer: Total points scored this season to date.
          - `points_against` integer: Total points allowed this season to date.
          - `point_differential` integer: points_for - points_against.
        - `rates_l5` NcaafStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `total_yards` number, nullable: Avg. total offensive yards per game.
          - `yards_allowed` number, nullable: Avg. total yards allowed per game (opponent total_yards).
          - `passing_yards` number, nullable: Avg. net passing yards per game.
          - `rushing_yards` number, nullable: Avg. rushing yards per game.
          - `rush_attempts` number, nullable: Avg. rush attempts per game.
          - `pass_completions` number, nullable: Avg. pass completions per game.
          - `pass_attempts` number, nullable: Avg. pass attempts per game.
          - `turnovers` number, nullable: Avg. turnovers committed per game.
          - `third_down_pct` number, nullable: Third-down conversion percentage across the window: 100 × total conversions / total attempts (not an average of per-game %).
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `rates_season` NcaafStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `total_yards` number, nullable: Avg. total offensive yards per game.
          - `yards_allowed` number, nullable: Avg. total yards allowed per game (opponent total_yards).
          - `passing_yards` number, nullable: Avg. net passing yards per game.
          - `rushing_yards` number, nullable: Avg. rushing yards per game.
          - `rush_attempts` number, nullable: Avg. rush attempts per game.
          - `pass_completions` number, nullable: Avg. pass completions per game.
          - `pass_attempts` number, nullable: Avg. pass attempts per game.
          - `turnovers` number, nullable: Avg. turnovers committed per game.
          - `third_down_pct` number, nullable: Third-down conversion percentage across the window: 100 × total conversions / total attempts (not an average of per-game %).
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `player_box` NcaafStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested player-stat row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows. Settleable prop lines stay on GET /player-props.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `players` NcaafStatsPlayerLine[]: This game's per-player counting stats, one line per player. Football sibling of the NFL player_box — same counting fields, college-football ingest. Sorted passing_yards desc, then rushing_yards, receiving_yards, name.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation from this box-score row when written, else the player's season-level roster position.
            - `pass_completions` integer, nullable: Pass completions in this game.
            - `pass_attempts` integer, nullable: Pass attempts in this game.
            - `passing_yards` integer, nullable: Passing yards in this game.
            - `passing_tds` integer, nullable: Passing touchdowns in this game.
            - `interceptions` integer, nullable: Interceptions thrown in this game.
            - `rush_attempts` integer, nullable: Rush attempts in this game.
            - `rushing_yards` integer, nullable: Rushing yards in this game.
            - `rushing_tds` integer, nullable: Rushing touchdowns in this game.
            - `receptions` integer, nullable: Receptions in this game.
            - `receiving_yards` integer, nullable: Receiving yards in this game.
            - `receiving_tds` integer, nullable: Receiving touchdowns in this game.
            - `targets` integer, nullable: Targets in this game.
            - `fumbles_lost` integer, nullable: Fumbles lost in this game.
            - `tackles` number, nullable: Tackles in this game. Fractional when a tackle is split between two defenders.
            - `sacks` number, nullable: Sacks in this game. Fractional (e.g. 1.5) when a sack is split between two defenders.
            - `tackles_for_loss` number, nullable: Tackles for loss in this game. Fractional when split between two defenders.
            - `pass_deflections` integer, nullable: Pass deflections in this game.
            - `defensive_tds` integer, nullable: Defensive touchdowns in this game.
            - `def_interceptions` integer, nullable: Interceptions as a defender in this game.
            - `fg_made` integer, nullable: Field goals made in this game.
            - `fg_attempts` integer, nullable: Field goal attempts in this game.
            - `xp_made` integer, nullable: Extra points made in this game.
            - `kicking_points` integer, nullable: Total kicking points in this game.
      - `away` NcaafStatsTeam
        - `team_id` integer, nullable: Lumify team ID.
        - `name` string, nullable: Team display name.
        - `abbreviation` string, nullable: Team abbreviation, e.g. 'KC'.
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/ncaaf/153.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` NcaafStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (ties omitted).
          - `points_scored` integer[]: Points this team scored in each game, same order as `results`.
          - `points_allowed` integer[]: Points this team allowed in each game, same order as `results`.
        - `record` NcaafStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses.
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `points_for` integer: Total points scored this season to date.
          - `points_against` integer: Total points allowed this season to date.
          - `point_differential` integer: points_for - points_against.
        - `rates_l5` NcaafStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `total_yards` number, nullable: Avg. total offensive yards per game.
          - `yards_allowed` number, nullable: Avg. total yards allowed per game (opponent total_yards).
          - `passing_yards` number, nullable: Avg. net passing yards per game.
          - `rushing_yards` number, nullable: Avg. rushing yards per game.
          - `rush_attempts` number, nullable: Avg. rush attempts per game.
          - `pass_completions` number, nullable: Avg. pass completions per game.
          - `pass_attempts` number, nullable: Avg. pass attempts per game.
          - `turnovers` number, nullable: Avg. turnovers committed per game.
          - `third_down_pct` number, nullable: Third-down conversion percentage across the window: 100 × total conversions / total attempts (not an average of per-game %).
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `rates_season` NcaafStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `total_yards` number, nullable: Avg. total offensive yards per game.
          - `yards_allowed` number, nullable: Avg. total yards allowed per game (opponent total_yards).
          - `passing_yards` number, nullable: Avg. net passing yards per game.
          - `rushing_yards` number, nullable: Avg. rushing yards per game.
          - `rush_attempts` number, nullable: Avg. rush attempts per game.
          - `pass_completions` number, nullable: Avg. pass completions per game.
          - `pass_attempts` number, nullable: Avg. pass attempts per game.
          - `turnovers` number, nullable: Avg. turnovers committed per game.
          - `third_down_pct` number, nullable: Third-down conversion percentage across the window: 100 × total conversions / total attempts (not an average of per-game %).
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `player_box` NcaafStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested player-stat row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows. Settleable prop lines stay on GET /player-props.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `players` NcaafStatsPlayerLine[]: This game's per-player counting stats, one line per player. Football sibling of the NFL player_box — same counting fields, college-football ingest. Sorted passing_yards desc, then rushing_yards, receiving_yards, name.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation from this box-score row when written, else the player's season-level roster position.
            - `pass_completions` integer, nullable: Pass completions in this game.
            - `pass_attempts` integer, nullable: Pass attempts in this game.
            - `passing_yards` integer, nullable: Passing yards in this game.
            - `passing_tds` integer, nullable: Passing touchdowns in this game.
            - `interceptions` integer, nullable: Interceptions thrown in this game.
            - `rush_attempts` integer, nullable: Rush attempts in this game.
            - `rushing_yards` integer, nullable: Rushing yards in this game.
            - `rushing_tds` integer, nullable: Rushing touchdowns in this game.
            - `receptions` integer, nullable: Receptions in this game.
            - `receiving_yards` integer, nullable: Receiving yards in this game.
            - `receiving_tds` integer, nullable: Receiving touchdowns in this game.
            - `targets` integer, nullable: Targets in this game.
            - `fumbles_lost` integer, nullable: Fumbles lost in this game.
            - `tackles` number, nullable: Tackles in this game. Fractional when a tackle is split between two defenders.
            - `sacks` number, nullable: Sacks in this game. Fractional (e.g. 1.5) when a sack is split between two defenders.
            - `tackles_for_loss` number, nullable: Tackles for loss in this game. Fractional when split between two defenders.
            - `pass_deflections` integer, nullable: Pass deflections in this game.
            - `defensive_tds` integer, nullable: Defensive touchdowns in this game.
            - `def_interceptions` integer, nullable: Interceptions as a defender in this game.
            - `fg_made` integer, nullable: Field goals made in this game.
            - `fg_attempts` integer, nullable: Field goal attempts in this game.
            - `xp_made` integer, nullable: Extra points made in this game.
            - `kicking_points` integer, nullable: Total kicking points in this game.
    - `head_to_head` NcaafStatsHeadToHead
      - `window` integer, required: Max trailing meetings considered (see `windows.head_to_head`).
      - `meetings` NcaafStatsHeadToHeadMeeting[]: Most-recent-first past meetings between these two teams, up to `window`.
        - `home_points` integer, nullable: Points scored by this event's home team in that past meeting.
        - `away_points` integer, nullable: Points scored by this event's away team in that past meeting.
      - `total` integer: Number of meetings returned in `meetings`.
  - object
    - `event_id` integer, required: Lumify event ID.
    - `available` boolean, required: False when either team hasn't resolved for this fixture yet — every other field is omitted in that case and the call isn't billed.
    - `league_slug` string, nullable: League slug — always 'ncaab'.
    - `windows` NcaabStatsWindows
      - `recent_form` integer, required: Trailing games covered by each team's `recent_form`.
      - `rates_l5` integer, required: Trailing games covered by each team's `rates_l5`.
      - `rates_season` string, required: Always the literal string 'season' — a deliberately variable-length window (see each team's `rates_season.games`).
      - `head_to_head` integer, required: Trailing meetings between these two teams considered for `head_to_head`.
    - `teams` NcaabStatsTeams
      - `home` NcaabStatsTeam
        - `team_id` integer, nullable: Lumify team ID.
        - `name` string, nullable: Team display name.
        - `abbreviation` string, nullable: Team abbreviation, e.g. 'BOS'.
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/ncaab/150.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` NcaabStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (ties don't occur in NCAAB).
          - `points_scored` integer[]: Points this team scored in each game, same order as `results`.
          - `points_allowed` integer[]: Points this team allowed in each game, same order as `results`.
        - `record` NcaabStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses.
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `points_for` integer: Total points scored this season to date.
          - `points_against` integer: Total points allowed this season to date.
          - `point_differential` integer: points_for - points_against.
        - `rates_l5` NcaabStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `rebounds` number, nullable: Avg. total rebounds per game.
          - `assists` number, nullable: Avg. assists per game.
          - `steals` number, nullable: Avg. steals per game.
          - `blocks` number, nullable: Avg. blocks per game.
          - `turnovers` number, nullable: Avg. turnovers per game.
          - `fouls` number, nullable: Avg. personal fouls per game.
          - `fg_pct` number, nullable: Field goal % over the window (0-100): ratio-of-sums of field_goals_made / field_goals_attempted across games — not an average of per-game percentages.
          - `three_point_pct` number, nullable: 3-point field goal % over the window (0-100): ratio-of-sums of three_pointers_made / three_pointers_attempted.
          - `free_throw_pct` number, nullable: Free throw % over the window (0-100): ratio-of-sums of free_throws_made / free_throws_attempted.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `rates_season` NcaabStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `rebounds` number, nullable: Avg. total rebounds per game.
          - `assists` number, nullable: Avg. assists per game.
          - `steals` number, nullable: Avg. steals per game.
          - `blocks` number, nullable: Avg. blocks per game.
          - `turnovers` number, nullable: Avg. turnovers per game.
          - `fouls` number, nullable: Avg. personal fouls per game.
          - `fg_pct` number, nullable: Field goal % over the window (0-100): ratio-of-sums of field_goals_made / field_goals_attempted across games — not an average of per-game percentages.
          - `three_point_pct` number, nullable: 3-point field goal % over the window (0-100): ratio-of-sums of three_pointers_made / three_pointers_attempted.
          - `free_throw_pct` number, nullable: Free throw % over the window (0-100): ratio-of-sums of free_throws_made / free_throws_attempted.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `player_box` NcaabStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested player-stat row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows. Settleable prop lines stay on GET /player-props.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `players` NcaabStatsPlayerLine[]: This game's per-player counting stats. Basketball sibling of the NBA player_box — same counting fields, college-basketball ingest. Sorted points desc then name.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation from this box-score row when written, else the player's season-level roster position.
            - `points` integer, nullable: Points in this game.
            - `rebounds` integer, nullable: Rebounds in this game.
            - `assists` integer, nullable: Assists in this game.
            - `turnovers` integer, nullable: Turnovers in this game.
            - `steals` integer, nullable: Steals in this game.
            - `blocks` integer, nullable: Blocks in this game.
            - `fouls` integer, nullable: Personal fouls in this game.
            - `three_pointers_made` integer, nullable: Three-pointers made in this game.
            - `three_pointers_attempted` integer, nullable: Three-pointers attempted in this game.
      - `away` NcaabStatsTeam
        - `team_id` integer, nullable: Lumify team ID.
        - `name` string, nullable: Team display name.
        - `abbreviation` string, nullable: Team abbreviation, e.g. 'BOS'.
        - `image_url` string, nullable: Lumify media URL for the team logo (e.g. https://lumify.ai/media/teams/ncaab/150.png). Null until the logo ingest job has published the asset. Never a vendor CDN or raw GCS URL.
        - `rest_days` integer, nullable: Days since this team's previous completed game.
        - `recent_form` NcaabStatsRecentForm
          - `window` integer, required: Number of trailing completed games this form line covers.
          - `results` string[]: Most-recent-first results over `window`: 'W' or 'L' (ties don't occur in NCAAB).
          - `points_scored` integer[]: Points this team scored in each game, same order as `results`.
          - `points_allowed` integer[]: Points this team allowed in each game, same order as `results`.
        - `record` NcaabStatsRecord
          - `source` string, nullable: Provenance tag, e.g. 'season_to_date'.
          - `wins` integer: Season-to-date wins.
          - `losses` integer: Season-to-date losses.
          - `games` integer: Season-to-date completed games.
          - `win_pct` number, nullable: wins / games. Null with zero games.
          - `points_for` integer: Total points scored this season to date.
          - `points_against` integer: Total points allowed this season to date.
          - `point_differential` integer: points_for - points_against.
        - `rates_l5` NcaabStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `rebounds` number, nullable: Avg. total rebounds per game.
          - `assists` number, nullable: Avg. assists per game.
          - `steals` number, nullable: Avg. steals per game.
          - `blocks` number, nullable: Avg. blocks per game.
          - `turnovers` number, nullable: Avg. turnovers per game.
          - `fouls` number, nullable: Avg. personal fouls per game.
          - `fg_pct` number, nullable: Field goal % over the window (0-100): ratio-of-sums of field_goals_made / field_goals_attempted across games — not an average of per-game percentages.
          - `three_point_pct` number, nullable: 3-point field goal % over the window (0-100): ratio-of-sums of three_pointers_made / three_pointers_attempted.
          - `free_throw_pct` number, nullable: Free throw % over the window (0-100): ratio-of-sums of free_throws_made / free_throws_attempted.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `rates_season` NcaabStatsRatesBlock
          - `source` string, nullable: Provenance tag, e.g. 'event_stats_avg' (persisted team box scores).
          - `window` string, nullable: Which rolling window this block covers: 'l5' (see `window_size`) or 'season' (variable length — see `games`).
          - `window_size` integer, nullable: Fixed sample depth when the window has one (e.g. 5 for 'l5'). Omitted for 'season'.
          - `games` integer: Games with team box-score data in this aggregate.
          - `rebounds` number, nullable: Avg. total rebounds per game.
          - `assists` number, nullable: Avg. assists per game.
          - `steals` number, nullable: Avg. steals per game.
          - `blocks` number, nullable: Avg. blocks per game.
          - `turnovers` number, nullable: Avg. turnovers per game.
          - `fouls` number, nullable: Avg. personal fouls per game.
          - `fg_pct` number, nullable: Field goal % over the window (0-100): ratio-of-sums of field_goals_made / field_goals_attempted across games — not an average of per-game percentages.
          - `three_point_pct` number, nullable: 3-point field goal % over the window (0-100): ratio-of-sums of three_pointers_made / three_pointers_attempted.
          - `free_throw_pct` number, nullable: Free throw % over the window (0-100): ratio-of-sums of free_throws_made / free_throws_attempted.
          - `field_games` object, nullable: Per-metric sample counts (a box can omit a stat even when `games` is higher).
        - `player_box` NcaabStatsPlayerBox
          - `available` boolean, required: False until this event has at least one ingested player-stat row for this side. Pregame stays available:false. In-progress and delayed games become available once the live box refresh has written rows. Settleable prop lines stay on GET /player-props.
          - `as_of` string, nullable: ISO timestamp of the newest ingested player-stat row on this side. Null when available is false.
          - `players` NcaabStatsPlayerLine[]: This game's per-player counting stats. Basketball sibling of the NBA player_box — same counting fields, college-basketball ingest. Sorted points desc then name.
            - `player_id` integer, required: Lumify player ID.
            - `name` string, nullable: Player full name.
            - `position` string, nullable: Position abbreviation from this box-score row when written, else the player's season-level roster position.
            - `points` integer, nullable: Points in this game.
            - `rebounds` integer, nullable: Rebounds in this game.
            - `assists` integer, nullable: Assists in this game.
            - `turnovers` integer, nullable: Turnovers in this game.
            - `steals` integer, nullable: Steals in this game.
            - `blocks` integer, nullable: Blocks in this game.
            - `fouls` integer, nullable: Personal fouls in this game.
            - `three_pointers_made` integer, nullable: Three-pointers made in this game.
            - `three_pointers_attempted` integer, nullable: Three-pointers attempted in this game.
    - `head_to_head` NcaabStatsHeadToHead
      - `window` integer, required: Max trailing meetings considered (see `windows.head_to_head`).
      - `meetings` NcaabStatsHeadToHeadMeeting[]: Most-recent-first past meetings between these two teams, up to `window`.
        - `home_points` integer, nullable: Points scored by this event's home team in that past meeting.
        - `away_points` integer, nullable: Points scored by this event's away team in that past meeting.
      - `total` integer: Number of meetings returned in `meetings`.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/lumify/apis/lumify-sports-intelligence-api.md) · [All operations](https://skmtc.dev/lumify/apis/lumify-sports-intelligence-api/llms.txt) · [OpenAPI document](https://skmtc.dev/lumify/apis/lumify-sports-intelligence-api/revisions/f91ea41a2606?raw)
