# Get team logo PNG.

Returns the team's logo as an `image/png` binary response with a
`Cache-Control: public, max-age=604800` header (7-day client cache).

Logos are served through a cached image proxy, so clients always hit a
stable URL on this API regardless of the upstream source.

`team_id` must be the UUID-backed team id used by the logo asset store.
Returns `404` if no logo is available for the team.

```json
{
  "openapi": "3.2.0",
  "info": {
    "title": "Stat Engine API",
    "description": "Normalized, source-agnostic sports data API covering NBA, MLB, NFL, NHL, KBO, NCAA (basketball and football), and major soccer competitions (EPL, La Liga, Bundesliga, Serie A, Ligue 1, UCL, MLS, FIFA tournaments).\n\nEntities — persons, teams, competitions/editions, games — carry minted ids that serialize as `<prefix>_<base32>` (`per_`, `team_`, `comp_`, `edt_`, `game_`); the prefix is part of the type. Stats are typed per-phase and reconstruct as-of any ingested instant from appearance facts.\n\n## Endpoint groups\n\n| Group | Base path | Description |\n|-------|-----------|-------------|\n| Persons | `/v1/persons` | Profile, appearances, game log, memberships, season stats |\n| Teams | `/v1/teams` | Profile, as-of roster, games, game log, season stats |\n| Competitions | `/v1/competitions` | Competitions, editions, edition participants/games/standings, capability discovery |\n| Contests | `/v1/contests` | Contest detail (team-Match home/away/score view) and the person-keyed boxscore |\n| Analysis | `/v1/analysis` | Player-prop card and team comparison (paid tier) |\n| Assets | `/v1/assets` | Team logo PNGs (proxied, 7-day cache) |\n\n## Authentication\n\nAll endpoints in this spec require an API key passed in the `X-API-Key` request header.\n\n## Operational endpoints\n\nLiveness/readiness probes (`/healthz`, `/readyz`, `/metrics`) and ingest administration endpoints (`/v1/ingest/...`) are intentionally **not documented in this spec**. They are operator-only surfaces and live in a separate internal spec; see infra docs for access.\n\n## Response envelope\n\nEvery response wraps its payload in:\n\n```json\n{\n  \"data\": { ... },\n  \"meta\": {\n    \"request_id\": \"uuid\",\n    \"source\": \"source identifier\",\n    \"fetched_at\": \"2025-01-01T00:00:00Z\",\n    \"cache\": \"HIT | MISS | STALE\",\n    \"version\": \"v1\"\n  }\n}\n```\n\nError responses use `{ \"error\": { \"code\": \"...\", \"message\": \"...\" } }`.\n`meta.request_id` uniquely identifies the request — quote it when filing support tickets. `meta.cache` is reserved for response-layer caching (`HIT` / `STALE` / `MISS`); entity reads are currently served directly from the canonical store and always report `MISS`.\n\n## Freshness\n\nReads are served from the canonical store, which ingest refreshes out-of-band on a per-resource cadence:\n\n- **Live box scores** are re-ingested within minutes of in-game updates while a slate is live.\n- **Standings** are recomputed whenever a game in the edition finalizes.\n- **Schedules** are re-synced several times per day.\n- **Final box scores** are immutable once a game is final.\n\n`meta.fetched_at` reports when the response was assembled, not when the underlying data last changed upstream.\n\n## Capability discovery\n\nCall `GET /v1/competitions/{comp}/capabilities` to retrieve the exact stat keys (base + derived measures) each phase reports for a competition's sport.",
    "license": {
      "name": ""
    },
    "version": "1.0.0"
  },
  "paths": {
    "/v1/analysis/compare-teams": {
      "get": {
        "tags": [
          "Analysis"
        ],
        "summary": "`GET /v1/analysis/compare-teams?a=&b=&as_of=` — clubs OR national teams.",
        "operationId": "get_v1_analysis_compare_teams",
        "parameters": [
          {
            "name": "a",
            "in": "path",
            "description": "Team A (minted id). Required.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/TeamId"
            }
          },
          {
            "name": "b",
            "in": "path",
            "description": "Team B (minted id). Required.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/TeamId"
            }
          },
          {
            "name": "season",
            "in": "path",
            "description": "Season year — roster of persons who appeared that season.",
            "required": true,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SeasonYear"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "as_of",
            "in": "path",
            "description": "RFC3339 instant — who represented the team in a window ending here.",
            "required": true,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          },
          {
            "name": "edition",
            "in": "path",
            "description": "Tournament edition id — appearances ∪ edition-overlapping memberships.",
            "required": true,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/EditionId"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "days",
            "in": "path",
            "description": "Look-back window in days for the `Current`/`AsOf` scopes (clamped `[1, 90]`).",
            "required": true,
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Two teams and their as-of rosters laid side by side (clubs or national sides)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseTeamComparison"
                }
              }
            }
          },
          "400": {
            "description": "`a` and `b` (team ids) are required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "One of the team ids names no team",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight": 10,
        "x-requires-tier": "paid",
        "x-statshawk-weight-class": "analysis"
      }
    },
    "/v1/analysis/player-prop": {
      "get": {
        "tags": [
          "Analysis"
        ],
        "summary": "`GET /v1/analysis/player-prop?person_id=&stat=&line=` — person-keyed.",
        "operationId": "get_v1_analysis_player_prop",
        "parameters": [
          {
            "name": "person_id",
            "in": "path",
            "description": "The person to analyse (minted `per_…` id). Required.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/PersonId"
            }
          },
          {
            "name": "stat",
            "in": "path",
            "description": "The measure to analyse. Required. May be **phase-qualified** as\n`phase.measure` (e.g. `pitching.so`, `passing.yards`) to disambiguate a\nmeasure that exists in more than one phase — this is the canonical\nform; a bare `so` matches the first phase that carries it. A curated\nset of friendly aliases is also accepted (e.g. `pitcher_k`, a baseball\ntwo-way disambiguator that resolves to `pitching.so`) — see\n[`crate::stats::measure::resolve_stat_alias`].",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "line",
            "in": "path",
            "required": true,
            "schema": {
              "type": [
                "number",
                "null"
              ],
              "format": "double"
            }
          },
          {
            "name": "competition",
            "in": "path",
            "description": "Competition slug (e.g. `mlb`) or minted `comp_…` id. When supplied and\n`season`/`edition`/`from`/`to` are all omitted, the window defaults to\nthis competition's latest edition with at least one final contest rather\nthan every edition ever ingested.",
            "required": true,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "season",
            "in": "path",
            "description": "Restrict to one season year. Supplying this opts out of the\ndefault edition window.",
            "required": true,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SeasonYear"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "edition",
            "in": "path",
            "description": "Restrict to one edition. Supplying this opts out of the\ndefault edition window.",
            "required": true,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/EditionId"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "from",
            "in": "path",
            "description": "Lower bound (inclusive) on game kickoff. Supplying this opts out of\nthe default edition window.",
            "required": true,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "path",
            "description": "Upper bound (inclusive) on game kickoff. Supplying this opts out of\nthe default edition window.",
            "required": true,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          },
          {
            "name": "stage",
            "in": "path",
            "description": "Contest-stage filter (issue #164). Omitted defaults to regular-season\n(plus unknown-stage) appearances only — the same window the season\nfold uses. `stage=all` removes the filter entirely (every stage,\nincluding preseason/exhibition/allstar); an explicit stage\n(`preseason`/`regular`/`postseason`/`exhibition`/`allstar`) narrows to\nexactly that value. An unrecognized value is a `400`.",
            "required": true,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/StageSelector"
                }
              ],
              "nullable": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The person-keyed prop card — per-game values, average, and (when `line` is supplied) the over-rate. When `competition` is given and `season`/`edition`/`from`/`to` are all omitted, the window defaults to the latest edition with at least one final contest, not every edition ever ingested",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponsePlayerPropCard"
                }
              }
            }
          },
          "400": {
            "description": "`person_id` is required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No person with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight": 10,
        "x-requires-tier": "paid",
        "x-statshawk-weight-class": "analysis"
      }
    },
    "/v1/analysis/stat-board": {
      "get": {
        "tags": [
          "Analysis"
        ],
        "summary": "`GET /v1/analysis/stat-board?competition=&date=&stat=` — slate over-rate",
        "description": "board. `date` is interpreted in the competition's local scoreboard timezone;\nfor MLB this is US Eastern time.",
        "operationId": "get_v1_analysis_stat_board",
        "parameters": [
          {
            "name": "competition",
            "in": "path",
            "description": "Competition slug (e.g. `mlb`) or minted `comp_...` id. Required.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date",
            "in": "path",
            "description": "Slate date in `YYYY-MM-DD`, interpreted in the competition's local\nscoreboard timezone. MLB dates are resolved in US Eastern time.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "stat",
            "in": "path",
            "description": "The measure to rank, either a base key (`pts`) or phase-qualified key\n(`batting.h`). Friendly aliases accepted by `player-prop` are accepted\nhere too. Unknown stats are a `400`.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "window",
            "in": "path",
            "description": "Recent-game window for the over-rate. Clamped to `[1, 60]`; default `20`.",
            "required": true,
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "format": "int32"
            }
          },
          {
            "name": "limit",
            "in": "path",
            "description": "Maximum entries in `full_slate`. Clamped to `[1, 200]`; default `50`.",
            "required": true,
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "format": "int64"
            }
          },
          {
            "name": "min_games",
            "in": "path",
            "description": "Minimum `games_in_window` for an entry to appear in `recommended`\n(small samples still rank in `full_slate`). Clamped to `[1, 60]`;\ndefault `10`.",
            "required": true,
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ranked slate stat board with lineup freshness signals. `date` is competition-local; MLB uses US Eastern time.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseStatBoard"
                }
              }
            }
          },
          "400": {
            "description": "Missing required query parameters, invalid date, or unknown stat",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No competition, edition, or slate data for the requested parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-requires-tier": "paid",
        "x-statshawk-weight-class": "analysis",
        "x-statshawk-weight": 10
      }
    },
    "/v1/assets/team-logo/{team_id}": {
      "get": {
        "tags": [
          "Assets"
        ],
        "summary": "Get team logo PNG.",
        "description": "Returns the team's logo as an `image/png` binary response with a\n`Cache-Control: public, max-age=604800` header (7-day client cache).\n\nLogos are served through a cached image proxy, so clients always hit a\nstable URL on this API regardless of the upstream source.\n\n`team_id` must be the UUID-backed team id used by the logo asset store.\nReturns `404` if no logo is available for the team.",
        "operationId": "get_v1_assets_team_logo_team_id",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "description": "UUID-backed team id used by the logo asset store. Example: `550e8400-e29b-41d4-a716-446655440000`.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "PNG image bytes with `Cache-Control: public, max-age=604800`"
          },
          "400": {
            "description": "Database not available (required for logo URL lookup)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No logo available for this team",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight": 1,
        "x-statshawk-weight-class": "lookup",
        "x-requires-tier": "any"
      }
    },
    "/v1/competitions": {
      "get": {
        "tags": [
          "Competitions"
        ],
        "summary": "`GET /v1/competitions` — the competition index (all competitions, flat).",
        "description": "Store-only: the rows come straight from the `competitions` table.",
        "operationId": "get_v1_competitions",
        "responses": {
          "200": {
            "description": "Every competition (the flat, unpaginated index)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseCompetitionList"
                }
              }
            }
          }
        },
        "x-requires-tier": "any",
        "x-statshawk-weight": 1,
        "x-statshawk-weight-class": "lookup"
      }
    },
    "/v1/competitions/{comp}": {
      "get": {
        "tags": [
          "Competitions"
        ],
        "summary": "`GET /v1/competitions/{comp}` — sport, kind, name (resolved by slug).",
        "operationId": "get_v1_competitions_comp",
        "parameters": [
          {
            "name": "comp",
            "in": "path",
            "description": "Competition slug (`nba`, `mlb`, `epl`, …)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The competition (sport, kind, name)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseCompetition"
                }
              }
            }
          },
          "404": {
            "description": "No competition with this slug",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-requires-tier": "any",
        "x-statshawk-weight-class": "lookup",
        "x-statshawk-weight": 1
      }
    },
    "/v1/competitions/{comp}/capabilities": {
      "get": {
        "tags": [
          "Competitions"
        ],
        "summary": "`GET /v1/competitions/{comp}/capabilities` — the per-phase measure inventory",
        "description": "for the competition's sport (spec §5), re-homed off the slug. Resolves the\ncompetition (store-only), then derives the surface from the phase registry.",
        "operationId": "get_v1_competitions_comp_capabilities",
        "parameters": [
          {
            "name": "comp",
            "in": "path",
            "description": "Competition slug (`nba`, `mlb`, `epl`, …)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The per-phase measure inventory for the competition's sport (from the phase registry)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseCompetitionCapabilities"
                }
              }
            }
          },
          "404": {
            "description": "No competition with this slug",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight": 1,
        "x-requires-tier": "any",
        "x-statshawk-weight-class": "lookup"
      }
    },
    "/v1/competitions/{comp}/editions": {
      "get": {
        "tags": [
          "Competitions"
        ],
        "summary": "`GET /v1/competitions/{comp}/editions` — editions of a competition.",
        "operationId": "get_v1_competitions_comp_editions",
        "parameters": [
          {
            "name": "comp",
            "in": "path",
            "description": "Competition slug (`nba`, `mlb`, `epl`, …)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The editions of the competition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseEditionList"
                }
              }
            }
          },
          "404": {
            "description": "No competition with this slug",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight": 1,
        "x-statshawk-weight-class": "lookup",
        "x-requires-tier": "any"
      }
    },
    "/v1/competitions/{comp}/editions/{year}": {
      "get": {
        "tags": [
          "Competitions"
        ],
        "summary": "`GET /v1/competitions/{comp}/editions/{year}`.",
        "operationId": "get_v1_competitions_comp_editions_year",
        "parameters": [
          {
            "name": "comp",
            "in": "path",
            "description": "Competition slug (`nba`, `mlb`, `epl`, …)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "path",
            "description": "Season year (e.g. `2026`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The one edition of the competition for that season year",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseEdition"
                }
              }
            }
          },
          "404": {
            "description": "No competition with this slug, or no edition for that year",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "lookup",
        "x-requires-tier": "any",
        "x-statshawk-weight": 1
      }
    },
    "/v1/competitions/{comp}/editions/{year}/contests": {
      "get": {
        "tags": [
          "Competitions"
        ],
        "summary": "`GET /v1/competitions/{comp}/editions/{year}/contests?date=`.",
        "operationId": "get_v1_competitions_comp_editions_year_contests",
        "parameters": [
          {
            "name": "comp",
            "in": "path",
            "description": "Competition slug (`nba`, `mlb`, `pga`, …)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "path",
            "description": "Season year (e.g. `2026`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The edition's generalized contests, including field/N-ary contests, optionally narrowed to one calendar day",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseContestDetailList"
                }
              }
            }
          },
          "404": {
            "description": "No competition with this slug, or no edition for that year",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-requires-tier": "any",
        "x-statshawk-weight": 2,
        "x-statshawk-weight-class": "game-search"
      }
    },
    "/v1/competitions/{comp}/editions/{year}/games": {
      "get": {
        "tags": [
          "Competitions"
        ],
        "summary": "`GET /v1/competitions/{comp}/editions/{year}/games?date=`.",
        "operationId": "get_v1_competitions_comp_editions_year_games",
        "parameters": [
          {
            "name": "comp",
            "in": "path",
            "description": "Competition slug (`nba`, `mlb`, `epl`, …)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "path",
            "description": "Season year (e.g. `2026`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The edition's games, optionally narrowed to one calendar day",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseContestList"
                }
              }
            }
          },
          "404": {
            "description": "No competition with this slug, or no edition for that year",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "game-search",
        "x-statshawk-weight": 2,
        "x-requires-tier": "any"
      }
    },
    "/v1/competitions/{comp}/editions/{year}/matchups": {
      "get": {
        "tags": [
          "Competitions"
        ],
        "summary": "`GET /v1/competitions/{comp}/editions/{year}/matchups?date=` — the",
        "description": "pregame matchup board for one calendar day of an edition's slate.",
        "operationId": "get_v1_competitions_comp_editions_year_matchups",
        "parameters": [
          {
            "name": "comp",
            "in": "path",
            "description": "Competition slug (`mlb`, …)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "path",
            "description": "Season year (e.g. `2026`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "date",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The matchup cards for this edition's slate on the given date",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseMatchupList"
                }
              }
            }
          },
          "400": {
            "description": "Missing the required `date` query parameter",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No competition with this slug, or no edition for that year",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "composite",
        "x-requires-tier": "any",
        "x-statshawk-weight": 3
      }
    },
    "/v1/competitions/{comp}/editions/{year}/standings": {
      "get": {
        "tags": [
          "Competitions"
        ],
        "summary": "`GET /v1/competitions/{comp}/editions/{year}/standings` — the app-materialized",
        "description": "`(edition, team)` records (Workflow-1 task A3), best-record-first. Store-only:\nthe records are recomputed by the runner on ingest, never fetched here.",
        "operationId": "get_v1_competitions_comp_editions_year_standings",
        "parameters": [
          {
            "name": "comp",
            "in": "path",
            "description": "Competition slug (`nba`, `mlb`, `epl`, …)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "path",
            "description": "Season year (e.g. `2026`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The app-materialized standings (best-record-first; W/L/T + points, derived games_played and win pct)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseStandingsEntryList"
                }
              }
            }
          },
          "404": {
            "description": "No competition with this slug, or no edition for that year",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "lookup",
        "x-statshawk-weight": 1,
        "x-requires-tier": "any"
      }
    },
    "/v1/competitions/{comp}/editions/{year}/teams": {
      "get": {
        "tags": [
          "Competitions"
        ],
        "summary": "`GET /v1/competitions/{comp}/editions/{year}/teams` — participants.",
        "operationId": "get_v1_competitions_comp_editions_year_teams",
        "parameters": [
          {
            "name": "comp",
            "in": "path",
            "description": "Competition slug (`nba`, `mlb`, `epl`, …)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "path",
            "description": "Season year (e.g. `2026`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Edition participants — teams with games in it ∪ teams whose membership overlaps its span",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseTeamList"
                }
              }
            }
          },
          "404": {
            "description": "No competition with this slug, or no edition for that year",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight": 1,
        "x-statshawk-weight-class": "lookup",
        "x-requires-tier": "any"
      }
    },
    "/v1/contests/{contest_id}": {
      "get": {
        "tags": [
          "Contests"
        ],
        "summary": "`GET /v1/contests/{contest_id}` — assembled team-Match row.",
        "operationId": "get_v1_contests_contest_id",
        "parameters": [
          {
            "name": "contest_id",
            "in": "path",
            "description": "Minted contest id (`cst_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The assembled team-Match row (edition + competition)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseContest"
                }
              }
            }
          },
          "404": {
            "description": "No contest with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-requires-tier": "any",
        "x-statshawk-weight": 1,
        "x-statshawk-weight-class": "lookup"
      }
    },
    "/v1/contests/{contest_id}/boxscore": {
      "get": {
        "tags": [
          "Contests"
        ],
        "summary": "`GET /v1/contests/{contest_id}/boxscore` — appearances + typed stat lines.",
        "operationId": "get_v1_contests_contest_id_boxscore",
        "parameters": [
          {
            "name": "contest_id",
            "in": "path",
            "description": "Minted contest id (`cst_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The person-keyed boxscore — one typed line per appearance + a `finalized` flag",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseContestBoxscore"
                }
              }
            }
          },
          "404": {
            "description": "No contest with this id, or the boxscore is an incomplete (partial) ingest",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-requires-tier": "any",
        "x-statshawk-weight-class": "boxscore",
        "x-statshawk-weight": 2
      }
    },
    "/v1/contests/{contest_id}/detail": {
      "get": {
        "tags": [
          "Contests"
        ],
        "summary": "`GET /v1/contests/{contest_id}/detail` — generalized contest row.",
        "operationId": "get_v1_contests_contest_id_detail",
        "parameters": [
          {
            "name": "contest_id",
            "in": "path",
            "description": "Minted contest id (`cst_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The generalized contest row with neutral kind, entrants, results, and optional event context",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseContestDetail"
                }
              }
            }
          },
          "404": {
            "description": "No contest with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight": 1,
        "x-statshawk-weight-class": "lookup",
        "x-requires-tier": "any"
      }
    },
    "/v1/contests/{contest_id}/matchup": {
      "get": {
        "tags": [
          "Contests"
        ],
        "summary": "`GET /v1/contests/{contest_id}/matchup` — the pregame matchup card",
        "description": "(probable pitchers + lineups) for one contest.",
        "operationId": "get_v1_contests_contest_id_matchup",
        "parameters": [
          {
            "name": "contest_id",
            "in": "path",
            "description": "Minted contest id (`cst_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The pregame matchup card for this contest",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseMatchup"
                }
              }
            }
          },
          "404": {
            "description": "No contest with this id, or no matchup ingested for it",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "lookup",
        "x-statshawk-weight": 1,
        "x-requires-tier": "any"
      }
    },
    "/v1/contests/{contest_id}/play-by-play": {
      "get": {
        "tags": [
          "Contests"
        ],
        "summary": "`GET /v1/contests/{contest_id}/play-by-play` — the Statcast play-by-play",
        "description": "sequence, tier-projected by `detail` and optionally narrowed to one\npitcher/batter (or their head-to-head intersection).",
        "operationId": "get_v1_contests_contest_id_play_by_play",
        "parameters": [
          {
            "name": "contest_id",
            "in": "path",
            "description": "Minted contest id (`cst_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "detail",
            "in": "query",
            "description": "Projection tier for each pitch (default `full`).",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Detail"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "pitcher_id",
            "in": "query",
            "description": "Narrow to plate appearances this person pitched.",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/PersonId"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "batter_id",
            "in": "query",
            "description": "Narrow to plate appearances this person batted. Combined with\n`pitcher_id`, both narrow (the head-to-head intersection).",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/PersonId"
                }
              ],
              "nullable": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The play-by-play sequence — one plate appearance per at-bat, each carrying its tier-projected pitches",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponsePlayByPlay"
                }
              }
            }
          },
          "404": {
            "description": "No contest with this id, or no play-by-play ingested for this contest",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "play-by-play",
        "x-requires-tier": "any",
        "x-statshawk-weight": 5
      }
    },
    "/v1/persons": {
      "get": {
        "tags": [
          "Persons"
        ],
        "summary": "`GET /v1/persons` — the person index / name search, paged. Store-only: a",
        "description": "case-insensitive name match over the `persons` table, never a provider\nfan-out.",
        "operationId": "get_v1_persons",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Case-insensitive substring of the person's full name. Empty/omitted\nmatches everyone (the index read).",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Rows per page (default 50, capped at 200).",
            "required": false,
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "format": "int64"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Rows to skip (default 0).",
            "required": false,
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of persons matching the name search (or the index when `q` is omitted)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponsePersonList"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "lookup",
        "x-statshawk-weight": 1,
        "x-requires-tier": "any"
      }
    },
    "/v1/persons/{person_id}": {
      "get": {
        "tags": [
          "Persons"
        ],
        "summary": "`GET /v1/persons/{per_id}` — assembled profile (one row, no joins).",
        "operationId": "get_v1_persons_person_id",
        "parameters": [
          {
            "name": "person_id",
            "in": "path",
            "description": "Minted person id (`per_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The assembled person profile",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponsePerson"
                }
              }
            }
          },
          "404": {
            "description": "No person with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "lookup",
        "x-requires-tier": "any",
        "x-statshawk-weight": 1
      }
    },
    "/v1/persons/{person_id}/appearances": {
      "get": {
        "tags": [
          "Persons"
        ],
        "summary": "`GET /v1/persons/{per_id}/appearances`.",
        "operationId": "get_v1_persons_person_id_appearances",
        "parameters": [
          {
            "name": "person_id",
            "in": "path",
            "description": "Minted person id (`per_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "competition",
            "in": "query",
            "description": "Competition slug (e.g. `mlb`) or minted `comp_…` id.",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "season",
            "in": "query",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SeasonYear"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "edition",
            "in": "query",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/EditionId"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          },
          {
            "name": "role",
            "in": "query",
            "description": "Restrict the game log to appearances carrying a specific phase block\n(`role=pitcher`) — the agnostic replacement for the old\n`pitching-games` endpoint. Omitted ⇒ every phase (today's behavior,\nunchanged).",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Role"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "phase",
            "in": "query",
            "description": "Alias for `role`: `phase=pitching` is equivalent to `role=pitcher`.",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Phase"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "stage",
            "in": "query",
            "description": "Contest-stage filter (issue #164). Omitted defaults to regular-season\n(plus unknown-stage) appearances only — the same window the season\nfold uses. `stage=all` removes the filter entirely (every stage,\nincluding preseason/exhibition/allstar); an explicit stage\n(`preseason`/`regular`/`postseason`/`exhibition`/`allstar`) narrows to\nexactly that value. An unrecognized value is a `400`.",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/StageSelector"
                }
              ],
              "nullable": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The person's appearances, narrowed by the optional filter",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseAppearanceList"
                }
              }
            }
          },
          "404": {
            "description": "No person with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-requires-tier": "any",
        "x-statshawk-weight": 2,
        "x-statshawk-weight-class": "gamelog"
      }
    },
    "/v1/persons/{person_id}/game-log": {
      "get": {
        "tags": [
          "Persons"
        ],
        "summary": "`GET /v1/persons/{per_id}/game-log` — the person's chronological game log",
        "description": "(Workflow-1 task A4): per-game stat lines assembled over appearances + phase\ntables, each tied to its game. Store-only; no `*_game_logs` table.",
        "operationId": "get_v1_persons_person_id_game_log",
        "parameters": [
          {
            "name": "person_id",
            "in": "path",
            "description": "Minted person id (`per_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "competition",
            "in": "query",
            "description": "Competition slug (e.g. `mlb`) or minted `comp_…` id.",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "season",
            "in": "query",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SeasonYear"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "edition",
            "in": "query",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/EditionId"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          },
          {
            "name": "role",
            "in": "query",
            "description": "Restrict the game log to appearances carrying a specific phase block\n(`role=pitcher`) — the agnostic replacement for the old\n`pitching-games` endpoint. Omitted ⇒ every phase (today's behavior,\nunchanged).",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Role"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "phase",
            "in": "query",
            "description": "Alias for `role`: `phase=pitching` is equivalent to `role=pitcher`.",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Phase"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "stage",
            "in": "query",
            "description": "Contest-stage filter (issue #164). Omitted defaults to regular-season\n(plus unknown-stage) appearances only — the same window the season\nfold uses. `stage=all` removes the filter entirely (every stage,\nincluding preseason/exhibition/allstar); an explicit stage\n(`preseason`/`regular`/`postseason`/`exhibition`/`allstar`) narrows to\nexactly that value. An unrecognized value is a `400`.",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/StageSelector"
                }
              ],
              "nullable": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Per-game stat lines over the person's in-scope appearances",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponsePersonGameLogList"
                }
              }
            }
          },
          "404": {
            "description": "No person with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight": 2,
        "x-statshawk-weight-class": "gamelog",
        "x-requires-tier": "any"
      }
    },
    "/v1/persons/{person_id}/memberships": {
      "get": {
        "tags": [
          "Persons"
        ],
        "summary": "`GET /v1/persons/{per_id}/memberships`.",
        "operationId": "get_v1_persons_person_id_memberships",
        "parameters": [
          {
            "name": "person_id",
            "in": "path",
            "description": "Minted person id (`per_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The person's team affiliations (current + historical)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseMembershipList"
                }
              }
            }
          },
          "404": {
            "description": "No person with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "lookup",
        "x-requires-tier": "any",
        "x-statshawk-weight": 1
      }
    },
    "/v1/persons/{person_id}/stats": {
      "get": {
        "tags": [
          "Persons"
        ],
        "summary": "`GET /v1/persons/{per_id}/stats`.",
        "operationId": "get_v1_persons_person_id_stats",
        "parameters": [
          {
            "name": "person_id",
            "in": "path",
            "description": "Minted person id (`per_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "competition",
            "in": "query",
            "description": "Competition slug (e.g. `mlb`) or minted `comp_…` id.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "season",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SeasonYear"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The materialized season aggregate for `(person, competition, season)` as the sport's typed line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseSeasonStats"
                }
              }
            }
          },
          "404": {
            "description": "No person with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight": 2,
        "x-statshawk-weight-class": "season-stats",
        "x-requires-tier": "any"
      }
    },
    "/v1/teams": {
      "get": {
        "tags": [
          "Teams"
        ],
        "summary": "`GET /v1/teams` — the team index, filtered by sport / competition / team",
        "description": "trait and paged. Store-only: a flat table read scoped by the resolved filter,\nnever a provider fan-out.",
        "operationId": "get_v1_teams",
        "parameters": [
          {
            "name": "sport",
            "in": "query",
            "description": "Restrict to one sport (`basketball`, `soccer`, …).",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SportId"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "competition",
            "in": "query",
            "description": "Restrict to teams that played in the competition with this slug.",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "traits",
            "in": "query",
            "description": "Restrict to teams carrying these typed traits (`kind:value`, comma-separated).",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/TeamTraitQuery"
              }
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Rows per page (default 50, capped at 200).",
            "required": false,
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "format": "int64"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Rows to skip (default 0).",
            "required": false,
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of teams matching the sport / competition / team-trait filters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseTeamList"
                }
              }
            }
          },
          "404": {
            "description": "The `competition` slug filter names no known competition",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "lookup",
        "x-requires-tier": "any",
        "x-statshawk-weight": 1
      }
    },
    "/v1/teams/{team_id}": {
      "get": {
        "tags": [
          "Teams"
        ],
        "summary": "`GET /v1/teams/{team_id}` — assembled team row.",
        "operationId": "get_v1_teams_team_id",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "description": "Minted team id (`team_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The assembled team row",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseTeam"
                }
              }
            }
          },
          "404": {
            "description": "No team with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "lookup",
        "x-requires-tier": "any",
        "x-statshawk-weight": 1
      }
    },
    "/v1/teams/{team_id}/game-log": {
      "get": {
        "tags": [
          "Teams"
        ],
        "summary": "`GET /v1/teams/{team_id}/game-log` — the team's chronological game log",
        "description": "(Workflow-1 task A4), each game rendered from the team's perspective. Store-\nonly: a pure read over the games table, no `*_game_logs` table.",
        "operationId": "get_v1_teams_team_id_game_log",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "description": "Minted team id (`team_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "competition",
            "in": "query",
            "description": "Competition slug (e.g. `mlb`) or minted `comp_…` id.",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "season",
            "in": "query",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SeasonYear"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "edition",
            "in": "query",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/EditionId"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The team's games rendered from its own perspective (opponent, scores, win/loss/tie)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseTeamGameLogList"
                }
              }
            }
          },
          "404": {
            "description": "No team with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-requires-tier": "any",
        "x-statshawk-weight": 2,
        "x-statshawk-weight-class": "gamelog"
      }
    },
    "/v1/teams/{team_id}/games": {
      "get": {
        "tags": [
          "Teams"
        ],
        "summary": "`GET /v1/teams/{team_id}/games`.",
        "operationId": "get_v1_teams_team_id_games",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "description": "Minted team id (`team_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "competition",
            "in": "query",
            "description": "Competition slug (e.g. `mlb`) or minted `comp_…` id.",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          {
            "name": "season",
            "in": "query",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SeasonYear"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "edition",
            "in": "query",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/EditionId"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The team's games, narrowed by the optional filter",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseContestList"
                }
              }
            }
          },
          "404": {
            "description": "No team with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight-class": "game-search",
        "x-requires-tier": "any",
        "x-statshawk-weight": 2
      }
    },
    "/v1/teams/{team_id}/roster": {
      "get": {
        "tags": [
          "Teams"
        ],
        "summary": "`GET /v1/teams/{team_id}/roster` — the as-of roster surface.",
        "operationId": "get_v1_teams_team_id_roster",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "description": "Minted team id (`team_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "season",
            "in": "query",
            "description": "Season year — roster of persons who appeared that season.",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/SeasonYear"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "as_of",
            "in": "query",
            "description": "RFC3339 instant — who represented the team in a window ending here.",
            "required": false,
            "schema": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            }
          },
          {
            "name": "edition",
            "in": "query",
            "description": "Tournament edition id — appearances ∪ edition-overlapping memberships.",
            "required": false,
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/EditionId"
                }
              ],
              "nullable": true
            }
          },
          {
            "name": "days",
            "in": "query",
            "description": "Look-back window in days for the `Current`/`AsOf` scopes (clamped `[1, 90]`).",
            "required": false,
            "schema": {
              "type": [
                "integer",
                "null"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The team's roster reconstructed at the requested scope (`appearance` = played, `membership` = named)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseRosterEntryList"
                }
              }
            }
          },
          "400": {
            "description": "`season`, `as_of`, and `edition` are mutually exclusive",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No team with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight": 3,
        "x-statshawk-weight-class": "composite",
        "x-requires-tier": "any"
      }
    },
    "/v1/teams/{team_id}/stats": {
      "get": {
        "tags": [
          "Teams"
        ],
        "summary": "`GET /v1/teams/{team_id}/stats?competition=&season=` — the materialized",
        "description": "season aggregate (Workflow-1 task A2). Store-only: the typed season tables are\nserved directly, never a provider fan-out.",
        "operationId": "get_v1_teams_team_id_stats",
        "parameters": [
          {
            "name": "team_id",
            "in": "path",
            "description": "Minted team id (`team_…`)",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "competition",
            "in": "query",
            "description": "Competition slug (e.g. `mlb`) or minted `comp_…` id.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "season",
            "in": "query",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/SeasonYear"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The materialized season aggregate for `(team, competition, season)` (summed base + derived-on-read measures)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseSeasonStats"
                }
              }
            }
          },
          "404": {
            "description": "No team with this id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-statshawk-weight": 2,
        "x-statshawk-weight-class": "season-stats",
        "x-requires-tier": "any"
      }
    }
  },
  "components": {
    "schemas": {
      "AnimalId": {
        "type": "string",
        "description": "Minted entity id (`anm_<base32>`).",
        "examples": [
          "anm_0a1b2c3d4e5f6g7h8i9j0k1l2m"
        ]
      },
      "ApiResponseAppearanceList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/AppearanceListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseCompetition": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Competition"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseCompetitionCapabilities": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/CompetitionCapabilities"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseCompetitionList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/CompetitionListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseContest": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/MatchSummary"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseContestBoxscore": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ContestBoxscore"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseContestDetail": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ContestSummary"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseContestDetailList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ContestDetailListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseContestList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ContestListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseEdition": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Edition"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseEditionList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/EditionListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseMatchup": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/MatchupCard"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseMatchupList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/MatchupListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseMembershipList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/MembershipListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponsePerson": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Person"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponsePersonGameLogList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/PersonGameLogListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponsePersonList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/PersonListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponsePlayByPlay": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/PlayByPlay"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponsePlayerPropCard": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/PlayerPropCard"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseRosterEntryList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/RosterEntryListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseSeasonStats": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/SeasonStatsView"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseStandingsEntryList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/StandingsEntryListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseStatBoard": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/StatBoard"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseTeam": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/Team"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseTeamComparison": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/TeamComparison"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseTeamGameLogList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/TeamGameLogListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "ApiResponseTeamList": {
        "type": "object",
        "required": [
          "data",
          "meta"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/TeamListResponse"
          },
          "meta": {
            "$ref": "#/components/schemas/ResponseMeta"
          }
        }
      },
      "Appearance": {
        "type": "object",
        "description": "A person's participation in one contest — the identity edge. Keyed uniquely\nby `(contest, person)` in storage. Stat data lives in the typed per-phase\ntables keyed by this appearance's id (S5 dropped the legacy JSONB `stats`\nblob); the boxscore read assembles a [`BoxscoreLine`] from those phase rows.",
        "required": [
          "id",
          "person",
          "contest",
          "entrant"
        ],
        "properties": {
          "contest": {
            "$ref": "#/components/schemas/ContestId"
          },
          "entrant": {
            "$ref": "#/components/schemas/EntrantId"
          },
          "id": {
            "$ref": "#/components/schemas/AppearanceId"
          },
          "person": {
            "$ref": "#/components/schemas/PersonId"
          },
          "team": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TeamId"
              }
            ],
            "nullable": true
          }
        }
      },
      "AppearanceId": {
        "type": "string",
        "description": "Minted entity id (`apr_<base32>`).",
        "examples": [
          "apr_0a1b2c3d4e5f6g7h8i9j0k1l2m"
        ]
      },
      "AppearanceListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Appearance"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "BaseballLineupLine": {
        "type": "object",
        "description": "A baseball appearance's as-played lineup facts (issue #175, reworked per\nCLAUDE.md's \"sport-scoped facts never ride universal shapes\" rule):\n`batting_slot`/`batting_entry` decode MLB's 3-digit wire `battingOrder`\ncode at the adapter boundary (never stored raw) and are `None` together\nfor a player with no batting order at all (e.g. an NL pitcher with no DH),\nwho may still carry a `position`. Exposed ONLY on\n[`BoxscoreLine::baseball`] — every other sport's line never has this key.",
        "properties": {
          "batting_entry": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "Substitution entry order within the slot (0 = starter); `None` iff\n`batting_slot` is `None`."
          },
          "batting_slot": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "1-9 lineup slot; `None` when the person had no batting order."
          },
          "position": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionCode"
              }
            ],
            "nullable": true
          }
        }
      },
      "BaseballPlayerGameLine": {
        "allOf": [
          {
            "allOf": [
              {
                "type": "object",
                "properties": {
                  "ab": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "avg": {
                    "type": "number",
                    "format": "double"
                  },
                  "bb": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "cs": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "doubles": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "expanded_batting_hbp": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "gidp": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "h": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "h_ab": {
                    "type": "string"
                  },
                  "hr": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "ibb": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "k": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "lob": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "obp": {
                    "type": "number",
                    "format": "double"
                  },
                  "ops": {
                    "type": "number",
                    "format": "double"
                  },
                  "p": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pa": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "r": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "rbi": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "sac_bunts": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "sac_flies": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "sb": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "singles": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "slg": {
                    "type": "number",
                    "format": "double"
                  },
                  "total_bases": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "triples": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  }
                }
              }
            ]
          },
          {
            "allOf": [
              {
                "type": "object",
                "properties": {
                  "balks": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "er": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "era": {
                    "type": "number",
                    "format": "double"
                  },
                  "hit_batsmen": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "hld": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "ip": {
                    "type": "number",
                    "format": "double"
                  },
                  "l": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pc": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pc_st": {
                    "type": "string"
                  },
                  "pitching_bb": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pitching_h": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pitching_hr": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pitching_k": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pitching_r": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "strikes": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "sv": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "tbf": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "w": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "whip": {
                    "type": "number",
                    "format": "double"
                  },
                  "wild_pitches": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  }
                }
              }
            ]
          },
          {
            "type": "object"
          }
        ]
      },
      "BaseballPlayerSeasonLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "advanced_batting_ab_per_hr": {
                "type": "number",
                "format": "double"
              },
              "advanced_batting_bb_per_k": {
                "type": "number",
                "format": "double"
              },
              "advanced_batting_bb_per_pa": {
                "type": "number",
                "format": "double"
              },
              "advanced_batting_fo": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "advanced_batting_go": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "advanced_batting_go_per_fo": {
                "type": "number",
                "format": "double"
              },
              "advanced_batting_isop": {
                "type": "number",
                "format": "double"
              },
              "advanced_batting_owar": {
                "type": "number",
                "format": "double"
              },
              "advanced_batting_rc": {
                "type": "number",
                "format": "double"
              },
              "advanced_batting_rc_per_27": {
                "type": "number",
                "format": "double"
              },
              "advanced_batting_seca": {
                "type": "number",
                "format": "double"
              },
              "advanced_batting_war": {
                "type": "number",
                "format": "double"
              },
              "career_batting_2_b": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_3_b": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_ab": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_avg": {
                "type": "number",
                "format": "double"
              },
              "career_batting_bb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_cs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_gp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_h": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_hbp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_hr": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_obp": {
                "type": "number",
                "format": "double"
              },
              "career_batting_ops": {
                "type": "number",
                "format": "double"
              },
              "career_batting_r": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_rbi": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_sb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_slg": {
                "type": "number",
                "format": "double"
              },
              "career_batting_so": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "career_batting_war": {
                "type": "number",
                "format": "double"
              },
              "expanded_batting_gidp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_batting_hbp_season": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_batting_ibb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_batting_p": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_batting_p_per_pa": {
                "type": "number",
                "format": "double"
              },
              "expanded_batting_pa": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_batting_sb_pct": {
                "type": "number",
                "format": "double"
              },
              "expanded_batting_sf": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_batting_sh": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_batting_tb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_batting_xbh": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_pitching_bk": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_pitching_cg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_pitching_cs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_pitching_fb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_pitching_g_per_f": {
                "type": "number",
                "format": "double"
              },
              "expanded_pitching_gb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_pitching_gsc": {
                "type": "number",
                "format": "double"
              },
              "expanded_pitching_ir": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_pitching_irs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_pitching_k_per_9": {
                "type": "number",
                "format": "double"
              },
              "expanded_pitching_p_per_i": {
                "type": "number",
                "format": "double"
              },
              "expanded_pitching_p_per_s": {
                "type": "number",
                "format": "double"
              },
              "expanded_pitching_qs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_pitching_rsup": {
                "type": "number",
                "format": "double"
              },
              "expanded_pitching_sb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_pitching_sho": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "expanded_pitching_wp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "opponent_batting_2_b": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "opponent_batting_3_b": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "opponent_batting_bh": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "opponent_batting_hr": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "opponent_batting_ibb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "opponent_batting_oba": {
                "type": "number",
                "format": "double"
              },
              "opponent_batting_oobp": {
                "type": "number",
                "format": "double"
              },
              "opponent_batting_oops": {
                "type": "number",
                "format": "double"
              },
              "opponent_batting_oslug": {
                "type": "number",
                "format": "double"
              },
              "opponent_batting_p": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "opponent_batting_p_tbf": {
                "type": "number",
                "format": "double"
              },
              "opponent_batting_rbi": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "opponent_batting_sf": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "opponent_batting_sh": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "opponent_batting_tb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "opponent_batting_tbf": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_bb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_blsv": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_er": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_era": {
                "type": "number",
                "format": "double"
              },
              "pitching_gp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_gs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_h": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_hld": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_ip": {
                "type": "number",
                "format": "double"
              },
              "pitching_k": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_k_per_bb": {
                "type": "number",
                "format": "double"
              },
              "pitching_l": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_r": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_sv": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_w": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_w_pct": {
                "type": "number",
                "format": "double"
              },
              "pitching_war": {
                "type": "number",
                "format": "double"
              },
              "pitching_whip": {
                "type": "number",
                "format": "double"
              },
              "postseason_batting_ab": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_batting_avg": {
                "type": "number",
                "format": "double"
              },
              "postseason_batting_gp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_batting_h": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_batting_hr": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_batting_obp": {
                "type": "number",
                "format": "double"
              },
              "postseason_batting_ops": {
                "type": "number",
                "format": "double"
              },
              "postseason_batting_rbi": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_batting_slg": {
                "type": "number",
                "format": "double"
              },
              "postseason_pitching_bb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_blsv": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_er": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_era": {
                "type": "number",
                "format": "double"
              },
              "postseason_pitching_gp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_gs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_h": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_hld": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_ip": {
                "type": "number",
                "format": "double"
              },
              "postseason_pitching_k": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_k_per_bb": {
                "type": "number",
                "format": "double"
              },
              "postseason_pitching_l": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_r": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_sv": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_w": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "postseason_pitching_w_pct": {
                "type": "number",
                "format": "double"
              },
              "postseason_pitching_war": {
                "type": "number",
                "format": "double"
              },
              "postseason_pitching_whip": {
                "type": "number",
                "format": "double"
              }
            }
          }
        ]
      },
      "BaseballTeamSeasonLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "batting_at_bats": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_at_bats_per_home_run": {
                "type": "number",
                "format": "double"
              },
              "batting_avg": {
                "type": "number",
                "format": "double"
              },
              "batting_caught_stealing": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_doubles": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_extra_base_hits": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_games_started": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_hit_by_pitch": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_hits": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_home_runs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_is_qualified": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_isolated_power": {
                "type": "number",
                "format": "double"
              },
              "batting_off_warbr": {
                "type": "number",
                "format": "double"
              },
              "batting_on_base_pct": {
                "type": "number",
                "format": "double"
              },
              "batting_ops": {
                "type": "number",
                "format": "double"
              },
              "batting_pitches_per_plate_appearance": {
                "type": "number",
                "format": "double"
              },
              "batting_plate_appearances": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_rbis": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_runs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_runs_created": {
                "type": "number",
                "format": "double"
              },
              "batting_runs_created_per_27_outs": {
                "type": "number",
                "format": "double"
              },
              "batting_sac_flies": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_sac_hits": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_secondary_avg": {
                "type": "number",
                "format": "double"
              },
              "batting_slug_avg": {
                "type": "number",
                "format": "double"
              },
              "batting_stolen_bases": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_strikeouts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_team_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_total_bases": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_triples": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_walk_to_strikeout_ratio": {
                "type": "number",
                "format": "double"
              },
              "batting_walks": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "batting_walks_per_plate_appearance": {
                "type": "number",
                "format": "double"
              },
              "batting_warbr": {
                "type": "number",
                "format": "double"
              },
              "fielding_assists": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fielding_def_warbr": {
                "type": "number",
                "format": "double"
              },
              "fielding_double_plays": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fielding_errors": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fielding_fielding_pct": {
                "type": "number",
                "format": "double"
              },
              "fielding_full_innings_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fielding_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fielding_games_started": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fielding_is_qualified": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fielding_putouts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fielding_range_factor": {
                "type": "number",
                "format": "double"
              },
              "fielding_team_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fielding_total_chances": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fielding_zone_rating": {
                "type": "number",
                "format": "double"
              },
              "pitching_at_bats": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_balks": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_batters_hit": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_caught_stealing": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_complete_games": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_doubles": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_earned_runs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_era": {
                "type": "number",
                "format": "double"
              },
              "pitching_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_games_started": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_hits": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_holds": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_home_runs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_innings": {
                "type": "number",
                "format": "double"
              },
              "pitching_is_qualified": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_losses": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_opponent_avg": {
                "type": "number",
                "format": "double"
              },
              "pitching_opponent_on_base_pct": {
                "type": "number",
                "format": "double"
              },
              "pitching_opponent_ops": {
                "type": "number",
                "format": "double"
              },
              "pitching_opponent_slug_avg": {
                "type": "number",
                "format": "double"
              },
              "pitching_opponent_total_bases": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_pitches_per_start": {
                "type": "number",
                "format": "double"
              },
              "pitching_quality_starts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_rbis": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_runs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_save_opportunities": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_saves": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_shutouts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_stolen_bases": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_strikeouts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_strikeouts_per_nine_innings": {
                "type": "number",
                "format": "double"
              },
              "pitching_team_earned_runs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_team_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_triples": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_walks": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_warbr": {
                "type": "number",
                "format": "double"
              },
              "pitching_whip": {
                "type": "number",
                "format": "double"
              },
              "pitching_wild_pitches": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pitching_win_pct": {
                "type": "number",
                "format": "double"
              },
              "pitching_wins": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              }
            }
          }
        ]
      },
      "BasketballPlayerGameLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "ast": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "blk": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "dreb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fg3_pct": {
                "type": "number",
                "format": "double"
              },
              "fg3a": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fg3m": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fg_pct": {
                "type": "number",
                "format": "double"
              },
              "fga": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fgm": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "ft_pct": {
                "type": "number",
                "format": "double"
              },
              "fta": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "ftm": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "min": {
                "oneOf": [
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "oreb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "pf": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "plus_minus": {
                "type": "integer",
                "format": "int32"
              },
              "pts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "reb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "stl": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "to": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              }
            }
          }
        ]
      },
      "BasketballPlayerSeasonLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "ast": {
                "type": "number",
                "format": "double"
              },
              "blk": {
                "type": "number",
                "format": "double"
              },
              "dreb": {
                "type": "number",
                "format": "double"
              },
              "gp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "gs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "min": {
                "type": "number",
                "format": "double"
              },
              "misc_ast": {
                "type": "number",
                "format": "double"
              },
              "misc_blk": {
                "type": "number",
                "format": "double"
              },
              "misc_stl": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_ast_per_to": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_dd2": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_dq": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_eject": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_flag": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_sc_eff": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_sh_eff": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_stl_per_to": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_td3": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_tech": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "oreb": {
                "type": "number",
                "format": "double"
              },
              "pf": {
                "type": "number",
                "format": "double"
              },
              "pts": {
                "type": "number",
                "format": "double"
              },
              "reb": {
                "type": "number",
                "format": "double"
              },
              "shooting_3_p_pct": {
                "type": "number",
                "format": "double"
              },
              "shooting_fg_pct": {
                "type": "number",
                "format": "double"
              },
              "shooting_ft_pct": {
                "type": "number",
                "format": "double"
              },
              "stl": {
                "type": "number",
                "format": "double"
              },
              "to": {
                "type": "number",
                "format": "double"
              },
              "totals_3_p_pct": {
                "type": "number",
                "format": "double"
              },
              "totals_ast": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_blk": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_dr": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_fg3a": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_fg3m": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_fg_pct": {
                "type": "number",
                "format": "double"
              },
              "totals_fga": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_fgm": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_ft_pct": {
                "type": "number",
                "format": "double"
              },
              "totals_fta": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_ftm": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_or": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_pf": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_pts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_reb": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_stl": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "totals_to": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              }
            }
          }
        ]
      },
      "BasketballTeamGameLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "assists": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "blocks": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_rebounds": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fast_break_points": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "field_goal_pct": {
                "type": "number",
                "format": "double"
              },
              "field_goals_attempted": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "field_goals_made": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "flagrant_fouls": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fouls": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "free_throw_pct": {
                "type": "number",
                "format": "double"
              },
              "free_throws_attempted": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "free_throws_made": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "largest_lead": {
                "type": "integer",
                "format": "int32"
              },
              "lead_changes": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "lead_percentage": {
                "type": "number",
                "format": "double"
              },
              "offensive_rebounds": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "points_in_paint": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "steals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "team_turnovers": {
                "type": "integer",
                "format": "int32"
              },
              "technical_fouls": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "three_point_field_goal_pct": {
                "type": "number",
                "format": "double"
              },
              "three_point_field_goals_attempted": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "three_point_field_goals_made": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "total_rebounds": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "total_technical_fouls": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "total_turnovers": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "turnover_points": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "turnovers": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              }
            }
          }
        ]
      },
      "BasketballTeamSeasonLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "defensive_avg_blocks": {
                "type": "number",
                "format": "double"
              },
              "defensive_avg_defensive_rebounds": {
                "type": "number",
                "format": "double"
              },
              "defensive_avg_steals": {
                "type": "number",
                "format": "double"
              },
              "defensive_blocks": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_defensive_rebounds": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_steals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_assist_turnover_ratio": {
                "type": "number",
                "format": "double"
              },
              "general_avg_fouls": {
                "type": "number",
                "format": "double"
              },
              "general_avg_minutes": {
                "type": "number",
                "format": "double"
              },
              "general_avg_rebounds": {
                "type": "number",
                "format": "double"
              },
              "general_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_games_started": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_minutes": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_rebounds": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_total_rebounds": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_assists": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_avg_assists": {
                "type": "number",
                "format": "double"
              },
              "offensive_avg_field_goals_attempted": {
                "type": "number",
                "format": "double"
              },
              "offensive_avg_field_goals_made": {
                "type": "number",
                "format": "double"
              },
              "offensive_avg_free_throws_attempted": {
                "type": "number",
                "format": "double"
              },
              "offensive_avg_free_throws_made": {
                "type": "number",
                "format": "double"
              },
              "offensive_avg_offensive_rebounds": {
                "type": "number",
                "format": "double"
              },
              "offensive_avg_points": {
                "type": "number",
                "format": "double"
              },
              "offensive_avg_three_point_field_goals_attempted": {
                "type": "number",
                "format": "double"
              },
              "offensive_avg_three_point_field_goals_made": {
                "type": "number",
                "format": "double"
              },
              "offensive_avg_turnovers": {
                "type": "number",
                "format": "double"
              },
              "offensive_avg_two_point_field_goals_attempted": {
                "type": "number",
                "format": "double"
              },
              "offensive_avg_two_point_field_goals_made": {
                "type": "number",
                "format": "double"
              },
              "offensive_field_goal_pct": {
                "type": "number",
                "format": "double"
              },
              "offensive_field_goals_attempted": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_field_goals_made": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_free_throw_pct": {
                "type": "number",
                "format": "double"
              },
              "offensive_free_throws_attempted": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_free_throws_made": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_offensive_rebounds": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_points": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_scoring_efficiency": {
                "type": "number",
                "format": "double"
              },
              "offensive_shooting_efficiency": {
                "type": "number",
                "format": "double"
              },
              "offensive_three_point_field_goal_pct": {
                "type": "number",
                "format": "double"
              },
              "offensive_three_point_field_goals_attempted": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_three_point_field_goals_made": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_three_point_pct": {
                "type": "number",
                "format": "double"
              },
              "offensive_turnovers": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_two_point_field_goal_pct": {
                "type": "number",
                "format": "double"
              },
              "offensive_two_point_field_goals_attempted": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_two_point_field_goals_made": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              }
            }
          }
        ]
      },
      "BattedBallTrajectory": {
        "type": "string",
        "description": "Source-reported batted-ball trajectory classification."
      },
      "BoardContext": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "sport"
            ],
            "properties": {
              "avg_exit_velo": {
                "type": [
                  "number",
                  "null"
                ],
                "format": "double"
              },
              "handedness_edge": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "hard_hit_rate": {
                "type": [
                  "number",
                  "null"
                ],
                "format": "double"
              },
              "platoon_split_rate": {
                "type": [
                  "number",
                  "null"
                ],
                "format": "double"
              },
              "sport": {
                "type": "string",
                "enum": [
                  "baseball"
                ]
              }
            }
          }
        ],
        "description": "Sport-specific context attached by the read-side board enricher registry.",
        "discriminator": {
          "propertyName": "sport"
        }
      },
      "BoxscoreLine": {
        "type": "object",
        "description": "One appearance's boxscore line: the appearance identity plus a block per\nphase the person played. Replaces the raw JSONB `stats` on the read path —\nthe blocks carry both stored base measures and computed derived measures.\n\nA single-phase sport yields one [`PhaseLine`]; a two-way player (Ohtani)\nyields a `batting` AND a `pitching` block off the same appearance.",
        "required": [
          "appearance",
          "person",
          "phases"
        ],
        "properties": {
          "appearance": {
            "$ref": "#/components/schemas/AppearanceId"
          },
          "baseball": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BaseballLineupLine"
              }
            ],
            "nullable": true
          },
          "person": {
            "$ref": "#/components/schemas/PersonId"
          },
          "phases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PhaseLine"
            },
            "description": "One block per phase the person played, in phase order."
          },
          "team": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TeamId"
              }
            ],
            "nullable": true
          }
        }
      },
      "CacheStatus": {
        "type": "string",
        "description": "Cache status returned in every response's `meta.cache` field.\n\nIndicates how fresh the response was when served: `HIT` means a fresh cached\nvalue was returned; `STALE` means a slightly older cached value was returned\nwhile a refresh ran in the background; `MISS` means the response was freshly\nfetched for this request.",
        "enum": [
          "HIT",
          "MISS",
          "STALE"
        ]
      },
      "Competition": {
        "type": "object",
        "description": "A competition — roughly today's `league_id` made first-class (`la_liga`,\n`nba`, `fifa_world_cup`, `wbc`). Scoped to **exactly one** [`SportId`], which\nis what lets `dispatch_sport!` key off a typed field instead of a league\nstring. A multi-sport event (Olympics-style) is modeled as one competition\nper sport, never a single multi-sport competition (spec §3.2).",
        "required": [
          "id",
          "sport",
          "kind",
          "slug",
          "name"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/CompetitionId"
          },
          "kind": {
            "$ref": "#/components/schemas/CompetitionKind"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "$ref": "#/components/schemas/CompetitionSlug"
          },
          "sport": {
            "$ref": "#/components/schemas/SportId"
          }
        }
      },
      "CompetitionCapabilities": {
        "type": "object",
        "description": "The capability surface for a competition: its resolved sport plus the\nper-phase measure inventory the typed-per-phase tables advertise (spec §5).\nRe-homed from `/v1/leagues/{league}/capabilities` onto the competition slug.",
        "required": [
          "competition",
          "sport",
          "phases"
        ],
        "properties": {
          "competition": {
            "$ref": "#/components/schemas/CompetitionSlug"
          },
          "phases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PhaseCapabilities"
            },
            "description": "One block per phase the sport records, in phase-declaration order."
          },
          "sport": {
            "$ref": "#/components/schemas/SportId"
          }
        }
      },
      "CompetitionId": {
        "type": "string",
        "description": "Minted entity id (`comp_<base32>`).",
        "examples": [
          "comp_0a1b2c3d4e5f6g7h8i9j0k1l2m"
        ]
      },
      "CompetitionKind": {
        "type": "string",
        "description": "The shape of a competition. Replaces the old international-league boolean —\n\"national-team context?\" is now `kind == CompetitionKind::NationalTeam`,\nmatched exhaustively rather than special-cased through ingest.\n\nThe set starts with the kinds the league list needs and extends\nadditively; the canonical wire strings are stable storage values.",
        "enum": [
          "domestic_club",
          "continental_club",
          "national_team",
          "domestic_cup",
          "tour"
        ]
      },
      "CompetitionListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Competition"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "CompetitionSlug": {
        "type": "string",
        "description": "Stable human address for a competition: lowercase ASCII words joined by single underscores (e.g. `la_liga`).",
        "examples": [
          "la_liga"
        ]
      },
      "ConnectionRole": {
        "type": "string",
        "description": "The role a [`Connection`] plays for an animal entrant.",
        "enum": [
          "jockey",
          "trainer",
          "owner"
        ]
      },
      "ContestBoxscore": {
        "type": "object",
        "description": "The wire shape of a contest boxscore: the resolved team-Match\n[`MatchSummary`], one [`BoxscoreLine`] per appearance (each carrying the\nplayer's per-phase base + derived measures assembled from the typed phase\ntables), and a `finalized` flag derived from the contest's status.\n\nA two-way player's line carries both a `batting` and a `pitching` block. The\nraw JSONB stat blob is no longer served — every measure on the wire is either\na stored base column or a registry-derived value.\n\n`finalized` is the forward-looking trust signal; it is `true` only when the\ncontest is [`ContestStatus::Final`](crate::entities::ContestStatus). The\npartial-ingest 404 still gates whether this response is produced at all.",
        "required": [
          "contest",
          "lines",
          "finalized"
        ],
        "properties": {
          "contest": {
            "$ref": "#/components/schemas/MatchSummary"
          },
          "finalized": {
            "type": "boolean",
            "description": "`true` once the contest has a final result (status is `Final`)."
          },
          "lines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BoxscoreLine"
            }
          }
        }
      },
      "ContestConnectionSummary": {
        "type": "object",
        "required": [
          "role",
          "person",
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "person": {
            "$ref": "#/components/schemas/PersonId"
          },
          "role": {
            "$ref": "#/components/schemas/ConnectionRole"
          }
        }
      },
      "ContestDetailListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContestSummary"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "ContestEntrantSubject": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "team",
              "name",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "team"
                ]
              },
              "name": {
                "type": "string"
              },
              "team": {
                "$ref": "#/components/schemas/TeamId"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "person",
              "name",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "individual"
                ]
              },
              "name": {
                "type": "string"
              },
              "person": {
                "$ref": "#/components/schemas/PersonId"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "members",
              "kind"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "pair"
                ]
              },
              "members": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ContestPersonRef"
                }
              }
            }
          },
          {
            "type": "object",
            "required": [
              "animal",
              "name",
              "connections",
              "kind"
            ],
            "properties": {
              "animal": {
                "$ref": "#/components/schemas/AnimalId"
              },
              "connections": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ContestConnectionSummary"
                }
              },
              "kind": {
                "type": "string",
                "enum": [
                  "animal"
                ]
              },
              "name": {
                "type": "string"
              }
            }
          }
        ],
        "discriminator": {
          "propertyName": "kind"
        }
      },
      "ContestEntrantSummary": {
        "type": "object",
        "required": [
          "entrant",
          "subject"
        ],
        "properties": {
          "entrant": {
            "$ref": "#/components/schemas/EntrantId"
          },
          "result": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ContestResultSummary"
              }
            ],
            "nullable": true
          },
          "seed": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Seed"
              }
            ],
            "nullable": true
          },
          "start_slot": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Slot"
              }
            ],
            "nullable": true
          },
          "subject": {
            "$ref": "#/components/schemas/ContestEntrantSubject"
          }
        }
      },
      "ContestId": {
        "type": "string",
        "description": "Minted entity id (`cst_<base32>`).",
        "examples": [
          "cst_0a1b2c3d4e5f6g7h8i9j0k1l2m"
        ]
      },
      "ContestKind": {
        "oneOf": [
          {
            "type": "string",
            "description": "Exactly two *related* entrants, head-to-head, a mutual/relational score —\ntoday's `Game`. Boxscore reads (\"us vs them\") rely on the two sides.",
            "enum": [
              "match"
            ]
          },
          {
            "type": "object",
            "required": [
              "field"
            ],
            "properties": {
              "field": {
                "type": "object",
                "description": "N *independent* entrants, each independently measured then ranked.",
                "required": [
                  "ranking_basis"
                ],
                "properties": {
                  "ranking_basis": {
                    "$ref": "#/components/schemas/RankingBasis"
                  }
                }
              }
            }
          }
        ],
        "description": "The shape of a contest (spec §4.2) — the load-bearing distinction that makes\n\"home/away\" vs \"Nth place\" illegal-states-unrepresentable. Race-vs-stroke is\n**not** a new shape: it is the [`RankingBasis`] attribute on `Field`, so the\nentire sport list reduces to these two contest shapes."
      },
      "ContestListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MatchSummary"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "ContestLocationSummary": {
        "type": "object",
        "properties": {
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "country": {
            "type": [
              "string",
              "null"
            ]
          },
          "neutral_site": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "venue_name": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "ContestPersonRef": {
        "type": "object",
        "required": [
          "person",
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "person": {
            "$ref": "#/components/schemas/PersonId"
          }
        }
      },
      "ContestRelation": {
        "type": "object",
        "description": "A directed edge from one contest to another (spec §4.6). `round`/`slot`\ndescribe *where* in the bracket the edge sits.",
        "required": [
          "from",
          "to",
          "kind"
        ],
        "properties": {
          "from": {
            "$ref": "#/components/schemas/ContestId"
          },
          "kind": {
            "$ref": "#/components/schemas/ContestRelationKind"
          },
          "round": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Round"
              }
            ],
            "nullable": true
          },
          "slot": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Slot"
              }
            ],
            "nullable": true
          },
          "to": {
            "$ref": "#/components/schemas/ContestId"
          }
        }
      },
      "ContestRelationKind": {
        "type": "string",
        "description": "What an advancement edge means (spec §4.6).",
        "enum": [
          "winner_advances_to",
          "loser_advances_to",
          "next_leg",
          "group_of"
        ]
      },
      "ContestResultSummary": {
        "type": "object",
        "description": "The wire projection of a [`ResultOutcome`] for the contest read API. Kept as a\nflat `status` + optional-fields shape (the OpenAPI component clients consume);\nbuilt from the redesigned [`ResultOutcome`] via [`From`] at the DTO boundary,\nso a non-final status can only ever serialize with `None` placement.",
        "required": [
          "status"
        ],
        "properties": {
          "aggregate": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResultValue"
              }
            ],
            "nullable": true
          },
          "position": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "status": {
            "$ref": "#/components/schemas/ResultStatus"
          },
          "tiebreak": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResultValue"
              }
            ],
            "nullable": true
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ResultValue"
              }
            ],
            "nullable": true
          }
        }
      },
      "ContestStatus": {
        "type": "string",
        "description": "Lifecycle status of a [`Contest`]. Renamed from the legacy `GameStatus`\nwith the identical variant set and stable snake_case wire/storage strings.",
        "enum": [
          "scheduled",
          "in_progress",
          "final",
          "postponed",
          "cancelled",
          "suspended"
        ]
      },
      "ContestSummary": {
        "type": "object",
        "description": "The source-neutral read view of any [`Contest`](crate::domain::contest::Contest):\nmatch or field, team-backed or non-team-backed. Entrants are listed explicitly\nwith their backing subject and optional per-entrant result.",
        "required": [
          "id",
          "edition",
          "competition",
          "kind",
          "starts_at",
          "status",
          "entrants"
        ],
        "properties": {
          "competition": {
            "$ref": "#/components/schemas/CompetitionId"
          },
          "edition": {
            "$ref": "#/components/schemas/EditionId"
          },
          "entrants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContestEntrantSummary"
            }
          },
          "event": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSummary"
              }
            ],
            "nullable": true
          },
          "id": {
            "$ref": "#/components/schemas/ContestId"
          },
          "kind": {
            "$ref": "#/components/schemas/ContestKind"
          },
          "location": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ContestLocationSummary"
              }
            ],
            "nullable": true
          },
          "relations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContestRelation"
            }
          },
          "starts_at": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "$ref": "#/components/schemas/ContestStatus"
          }
        }
      },
      "Country": {
        "type": "string",
        "description": "ISO 3166-1 alpha-3 (or FIFA/IOC) three-letter country code.",
        "examples": [
          "BRA"
        ]
      },
      "DateRange": {
        "type": "object",
        "description": "An inclusive `[start, end]` interval over UTC instants. The temporal anchor\nof an `Edition` (`starts_at..=ends_at`).",
        "required": [
          "start",
          "end"
        ],
        "properties": {
          "end": {
            "type": "string",
            "format": "date-time"
          },
          "start": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Detail": {
        "type": "string",
        "description": "How much of each pitch's Statcast surface to project onto the wire.\n`sparse` is sequencing only; each tier is additive over the previous one.\nDefaults to `full`.",
        "enum": [
          "sparse",
          "standard",
          "full"
        ]
      },
      "Edition": {
        "type": "object",
        "description": "An `Edition` — one running (season) of a competition, with the dated anchor.\n\nThe `span` is **the** temporal anchor of the model: appearances and the\nmembership overlay are reconciled against it (spec §3.2). `competition` ties\nthe edition back to its first-class [`Competition`](crate::domain::competition::Competition).",
        "required": [
          "id",
          "competition",
          "season_year",
          "span"
        ],
        "properties": {
          "competition": {
            "$ref": "#/components/schemas/CompetitionId"
          },
          "id": {
            "$ref": "#/components/schemas/EditionId"
          },
          "season_year": {
            "$ref": "#/components/schemas/SeasonYear"
          },
          "span": {
            "$ref": "#/components/schemas/DateRange"
          }
        }
      },
      "EditionId": {
        "type": "string",
        "description": "Minted entity id (`edt_<base32>`).",
        "examples": [
          "edt_0a1b2c3d4e5f6g7h8i9j0k1l2m"
        ]
      },
      "EditionListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Edition"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "EntityTrait": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "country",
              "kind"
            ],
            "properties": {
              "country": {
                "$ref": "#/components/schemas/Country"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "represents_country"
                ]
              }
            }
          }
        ],
        "description": "A typed fact attached to a canonical entity (a [`Team`], or an\n[`Entrant`](crate::domain::entrant::Entrant)).\n\nThese are not identity by themselves and are not display text. They are\nmachine-readable facts the resolver/store can project from source\nobservations or legacy storage columns while keeping the bearer first-class.",
        "discriminator": {
          "propertyName": "kind"
        }
      },
      "EntrantId": {
        "type": "string",
        "description": "Minted entity id (`ent_<base32>`).",
        "examples": [
          "ent_0a1b2c3d4e5f6g7h8i9j0k1l2m"
        ]
      },
      "ErrorDetail": {
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "additionalProperties": {
          "description": "Additional structured context. Empty for most errors; populated for\nerrors like `NOT_SUPPORTED` where machine-readable detail aids\nclient-side feature detection."
        }
      },
      "ErrorResponse": {
        "type": "object",
        "description": "Error response body.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ErrorDetail"
          }
        }
      },
      "EventId": {
        "type": "string",
        "description": "Minted entity id (`evt_<base32>`).",
        "examples": [
          "evt_0a1b2c3d4e5f6g7h8i9j0k1l2m"
        ]
      },
      "EventKind": {
        "type": "string",
        "description": "The kind of intra-edition grouping an [`Event`](crate::ids::EventId)\nrepresents (spec §4.5b): a tournament/round/series/meeting within one\nedition of one competition.",
        "enum": [
          "tournament",
          "round",
          "series",
          "meeting"
        ]
      },
      "EventLineageSlug": {
        "type": "string",
        "description": "Stable cross-edition identity of a recurring event: lowercase ASCII words joined by single underscores (e.g. `wimbledon`).",
        "examples": [
          "wimbledon"
        ]
      },
      "EventSummary": {
        "type": "object",
        "description": "The read-side summary of an intra-edition grouping attached to a contest:\ntournament, round, series, or meeting. This is source-neutral; adapters lower\nupstream-specific fields into canonical [`Event`](crate::domain::event::Event)\nrows before this view is assembled.",
        "required": [
          "id",
          "kind",
          "name",
          "span"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/EventId"
          },
          "kind": {
            "$ref": "#/components/schemas/EventKind"
          },
          "lineage": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventLineageSlug"
              }
            ],
            "nullable": true
          },
          "name": {
            "type": "string"
          },
          "span": {
            "$ref": "#/components/schemas/DateRange"
          }
        }
      },
      "FootballPlayerGameLine": {
        "allOf": [
          {
            "allOf": [
              {
                "type": "object",
                "properties": {
                  "pass_avg": {
                    "type": "number",
                    "format": "double"
                  },
                  "pass_c_att": {
                    "type": "string"
                  },
                  "pass_int": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pass_long": {
                    "type": "integer",
                    "format": "int32"
                  },
                  "pass_qbr": {
                    "type": "number",
                    "format": "double"
                  },
                  "pass_rtg": {
                    "type": "number",
                    "format": "double"
                  },
                  "pass_sacks": {
                    "oneOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  "pass_td": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pass_yds": {
                    "type": "integer",
                    "format": "int32"
                  }
                }
              }
            ]
          },
          {
            "allOf": [
              {
                "type": "object",
                "properties": {
                  "rush_avg": {
                    "type": "number",
                    "format": "double"
                  },
                  "rush_car": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "rush_long": {
                    "type": "integer",
                    "format": "int32"
                  },
                  "rush_td": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "rush_yds": {
                    "type": "integer",
                    "format": "int32"
                  }
                }
              }
            ]
          },
          {
            "allOf": [
              {
                "type": "object",
                "properties": {
                  "rec": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "rec_avg": {
                    "type": "number",
                    "format": "double"
                  },
                  "rec_long": {
                    "type": "integer",
                    "format": "int32"
                  },
                  "rec_td": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "rec_yds": {
                    "type": "integer",
                    "format": "int32"
                  },
                  "tgts": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  }
                }
              }
            ]
          },
          {
            "allOf": [
              {
                "type": "object",
                "properties": {
                  "fg": {
                    "type": "string"
                  },
                  "fum": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "in_20": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "int": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "kick_pct": {
                    "type": "number",
                    "format": "double"
                  },
                  "kicking_pts": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "lost": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pd": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "qb_hts": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "sacks": {
                    "oneOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  "solo": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "tb": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "tfl": {
                    "type": "number",
                    "format": "double"
                  },
                  "tot": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "xp": {
                    "type": "string"
                  }
                }
              }
            ]
          },
          {
            "type": "object"
          }
        ]
      },
      "FootballPlayerSeasonLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "defensive_pd": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_solo": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_tfl": {
                "type": "number",
                "format": "double"
              },
              "defensive_tot": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_long": {
                "type": "integer",
                "format": "int32"
              },
              "kicking_pts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_xp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_cmp_pct": {
                "type": "number",
                "format": "double"
              },
              "passing_gp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_gs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_int": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_qbr": {
                "type": "number",
                "format": "double"
              },
              "passing_rtg": {
                "type": "number",
                "format": "double"
              },
              "passing_td": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_yds": {
                "type": "integer",
                "format": "int32"
              },
              "receiving_avg": {
                "type": "number",
                "format": "double"
              },
              "receiving_long": {
                "type": "integer",
                "format": "int32"
              },
              "receiving_rec": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_td": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_yds": {
                "type": "integer",
                "format": "int32"
              },
              "rushing_avg": {
                "type": "number",
                "format": "double"
              },
              "rushing_car": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_long": {
                "type": "integer",
                "format": "int32"
              },
              "rushing_td": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_yds": {
                "type": "integer",
                "format": "int32"
              }
            }
          }
        ]
      },
      "FootballTeamGameLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "completion_attempts": {
                "type": "string"
              },
              "defensive_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "first_downs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "first_downs_passing": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "first_downs_penalty": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "first_downs_rushing": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fourth_down_eff": {
                "type": "string"
              },
              "fumbles_lost": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "interceptions": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "net_passing_yards": {
                "type": "integer",
                "format": "int32"
              },
              "possession_time": {
                "type": "string"
              },
              "red_zone_attempts": {
                "type": "string"
              },
              "rushing_attempts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_yards": {
                "type": "integer",
                "format": "int32"
              },
              "sacks_yards_lost": {
                "type": "string"
              },
              "third_down_eff": {
                "type": "string"
              },
              "total_drives": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "total_offensive_plays": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "total_penalties_yards": {
                "type": "string"
              },
              "total_yards": {
                "type": "integer",
                "format": "int32"
              },
              "turnovers": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "yards_per_pass": {
                "type": "number",
                "format": "double"
              },
              "yards_per_play": {
                "type": "number",
                "format": "double"
              },
              "yards_per_rush_attempt": {
                "type": "number",
                "format": "double"
              }
            }
          }
        ]
      },
      "FootballTeamSeasonLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "defensive_assist_tackles": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_avg_interception_yards": {
                "type": "number",
                "format": "double"
              },
              "defensive_interceptions_interception_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_interceptions_interception_yards": {
                "type": "integer",
                "format": "int32"
              },
              "defensive_interceptions_interceptions": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_interceptions_total_interceptions_yards": {
                "type": "string"
              },
              "defensive_kicks_blocked": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_long_interception": {
                "type": "integer",
                "format": "int32"
              },
              "defensive_misc_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_passes_defended": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_sack_yards": {
                "type": "integer",
                "format": "int32"
              },
              "defensive_sacks": {
                "type": "number",
                "format": "double"
              },
              "defensive_solo_tackles": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_stuffs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_tackles_for_loss": {
                "type": "number",
                "format": "double"
              },
              "defensive_team_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_total_tackles": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_fumbles": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_fumbles_and_lost": {
                "type": "string"
              },
              "general_fumbles_forced": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_fumbles_recovered": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_fumbles_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_avg_kickoff_return_yards": {
                "type": "number",
                "format": "double"
              },
              "kicking_extra_point_attempts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_extra_point_pct": {
                "type": "number",
                "format": "double"
              },
              "kicking_extra_points_made": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goal_attempts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goal_attempts1_19": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goal_attempts20_29": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goal_attempts30_39": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goal_attempts40_49": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goal_attempts50": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goal_pct": {
                "type": "number",
                "format": "double"
              },
              "kicking_field_goals_made": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goals_made1_19": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goals_made20_29": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goals_made30_39": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goals_made40_49": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_field_goals_made50": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_kickoff_return_yards": {
                "type": "integer",
                "format": "int32"
              },
              "kicking_kickoff_returns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_long_field_goal_made": {
                "type": "integer",
                "format": "int32"
              },
              "kicking_team_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_total_goals_vs_attemps": {
                "type": "string"
              },
              "kicking_total_kicking_points": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "kicking_total_kickoff_yards": {
                "type": "integer",
                "format": "int32"
              },
              "kicking_touchback_pct": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_first_downs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_first_downs_passing": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_first_downs_penalty": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_first_downs_rushing": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_fourth_down_attempts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_fourth_down_conv_pct": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_fourth_down_convs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_fourth_down_eff": {
                "type": "string"
              },
              "miscellaneous_fumbles_lost": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_possession_time_seconds": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_redzone_efficiency_pct": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_redzone_field_goal_pct": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_redzone_scoring_pct": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_redzone_touchdown_pct": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_third_down_attempts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_third_down_conv_pct": {
                "type": "number",
                "format": "double"
              },
              "miscellaneous_third_down_convs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_third_down_eff": {
                "type": "string"
              },
              "miscellaneous_total_giveaways": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_total_penalties": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_total_penalties_yards": {
                "type": "string"
              },
              "miscellaneous_total_penalty_yards": {
                "type": "integer",
                "format": "int32"
              },
              "miscellaneous_total_takeaways": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "miscellaneous_turn_over_differential": {
                "type": "integer",
                "format": "int32"
              },
              "passing_completion_attempts": {
                "type": "string"
              },
              "passing_completion_pct": {
                "type": "number",
                "format": "double"
              },
              "passing_completions": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_interception_pct": {
                "type": "number",
                "format": "double"
              },
              "passing_interceptions": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_long_passing": {
                "type": "integer",
                "format": "int32"
              },
              "passing_net_passing_yards": {
                "type": "integer",
                "format": "int32"
              },
              "passing_net_passing_yards_per_game": {
                "type": "number",
                "format": "double"
              },
              "passing_passing_attempts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_passing_fumbles_lost": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_passing_touchdown_pct": {
                "type": "number",
                "format": "double"
              },
              "passing_passing_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_passing_yards": {
                "type": "integer",
                "format": "int32"
              },
              "passing_passing_yards_per_game": {
                "type": "number",
                "format": "double"
              },
              "passing_qbrating": {
                "type": "number",
                "format": "double"
              },
              "passing_sack_yards_lost": {
                "type": "integer",
                "format": "int32"
              },
              "passing_sacks": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_sacks_yards_lost": {
                "type": "string"
              },
              "passing_team_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_total_points": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_total_points_per_game": {
                "type": "number",
                "format": "double"
              },
              "passing_total_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "passing_yards_per_game": {
                "type": "number",
                "format": "double"
              },
              "passing_yards_per_pass_attempt": {
                "type": "number",
                "format": "double"
              },
              "punting_avg_punt_return_yards": {
                "type": "number",
                "format": "double"
              },
              "punting_fair_catches": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "punting_gross_avg_punt_yards": {
                "type": "number",
                "format": "double"
              },
              "punting_long_punt": {
                "type": "integer",
                "format": "int32"
              },
              "punting_net_avg_punt_yards": {
                "type": "number",
                "format": "double"
              },
              "punting_punt_return_yards": {
                "type": "integer",
                "format": "int32"
              },
              "punting_punt_returns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "punting_punt_yards": {
                "type": "integer",
                "format": "int32"
              },
              "punting_punts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "punting_punts_blocked": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "punting_punts_inside20": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "punting_team_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "punting_total_punts_yards": {
                "type": "string"
              },
              "punting_touchbacks": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_long_reception": {
                "type": "integer",
                "format": "int32"
              },
              "receiving_receiving_big_plays": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_receiving_first_downs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_receiving_fumbles": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_receiving_fumbles_lost": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_receiving_targets": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_receiving_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_receiving_yards": {
                "type": "integer",
                "format": "int32"
              },
              "receiving_receiving_yards_after_catch": {
                "type": "integer",
                "format": "int32"
              },
              "receiving_receiving_yards_per_game": {
                "type": "number",
                "format": "double"
              },
              "receiving_receptions": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_team_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_total_points": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_total_points_per_game": {
                "type": "number",
                "format": "double"
              },
              "receiving_total_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "receiving_yards_per_reception": {
                "type": "number",
                "format": "double"
              },
              "returning_kick_return_fumbles_lost": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "returning_kick_return_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "returning_kick_return_yards": {
                "type": "integer",
                "format": "int32"
              },
              "returning_kick_returns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "returning_long_kick_return": {
                "type": "integer",
                "format": "int32"
              },
              "returning_long_punt_return": {
                "type": "integer",
                "format": "int32"
              },
              "returning_punt_return_fair_catches": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "returning_punt_return_fumbles_lost": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "returning_punt_return_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "returning_punt_return_yards": {
                "type": "integer",
                "format": "int32"
              },
              "returning_punt_returns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "returning_team_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "returning_total_punt_returns_yards": {
                "type": "string"
              },
              "returning_yards_per_kick_return": {
                "type": "number",
                "format": "double"
              },
              "returning_yards_per_punt_return": {
                "type": "number",
                "format": "double"
              },
              "rushing_long_rushing": {
                "type": "integer",
                "format": "int32"
              },
              "rushing_rushing_attempts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_rushing_big_plays": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_rushing_first_downs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_rushing_fumbles": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_rushing_fumbles_lost": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_rushing_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_rushing_yards": {
                "type": "integer",
                "format": "int32"
              },
              "rushing_rushing_yards_per_game": {
                "type": "number",
                "format": "double"
              },
              "rushing_team_games_played": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_total_offensive_plays": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_total_points": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_total_points_per_game": {
                "type": "number",
                "format": "double"
              },
              "rushing_total_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "rushing_total_yards": {
                "type": "integer",
                "format": "int32"
              },
              "rushing_yards_per_rush_attempt": {
                "type": "number",
                "format": "double"
              },
              "scoring_field_goals": {
                "type": "string"
              },
              "scoring_kick_extra_points": {
                "type": "string"
              },
              "scoring_receiving_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "scoring_return_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "scoring_rushing_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "scoring_total_points": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "scoring_total_points_per_game": {
                "type": "number",
                "format": "double"
              },
              "scoring_total_touchdowns": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "scoring_total_two_point_convs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              }
            }
          }
        ]
      },
      "GameId": {
        "type": "string",
        "description": "Minted entity id (`game_<base32>`).",
        "examples": [
          "game_0a1b2c3d4e5f6g7h8i9j0k1l2m"
        ]
      },
      "GameOutcome": {
        "type": "string",
        "description": "The result of a game from a team's own perspective. Derived (never stored) by\ncomparing the team's score to the opponent's in [`TeamGameLogEntry::from_game`];\na game with no score yields `None`.",
        "enum": [
          "win",
          "loss",
          "tie"
        ]
      },
      "HalfInning": {
        "type": "string",
        "description": "Half inning: top (away batting) or bottom (home batting).",
        "enum": [
          "top",
          "bottom"
        ]
      },
      "HandednessCode": {
        "type": "string",
        "description": "Source-reported handedness / side code, such as `R`, `L`, or `S`."
      },
      "HeightInches": {
        "type": "integer",
        "format": "int32"
      },
      "HitRate": {
        "type": "object",
        "description": "The over-rate of a stat's per-game values against a prop `line`.",
        "required": [
          "line",
          "hits",
          "games",
          "over_rate"
        ],
        "properties": {
          "games": {
            "type": "integer",
            "description": "Number of games that carried the stat (the denominator).",
            "minimum": 0
          },
          "hits": {
            "type": "integer",
            "description": "Number of games whose value strictly cleared `line`.",
            "minimum": 0
          },
          "line": {
            "type": "number",
            "format": "double",
            "description": "The threshold the per-game values are compared against."
          },
          "over_rate": {
            "type": "number",
            "format": "double",
            "description": "`hits / games` (`0.0` when no games carried the stat)."
          }
        }
      },
      "HockeyPlayerGameLine": {
        "allOf": [
          {
            "allOf": [
              {
                "type": "object",
                "properties": {
                  "a": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "bs": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "estoi": {
                    "type": "string"
                  },
                  "fl": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "fo_pct": {
                    "type": "number",
                    "format": "double"
                  },
                  "fw": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "g": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "gv": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "ht": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pim": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "plus_minus": {
                    "type": "integer",
                    "format": "int32"
                  },
                  "pn": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pptoi": {
                    "type": "string"
                  },
                  "pts": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "s": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "shft": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "shootout_goals": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "shtoi": {
                    "type": "string"
                  },
                  "sm": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "sog": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "tk": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "toi": {
                    "type": "string"
                  },
                  "ytdg": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  }
                }
              }
            ]
          },
          {
            "allOf": [
              {
                "type": "object",
                "properties": {
                  "essv": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "ga": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "pim": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "ppsv": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "sa": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "shsv": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "sos": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "sosa": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "sv": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  },
                  "sv_pct": {
                    "type": "number",
                    "format": "double"
                  },
                  "toi": {
                    "type": "string"
                  },
                  "ytdg": {
                    "type": "integer",
                    "format": "int32",
                    "minimum": 0
                  }
                }
              }
            ]
          },
          {
            "type": "object"
          }
        ]
      },
      "HockeyPlayerSeasonLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "center_a": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "center_g": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "center_gp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "center_gwg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "center_pim": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "center_plus_minus": {
                "type": "integer",
                "format": "int32"
              },
              "center_ppa": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "center_ppg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "center_prod": {
                "type": "string"
              },
              "center_pts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "center_sha": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "center_shg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "center_sog": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "center_spct": {
                "type": "number",
                "format": "double"
              },
              "center_toi_per_game": {
                "type": "string"
              },
              "defense_a": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defense_g": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defense_gp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defense_gwg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defense_pim": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defense_plus_minus": {
                "type": "integer",
                "format": "int32"
              },
              "defense_ppa": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defense_ppg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defense_prod": {
                "type": "string"
              },
              "defense_pts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defense_sha": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defense_shg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defense_sog": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defense_spct": {
                "type": "number",
                "format": "double"
              },
              "defense_toi_per_game": {
                "type": "string"
              },
              "goaltender_ga": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goaltender_gaa": {
                "type": "number",
                "format": "double"
              },
              "goaltender_gp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goaltender_gs": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goaltender_l": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goaltender_otl": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goaltender_sa": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goaltender_so": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goaltender_sv": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goaltender_sv_pct": {
                "type": "number",
                "format": "double"
              },
              "goaltender_t": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goaltender_toi_per_game": {
                "type": "string"
              },
              "goaltender_wins": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_a": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_g": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_gp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_gwg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_pim": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_plus_minus": {
                "type": "integer",
                "format": "int32"
              },
              "left_wing_ppa": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_ppg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_prod": {
                "type": "string"
              },
              "left_wing_pts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_sha": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_shg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_sog": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "left_wing_spct": {
                "type": "number",
                "format": "double"
              },
              "left_wing_toi_per_game": {
                "type": "string"
              },
              "right_wing_a": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "right_wing_g": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "right_wing_gp": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "right_wing_gwg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "right_wing_pim": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "right_wing_plus_minus": {
                "type": "integer",
                "format": "int32"
              },
              "right_wing_ppa": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "right_wing_ppg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "right_wing_prod": {
                "type": "string"
              },
              "right_wing_pts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "right_wing_sha": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "right_wing_shg": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "right_wing_sog": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "right_wing_spct": {
                "type": "number",
                "format": "double"
              },
              "right_wing_toi_per_game": {
                "type": "string"
              }
            }
          }
        ]
      },
      "HockeyTeamGameLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "blocked_shots": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "faceoff_percent": {
                "type": "number",
                "format": "double"
              },
              "faceoffs_won": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "giveaways": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "hits": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "penalties": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "penalty_minutes": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "power_play_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "power_play_opportunities": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "power_play_pct": {
                "type": "number",
                "format": "double"
              },
              "shootout_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "short_handed_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "shots_total": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "takeaways": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              }
            }
          }
        ]
      },
      "HockeyTeamSeasonLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "defensive_avg_goals_against": {
                "type": "number",
                "format": "double"
              },
              "defensive_goals_against": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_overtime_losses": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_save_pct": {
                "type": "number",
                "format": "double"
              },
              "defensive_saves": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_shootout_save_pct": {
                "type": "number",
                "format": "double"
              },
              "defensive_shootout_saves": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_shootout_shots_against": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "defensive_shots_against": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_games": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_losses": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_plus_minus": {
                "type": "integer",
                "format": "int32"
              },
              "general_production": {
                "type": "string"
              },
              "general_shifts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "general_time_on_ice": {
                "type": "string"
              },
              "general_time_on_ice_per_game": {
                "type": "string"
              },
              "general_wins": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_assists": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_faceoff_percent": {
                "type": "number",
                "format": "double"
              },
              "offensive_faceoffs_lost": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_faceoffs_won": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_game_winning_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_points": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_power_play_assists": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_power_play_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_shooting_pct": {
                "type": "number",
                "format": "double"
              },
              "offensive_shootout_attempts": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_shootout_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_shootout_shot_pct": {
                "type": "number",
                "format": "double"
              },
              "offensive_short_handed_assists": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_short_handed_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offensive_shots_total": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "penalties_penalty_minutes": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              }
            }
          }
        ]
      },
      "LineupSlot": {
        "type": "object",
        "description": "One batting-order slot on a [`MatchupCard`]'s lineup, from\n`entity.matchup_lineup_slots`. `batting_order`/`position`/`bat_side` are\nnullable in the schema (a slot can be named before the full lineup detail\nis confirmed), so they stay `Option` on the wire rather than being\ndefaulted.",
        "required": [
          "person_id",
          "name",
          "confirmed"
        ],
        "properties": {
          "bat_side": {
            "allOf": [
              {
                "$ref": "#/components/schemas/HandednessCode"
              }
            ],
            "nullable": true
          },
          "batting_order": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "confirmed": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "person_id": {
            "$ref": "#/components/schemas/PersonId"
          },
          "position": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionCode"
              }
            ],
            "nullable": true
          }
        }
      },
      "MatchSummary": {
        "type": "object",
        "description": "The team-Match read view of a [`Contest`](crate::domain::contest::Contest):\na two-entrant `Match` between team-backed entrants, projected onto the\nhome/away/score shape team-sport clients consume.\n\n`id` is the underlying [`ContestId`]; `home_team`/`away_team` and the optional\n[`Score`] are reconstructed by the store from the contest's two\n[`ContestEntrant`](crate::domain::contest_entrant::ContestEntrant) edges\n(ordered by `start_slot`: 0 = home, 1 = away) and their per-entrant\n[`Result`](crate::domain::result::Result) rows. It is intentionally\nteam-sport-shaped — a field contest (golf, racing) has no home/away and is not\nprojected here.",
        "required": [
          "id",
          "edition",
          "competition",
          "home_team",
          "away_team",
          "kickoff",
          "status"
        ],
        "properties": {
          "away_team": {
            "$ref": "#/components/schemas/TeamId"
          },
          "competition": {
            "$ref": "#/components/schemas/CompetitionId"
          },
          "edition": {
            "$ref": "#/components/schemas/EditionId"
          },
          "event": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSummary"
              }
            ],
            "nullable": true
          },
          "home_team": {
            "$ref": "#/components/schemas/TeamId"
          },
          "id": {
            "$ref": "#/components/schemas/ContestId"
          },
          "kickoff": {
            "type": "string",
            "format": "date-time"
          },
          "location": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ContestLocationSummary"
              }
            ],
            "nullable": true
          },
          "score": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Score"
              }
            ],
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/ContestStatus"
          }
        }
      },
      "MatchupCard": {
        "type": "object",
        "description": "MLB pregame matchup card: probable pitchers + lineups for one contest,\nassembled from `entity.matchups` ⨝ `entity.matchup_lineup_slots` (spec §1 /\nplan Task 2). `status`/`game_time` mirror the nullable `matchups` columns\n(a matchup row can exist before the contest's own schedule detail is\nfully populated).",
        "required": [
          "contest",
          "home_lineup",
          "away_lineup",
          "lineups_available"
        ],
        "properties": {
          "away_lineup": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LineupSlot"
            }
          },
          "away_probable_pitcher": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PitcherRef"
              }
            ],
            "nullable": true
          },
          "away_team": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TeamRef"
              }
            ],
            "nullable": true
          },
          "contest": {
            "$ref": "#/components/schemas/ContestId"
          },
          "game_time": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "home_lineup": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LineupSlot"
            }
          },
          "home_probable_pitcher": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PitcherRef"
              }
            ],
            "nullable": true
          },
          "home_team": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TeamRef"
              }
            ],
            "nullable": true
          },
          "lineups_available": {
            "type": "boolean"
          },
          "status": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "MatchupListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MatchupCard"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "Membership": {
        "type": "object",
        "description": "A person's dated affiliation with a team, attributed to the source that\nobserved it. The span is the membership's whole temporal footprint.",
        "required": [
          "id",
          "person",
          "team",
          "span",
          "source"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/MembershipId"
          },
          "person": {
            "$ref": "#/components/schemas/PersonId"
          },
          "source": {
            "$ref": "#/components/schemas/Source"
          },
          "span": {
            "$ref": "#/components/schemas/DateRange"
          },
          "team": {
            "$ref": "#/components/schemas/TeamId"
          }
        }
      },
      "MembershipId": {
        "type": "string",
        "description": "Minted entity id (`mem_<base32>`).",
        "examples": [
          "mem_0a1b2c3d4e5f6g7h8i9j0k1l2m"
        ]
      },
      "MembershipListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Membership"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "PbpFilters": {
        "type": "object",
        "description": "The filters actually applied to the read, echoed back for a caller that\nwants to confirm what narrowed the result (omitted axes are absent, not\n`null`).",
        "properties": {
          "batter_id": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PersonId"
              }
            ],
            "nullable": true
          },
          "pitcher_id": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PersonId"
              }
            ],
            "nullable": true
          }
        }
      },
      "Person": {
        "type": "object",
        "description": "A canonical human. Identity is the minted [`PersonId`]; everything else lives\nin the assembled [`PersonBio`].",
        "required": [
          "id",
          "bio"
        ],
        "properties": {
          "bio": {
            "$ref": "#/components/schemas/PersonBio"
          },
          "id": {
            "$ref": "#/components/schemas/PersonId"
          }
        }
      },
      "PersonBio": {
        "type": "object",
        "description": "Assembled biographical attributes for a [`Person`]. Each field is the\nwrite-through reconciliation of every source's observation (spec §4.3); read\ndirectly, never re-merged at request time.",
        "required": [
          "full_name"
        ],
        "properties": {
          "birth_country": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Country"
              }
            ],
            "nullable": true
          },
          "display_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "dob": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "full_name": {
            "type": "string"
          },
          "headshot_url": {
            "type": [
              "string",
              "null"
            ]
          },
          "height_inches": {
            "allOf": [
              {
                "$ref": "#/components/schemas/HeightInches"
              }
            ],
            "nullable": true
          },
          "position": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionCode"
              }
            ],
            "nullable": true
          },
          "weight_lbs": {
            "allOf": [
              {
                "$ref": "#/components/schemas/WeightLbs"
              }
            ],
            "nullable": true
          }
        }
      },
      "PersonGameLogEntry": {
        "type": "object",
        "description": "One row of a person's game log (Workflow-1 task A4) — the game the appearance\nbelongs to plus that game's phase-derived stat line. The line is assembled\nfrom `appearances ⨝ phase tables` (base + registry-derived measures), exactly\nlike a boxscore line but keyed to the person; the `game` reference ties it to\nthe game so a consumer can tell the rows of a chronological log apart. A pure\nread — there is no `*_game_logs` table.",
        "required": [
          "game",
          "line"
        ],
        "properties": {
          "event": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSummary"
              }
            ],
            "nullable": true
          },
          "game": {
            "$ref": "#/components/schemas/ContestId"
          },
          "line": {
            "$ref": "#/components/schemas/BoxscoreLine"
          }
        }
      },
      "PersonGameLogListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PersonGameLogEntry"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "PersonId": {
        "type": "string",
        "description": "Minted entity id (`per_<base32>`).",
        "examples": [
          "per_0a1b2c3d4e5f6g7h8i9j0k1l2m"
        ]
      },
      "PersonListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Person"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "Phase": {
        "type": "string",
        "description": "Scoring phase namespace (e.g. `batting`, `pitching`, `skater`, `goalie`)."
      },
      "PhaseCapabilities": {
        "type": "object",
        "description": "One phase's measure inventory inside a competition's capability surface — the\nphase namespace (`batting`, `basketball_player_game`, …) and the stat keys it\nreports (base + derived measure ids). Assembled from the sport's phase\nregistry ([`crate::stats::phase::phases`]), never hand-maintained, so it can't\ndrift from the schema.",
        "required": [
          "phase",
          "measures"
        ],
        "properties": {
          "measure_notes": {
            "type": "object",
            "description": "Consumer-facing settlement/display notes for specific measures. Omitted\nwhen the phase has no special convention.",
            "additionalProperties": {
              "type": "string"
            }
          },
          "measures": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Every measure id (base + derived) this phase reports, in registry order."
          },
          "phase": {
            "type": "string",
            "description": "The phase namespace (`Phase::as_str`) — the block key a stat line is\nreported under."
          }
        }
      },
      "PhaseLine": {
        "type": "object",
        "description": "One phase's stat block: the phase name plus its measures — stored **base**\ncolumns AND the **derived** measures the registry formulas compute (base as\nJSON integers, derived as JSON floats). Built by [`PhaseLine::from_row`] from\na typed phase row, which is the only place a derived formula is evaluated on\nthe read path.",
        "required": [
          "phase",
          "measures"
        ],
        "properties": {
          "measures": {
            "type": "object",
            "description": "Base measures (integers) merged with derived measures (floats), keyed by\nmeasure id. An undefined derived rate (e.g. `avg` with zero at-bats) is\nabsent, never a fabricated `0`. A free-form object: the measure key set is\nphase- and sport-dependent (the typed per-sport `#[stat_line]` schemas\ndocument the full key universe)."
          },
          "phase": {
            "type": "string",
            "description": "The phase namespace (`\"batting\"`, `\"pitching\"`, `\"basketball_player_game\"`, …)."
          }
        }
      },
      "PitchCallCode": {
        "type": "string",
        "description": "Source-reported compact pitch result/call code, such as MLB's `B`."
      },
      "PitchCallDescription": {
        "type": "string",
        "description": "Source-reported pitch result/call label, such as MLB's `Ball`."
      },
      "PitchTypeCode": {
        "type": "string",
        "description": "Source-reported compact pitch type code, such as MLB's `FF`."
      },
      "PitchTypeName": {
        "type": "string",
        "description": "Source-reported pitch type label, such as MLB's `Four-Seam Fastball`."
      },
      "PitchView": {
        "type": "object",
        "description": "One pitch, projected to the requested [`Detail`] tier. Fields beyond the\n`sparse` sequencing surface are omitted (not `null`) when the tier doesn't\ninclude them.",
        "required": [
          "pitch_number",
          "pitch_number_game",
          "balls",
          "strikes",
          "outs",
          "is_strike",
          "is_ball",
          "is_in_play"
        ],
        "properties": {
          "balls": {
            "type": "integer",
            "format": "int32"
          },
          "call_code": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PitchCallCode"
              }
            ],
            "nullable": true
          },
          "call_description": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PitchCallDescription"
              }
            ],
            "nullable": true
          },
          "is_ball": {
            "type": "boolean"
          },
          "is_in_play": {
            "type": "boolean"
          },
          "is_strike": {
            "type": "boolean"
          },
          "launch_angle": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "launch_speed": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "outs": {
            "type": "integer",
            "format": "int32"
          },
          "pitch_number": {
            "type": "integer",
            "format": "int32"
          },
          "pitch_number_game": {
            "type": "integer",
            "format": "int32"
          },
          "pitch_type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PitchTypeName"
              }
            ],
            "nullable": true
          },
          "pitch_type_code": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PitchTypeCode"
              }
            ],
            "nullable": true
          },
          "plate_x": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "plate_z": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "spin_rate": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "start_speed": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "strikes": {
            "type": "integer",
            "format": "int32"
          },
          "total_distance": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "trajectory": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BattedBallTrajectory"
              }
            ],
            "nullable": true
          },
          "zone": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          }
        }
      },
      "PitcherRef": {
        "type": "object",
        "description": "A probable starting pitcher on a [`MatchupCard`] — nullable end to end\n(`entity.matchups.home_pitcher_id`/`away_pitcher_id` and `*_throws` are all\nnullable; a probable pitcher isn't always announced yet).",
        "required": [
          "person_id",
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "person_id": {
            "$ref": "#/components/schemas/PersonId"
          },
          "throws": {
            "allOf": [
              {
                "$ref": "#/components/schemas/HandednessCode"
              }
            ],
            "nullable": true
          }
        }
      },
      "PlateAppearanceView": {
        "type": "object",
        "description": "One plate appearance, carrying its ordered, tier-projected pitches.",
        "required": [
          "inning",
          "half_inning",
          "at_bat_index",
          "batter_id",
          "pitcher_id",
          "batter_team_id",
          "pitcher_team_id",
          "bat_side",
          "pitch_hand",
          "event",
          "event_type",
          "description",
          "rbi",
          "outs_before",
          "runners_before",
          "away_score",
          "home_score",
          "is_scoring_play",
          "is_out",
          "pitch_count",
          "final_balls",
          "final_strikes",
          "pitches"
        ],
        "properties": {
          "at_bat_index": {
            "type": "integer",
            "format": "int32"
          },
          "away_score": {
            "type": "integer",
            "format": "int32"
          },
          "bat_side": {
            "$ref": "#/components/schemas/HandednessCode"
          },
          "batter_id": {
            "$ref": "#/components/schemas/PersonId"
          },
          "batter_team_id": {
            "$ref": "#/components/schemas/TeamId"
          },
          "description": {
            "type": "string"
          },
          "event": {
            "$ref": "#/components/schemas/PlayEventName"
          },
          "event_type": {
            "$ref": "#/components/schemas/PlayEventType"
          },
          "final_balls": {
            "type": "integer",
            "format": "int32"
          },
          "final_strikes": {
            "type": "integer",
            "format": "int32"
          },
          "half_inning": {
            "$ref": "#/components/schemas/HalfInning"
          },
          "home_score": {
            "type": "integer",
            "format": "int32"
          },
          "inning": {
            "type": "integer",
            "format": "int32"
          },
          "is_out": {
            "type": "boolean"
          },
          "is_scoring_play": {
            "type": "boolean"
          },
          "outs_before": {
            "type": "integer",
            "format": "int32"
          },
          "pitch_count": {
            "type": "integer",
            "format": "int32"
          },
          "pitch_hand": {
            "$ref": "#/components/schemas/HandednessCode"
          },
          "pitcher_id": {
            "$ref": "#/components/schemas/PersonId"
          },
          "pitcher_team_id": {
            "$ref": "#/components/schemas/TeamId"
          },
          "pitches": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PitchView"
            }
          },
          "rbi": {
            "type": "integer",
            "format": "int32"
          },
          "runners_before": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "PlayByPlay": {
        "type": "object",
        "description": "The full play-by-play read for a contest.",
        "required": [
          "contest",
          "detail",
          "filters",
          "total_plate_appearances",
          "total_pitches",
          "plate_appearances"
        ],
        "properties": {
          "contest": {
            "$ref": "#/components/schemas/MatchSummary"
          },
          "detail": {
            "$ref": "#/components/schemas/Detail"
          },
          "filters": {
            "$ref": "#/components/schemas/PbpFilters"
          },
          "plate_appearances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlateAppearanceView"
            }
          },
          "total_pitches": {
            "type": "integer",
            "minimum": 0
          },
          "total_plate_appearances": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "PlayEventName": {
        "type": "string",
        "description": "Source-reported plate-appearance event label, such as MLB's `Single`."
      },
      "PlayEventType": {
        "type": "string",
        "description": "Source-reported plate-appearance event classification.\n\nSources own this vocabulary (`single`, `field_out`, etc.), so it stays an\nopen transparent token instead of a closed enum."
      },
      "PlayerPropCard": {
        "type": "object",
        "description": "A person-keyed prop card: the resolved person, the requested stat, the\nper-game values projected out of their in-scope appearances, an average, and\n(when a `line` was supplied) the over-rate.",
        "required": [
          "person",
          "stat",
          "game_log",
          "games",
          "average",
          "averages"
        ],
        "properties": {
          "average": {
            "type": "number",
            "format": "double",
            "description": "Mean of `game_log` (`0.0` when empty). Same value as `averages.season`\n— kept for back-compat."
          },
          "averages": {
            "$ref": "#/components/schemas/PropAverages"
          },
          "context": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BoardContext"
              }
            ],
            "nullable": true
          },
          "game_log": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Per-game values for `stat`, in store order (appearances that don't carry\nthe stat are skipped)."
          },
          "games": {
            "type": "integer",
            "description": "Number of games that carried the stat.",
            "minimum": 0
          },
          "hit_rate": {
            "allOf": [
              {
                "$ref": "#/components/schemas/HitRate"
              }
            ],
            "nullable": true
          },
          "hit_rates": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PropHitRates"
              }
            ],
            "nullable": true
          },
          "person": {
            "$ref": "#/components/schemas/Person"
          },
          "stat": {
            "type": "string"
          }
        }
      },
      "PositionCode": {
        "type": "string",
        "description": "Source-reported sport-specific player position code.",
        "examples": [
          "SF"
        ]
      },
      "ProjectionSource": {
        "type": "string",
        "description": "A candidate's source: confirmed lineup slot or active-roster projection.",
        "enum": [
          "lineup",
          "roster"
        ]
      },
      "PropAverages": {
        "type": "object",
        "description": "Windowed means of a stat's per-game values: the full in-scope window\n(`season`), the two trailing windows (`last_5`/`last_10`, most-recent-N\ngames — `game_log` is chronological, so these are its tail), and the\nhome/away split (by whether the person's team was the contest's home or\naway side; a game whose side can't be determined is excluded from both\nsplits, not from `season`). Each mean is `0.0` over an empty window.",
        "required": [
          "season",
          "last_5",
          "last_10",
          "home",
          "away"
        ],
        "properties": {
          "away": {
            "type": "number",
            "format": "double"
          },
          "home": {
            "type": "number",
            "format": "double"
          },
          "last_10": {
            "type": "number",
            "format": "double"
          },
          "last_5": {
            "type": "number",
            "format": "double"
          },
          "season": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "PropHitRates": {
        "type": "object",
        "description": "Windowed [`HitRate`]s against the same `line`, one per [`PropAverages`]\ntrailing window (`season`/`last_5`/`last_10`). Only built when the request\nsupplies a `line`.",
        "required": [
          "season",
          "last_5",
          "last_10"
        ],
        "properties": {
          "last_10": {
            "$ref": "#/components/schemas/HitRate"
          },
          "last_5": {
            "$ref": "#/components/schemas/HitRate"
          },
          "season": {
            "$ref": "#/components/schemas/HitRate"
          }
        }
      },
      "RankingBasis": {
        "type": "string",
        "description": "How a [`ContestKind::Field`] orders its entrants into finishing positions.",
        "enum": [
          "low_score",
          "high_score",
          "fastest_time",
          "finish_order"
        ]
      },
      "ResponseMeta": {
        "type": "object",
        "description": "Metadata block included in every API response envelope.\n\nProvides request tracing (`request_id`), a source identifier (`source`), and\ncache state so clients can decide whether to treat the response as\nauthoritative or refresh.",
        "required": [
          "request_id",
          "fetched_at",
          "cache",
          "version"
        ],
        "properties": {
          "cache": {
            "$ref": "#/components/schemas/CacheStatus"
          },
          "fetched_at": {
            "type": "string",
            "format": "date-time",
            "description": "UTC timestamp at which the response data was fetched or last refreshed.",
            "examples": [
              "2025-10-15T18:30:00Z"
            ]
          },
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier for this request; quote this when filing support tickets."
          },
          "source": {
            "type": [
              "string",
              "null"
            ],
            "description": "Short identifier describing where the data was served from (e.g. `postgres`,\n`registry`). Absent on responses without a meaningful source (e.g. errors).",
            "examples": [
              "postgres"
            ]
          },
          "version": {
            "type": "string",
            "description": "API version string, currently always `\"v1\"`.",
            "examples": [
              "v1"
            ]
          }
        }
      },
      "ResultStatus": {
        "type": "string",
        "description": "The disposition of one entrant's outcome in a contest (spec §4.4). A\nfinishing `position`/`value` is meaningful only against this status —\na `Dnf` has no rank, a `Cut` golfer played but did not advance.",
        "enum": [
          "final",
          "dnf",
          "dns",
          "dsq",
          "cut",
          "withdrew"
        ]
      },
      "ResultValue": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "score"
            ],
            "properties": {
              "score": {
                "type": "integer",
                "format": "int32",
                "description": "An integer score — team points, a tennis match's games/sets tally."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "strokes"
            ],
            "properties": {
              "strokes": {
                "type": "integer",
                "format": "int32",
                "description": "Golf strokes (a raw count; relative-to-par derives from the field)."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "time_seconds"
            ],
            "properties": {
              "time_seconds": {
                "type": "number",
                "format": "double",
                "description": "Elapsed time in seconds, with sub-second precision (track, swimming,\nracing)."
              }
            }
          },
          {
            "type": "object",
            "required": [
              "points"
            ],
            "properties": {
              "points": {
                "type": "integer",
                "format": "int32",
                "description": "Championship / tournament points."
              }
            }
          }
        ],
        "description": "The measured outcome of a [`Result`] (spec §4.4) — deliberately minimal,\ncovering exactly the shapes the sport matrix needs. The variant *is* the unit:\na [`ResultValue::Strokes`] is never confused with [`ResultValue::Points`]."
      },
      "Role": {
        "type": "string",
        "description": "A game-log role filter (spec Task 3): `role=pitcher` restores the legacy\n`pitching-games` capability as an agnostic filter on `GET\n/v1/persons/{per_id}/game-log`, rather than a separate endpoint.",
        "enum": [
          "pitcher"
        ]
      },
      "RosterEntryListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RosterEntryView"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "RosterEntryView": {
        "type": "object",
        "description": "The wire shape of one roster entry. Owns the serialization here (the store's\n[`RosterEntry`] is an internal value type, not a wire type), exposing the\nassembled [`Person`] alongside `source` — `appearance` (played in scope, the\nground truth) or `membership` (named-but-didn't-play overlay), so a reader can\ntell \"played\" from \"named\" (spec §6.3).",
        "required": [
          "person",
          "source"
        ],
        "properties": {
          "person": {
            "$ref": "#/components/schemas/Person"
          },
          "source": {
            "$ref": "#/components/schemas/RosterSource"
          }
        }
      },
      "RosterSource": {
        "type": "string",
        "description": "Which edge produced a [`RosterEntry`]: an [`Appearance`](crate::entities::Appearance)\n(the person actually played — exact) or a [`Membership`](crate::entities::Membership)\n(named on a squad but no appearance in scope — the coarse overlay). The\ndistinction is surfaced so a reader can tell \"played\" from \"named\".",
        "enum": [
          "appearance",
          "membership"
        ]
      },
      "Round": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "numbered"
            ],
            "properties": {
              "numbered": {
                "type": "integer",
                "format": "int32",
                "description": "A numbered round, counting from the first (1 = opening round)."
              }
            }
          },
          {
            "type": "string",
            "enum": [
              "quarter_final"
            ]
          },
          {
            "type": "string",
            "enum": [
              "semi_final"
            ]
          },
          {
            "type": "string",
            "enum": [
              "final"
            ]
          },
          {
            "type": "object",
            "required": [
              "stage"
            ],
            "properties": {
              "stage": {
                "type": "string",
                "description": "A free-form stage label for non-bracket shapes (e.g. `group_a`)."
              }
            }
          }
        ],
        "description": "A bracket round label (spec §4.6). Minimal: numbered early rounds, the named\nlatter rounds, and a free-form [`Stage`](Round::Stage) escape hatch for\nnon-bracket labels (group stage, repechage)."
      },
      "Score": {
        "type": "object",
        "description": "The two-sided score of a `Match` — the team-sport read ergonomic.\nReconstructed from the two per-entrant\n[`Result`](crate::domain::result::Result) values (`home` = slot 0, `away` =\nslot 1).",
        "required": [
          "home",
          "away"
        ],
        "properties": {
          "away": {
            "type": "integer",
            "format": "int32"
          },
          "home": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "SeasonStatsView": {
        "type": "object"
      },
      "SeasonYear": {
        "type": "integer",
        "format": "int32"
      },
      "Seed": {
        "type": "integer",
        "format": "int32"
      },
      "Slot": {
        "type": "integer",
        "format": "int32"
      },
      "SoccerPlayerGameLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "appearances": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fouls_committed": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fouls_suffered": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goal_assists": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goals_conceded": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "minutes": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offsides": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "own_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "red_cards": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "saves": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "shots_faced": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "shots_on_target": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "sub_ins": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "total_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "total_shots": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "yellow_cards": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              }
            }
          }
        ]
      },
      "SoccerPlayerSeasonLine": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "appearances": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fouls_committed": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "fouls_suffered": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goal_assists": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "goals_conceded": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "minutes": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "offsides": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "own_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "red_cards": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "saves": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "shots_faced": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "shots_on_target": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "sub_ins": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "total_goals": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "total_shots": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              },
              "yellow_cards": {
                "type": "integer",
                "format": "int32",
                "minimum": 0
              }
            }
          }
        ]
      },
      "Source": {
        "type": "string",
        "description": "Upstream data provider an external mapping or sighting was learned from.\nThe canonical string is the value stored in\n`external_player_identities.source`, `external_team_identities.source`,\nand `provider_id_mappings.provider`.\n\nDistinct from a competition slug: one provider can serve many\ncompetitions, and one competition can be served by several providers (NBA\nvia ESPN + NBA Stats; MLB via ESPN + MLB Stats). These variants mirror\nthe provider structs in `crate::providers`.",
        "enum": [
          "espn",
          "nba_stats",
          "mlb_stats",
          "kbo"
        ]
      },
      "SportId": {
        "type": "string",
        "description": "The sport categories the API understands. Every league belongs\nto exactly one sport. Sport carries the data shape and capability\nmatrix; league carries identity and provider routing.",
        "enum": [
          "basketball",
          "football",
          "baseball",
          "hockey",
          "soccer",
          "golf",
          "tennis",
          "racing",
          "mma",
          "lacrosse",
          "rugby",
          "volleyball",
          "australian_football",
          "rugby_league",
          "water_polo",
          "field_hockey"
        ]
      },
      "StageSelector": {
        "type": "string",
        "description": "Contest stage filter: `all`, or one of `preseason`/`regular`/`postseason`/`exhibition`/`allstar`. Omitted defaults to regular-season (plus unknown-stage) contests only."
      },
      "StandingsEntry": {
        "type": "object",
        "description": "One `(edition, entrant)` standings record (Workflow-1 task A3). The stored\ntallies are the irreducible additive measures (wins/losses/ties + points\nfor/against); `games_played` and `pct` are **derived** (pure functions of the\ntallies) and computed on read — never stored, mirroring the season\nratio-of-sums. `pct` counts a tie as half a win (`(w + t/2) / games_played`);\na team with no completed games has `games_played = 0` and `pct = 0.0`.\n\nThe record is keyed by its `entrant`; `team` is the backing team when the\nentrant is team-backed and `None` for an individual/pair/animal competitor, so\na non-team entrant appears in the standings rather than being dropped.",
        "required": [
          "entrant",
          "wins",
          "losses",
          "ties",
          "points_for",
          "points_against",
          "games_played",
          "pct"
        ],
        "properties": {
          "entrant": {
            "$ref": "#/components/schemas/EntrantId"
          },
          "games_played": {
            "type": "integer",
            "format": "int32",
            "description": "Derived: `wins + losses + ties`."
          },
          "losses": {
            "type": "integer",
            "format": "int32"
          },
          "pct": {
            "type": "number",
            "format": "double",
            "description": "Derived: `(wins + ties/2) / games_played`; `0.0` when no games played."
          },
          "points_against": {
            "type": "integer",
            "format": "int32"
          },
          "points_for": {
            "type": "integer",
            "format": "int32"
          },
          "team": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Team"
              }
            ],
            "nullable": true
          },
          "ties": {
            "type": "integer",
            "format": "int32"
          },
          "wins": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "StandingsEntryListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StandingsEntry"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "StatBoard": {
        "type": "object",
        "description": "Generic over-rate board for a competition slate.",
        "required": [
          "competition",
          "date",
          "stat",
          "window",
          "line",
          "games_with_lineups",
          "games_without_lineups",
          "recommended",
          "full_slate"
        ],
        "properties": {
          "competition": {
            "$ref": "#/components/schemas/CompetitionId"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "full_slate": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StatBoardEntry"
            }
          },
          "games_with_lineups": {
            "type": "integer",
            "minimum": 0
          },
          "games_without_lineups": {
            "type": "integer",
            "minimum": 0
          },
          "line": {
            "type": "number",
            "format": "double"
          },
          "recommended": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/StatBoardEntry"
            }
          },
          "stat": {
            "type": "string"
          },
          "window": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "StatBoardEntry": {
        "type": "object",
        "description": "One ranked stat-board row.",
        "required": [
          "person",
          "team",
          "opponent",
          "window_rate",
          "season_rate",
          "games_in_window",
          "projection_source"
        ],
        "properties": {
          "context": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BoardContext"
              }
            ],
            "nullable": true
          },
          "games_in_window": {
            "type": "integer",
            "minimum": 0
          },
          "opponent": {
            "$ref": "#/components/schemas/TeamRef"
          },
          "person": {
            "$ref": "#/components/schemas/Person"
          },
          "probable_pitcher": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PitcherRef"
              }
            ],
            "nullable": true
          },
          "projection_source": {
            "$ref": "#/components/schemas/ProjectionSource"
          },
          "season_rate": {
            "type": "number",
            "format": "double"
          },
          "team": {
            "$ref": "#/components/schemas/TeamRef"
          },
          "window_rate": {
            "type": "number",
            "format": "double"
          }
        }
      },
      "Team": {
        "type": "object",
        "description": "A team, scoped to a single [`SportId`] (not a league).\n\nA national side is still just a team; country representation is attached as a\ntyped trait instead of being baked into the base atom. `home_competition` is\na denormalized routing hint (which domestic competition a club plays in);\nit is explicitly **not** part of identity.",
        "required": [
          "id",
          "sport",
          "name"
        ],
        "properties": {
          "home_competition": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CompetitionId"
              }
            ],
            "nullable": true
          },
          "id": {
            "$ref": "#/components/schemas/TeamId"
          },
          "name": {
            "type": "string"
          },
          "sport": {
            "$ref": "#/components/schemas/SportId"
          },
          "traits": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EntityTrait"
            }
          }
        }
      },
      "TeamComparison": {
        "type": "object",
        "description": "A side-by-side comparison of two teams at the same scope.",
        "required": [
          "a",
          "b"
        ],
        "properties": {
          "a": {
            "$ref": "#/components/schemas/TeamSide"
          },
          "b": {
            "$ref": "#/components/schemas/TeamSide"
          }
        }
      },
      "TeamGameLogEntry": {
        "type": "object",
        "description": "One row of a team's game log — a game rendered from *this* team's side: who\nthey played, their own score vs the opponent's, and the win/loss/tie outcome.\n\nThis is a pure projection of the [`MatchSummary`] team-Match view onto the\nteam's perspective — there is no `*_game_logs` table (Workflow-1 task A4). The\nopponent and the team-relative scores are read off the contest's `home`/`away`\nsides depending on which side the team was on; the outcome is derived from\nthose scores.",
        "required": [
          "game",
          "kickoff",
          "opponent",
          "home",
          "status"
        ],
        "properties": {
          "event": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSummary"
              }
            ],
            "nullable": true
          },
          "game": {
            "$ref": "#/components/schemas/ContestId"
          },
          "home": {
            "type": "boolean",
            "description": "`true` when the team was the home side."
          },
          "kickoff": {
            "type": "string",
            "format": "date-time",
            "description": "When the game was played (the chronological key)."
          },
          "opponent": {
            "$ref": "#/components/schemas/TeamId"
          },
          "opponent_score": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "The opponent's score, if the game has a result."
          },
          "outcome": {
            "allOf": [
              {
                "$ref": "#/components/schemas/GameOutcome"
              }
            ],
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/ContestStatus"
          },
          "team_score": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "description": "This team's score, if the game has a result."
          }
        }
      },
      "TeamGameLogListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TeamGameLogEntry"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "TeamId": {
        "type": "string",
        "description": "Minted entity id (`team_<base32>`).",
        "examples": [
          "team_0a1b2c3d4e5f6g7h8i9j0k1l2m"
        ]
      },
      "TeamListResponse": {
        "type": "object",
        "required": [
          "items",
          "total"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Team"
            }
          },
          "page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "per_page": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "TeamRef": {
        "type": "object",
        "description": "The home/away team side of a [`MatchupCard`] — just enough to label the\ncard without a full [`Team`] fetch. `None` when the matchup row carries no\nresolved team for that side yet (`entity.matchups.home_team_id`/\n`away_team_id` are nullable).",
        "required": [
          "team_id",
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "team_id": {
            "$ref": "#/components/schemas/TeamId"
          }
        }
      },
      "TeamSide": {
        "type": "object",
        "description": "One side of a [`TeamComparison`]: the resolved team and its as-of roster.",
        "required": [
          "team",
          "roster"
        ],
        "properties": {
          "roster": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RosterEntryView"
            }
          },
          "team": {
            "$ref": "#/components/schemas/Team"
          }
        }
      },
      "TeamTraitQuery": {
        "type": "string",
        "description": "Team trait filter in `kind:value` form, e.g. `represents_country:ARG`.",
        "examples": [
          "represents_country:ARG"
        ]
      },
      "WeightLbs": {
        "type": "integer",
        "format": "int32"
      }
    },
    "securitySchemes": {
      "api_key": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      }
    }
  },
  "security": [
    {
      "api_key": []
    }
  ],
  "tags": [
    {
      "name": "Persons",
      "description": "Person profile, appearances, game log, team memberships, and materialized season stats. Persons are sport-agnostic and addressed by minted id (`per_…`)."
    },
    {
      "name": "Teams",
      "description": "Team profile, as-of roster (reconstructed from appearance facts), games, game log, and materialized season stats. A national side is just a team with a typed country-representation trait."
    },
    {
      "name": "Competitions",
      "description": "Competitions and their editions, edition participants / games / standings, and per-competition capability discovery. Replaces the old league lens."
    },
    {
      "name": "Contests",
      "description": "Contest detail (the team-Match home/away/score view) and the person-keyed boxscore — one typed per-phase stat line per appearance, with a `finalized` flag."
    },
    {
      "name": "Analysis",
      "description": "Composite analysis reads: a person-keyed player-prop card (per-game values, average, over-rate), a slate stat board, and a side-by-side team comparison. Paid-tier gated."
    },
    {
      "name": "Assets",
      "description": "Static asset proxy for team logo PNGs with long-lived cache headers; suitable for direct embedding in client apps."
    }
  ]
}
```