{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/bigballsdata-com/json-schema/bigballsdata-com-nba-box-score-entry-schema.json",
  "title": "NbaBoxScoreEntry",
  "description": "One player's line in an NBA game box score. Counting stats are integers and percentages are decimal strings as stored. `minutes` is WHOLE minutes, rounded; `seconds_played` carries the exact total when the feed supplies seconds and is null when it supplied only a whole minute. Corrected 2026-10-23: `minutes` was declared a string here, but the column is a smallint and the served value has always been a JSON number (verified against production). Rows written before that date read `seconds_played` null and carry a `minutes` value that was truncated rather than rounded, so it can read one minute low until the game is re-ingested.",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_original/bigballsdata-com-api-openapi.json#/components/schemas/NbaBoxScoreEntry",
  "type": "object",
  "properties": {
    "player_id": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid",
      "description": "Null when the upstream player is not yet bridged to a BigBalls player"
    },
    "name": {
      "type": [
        "string",
        "null"
      ]
    },
    "starter": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "Null for games with no pre-tip lineup coverage"
    },
    "minutes": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Whole minutes played, ROUNDED (half up) from the exact value. Agrees with /v1/stored/matches/{id}/stats, which is authoritative for minutes."
    },
    "seconds_played": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Exact total seconds played, as supplied. Null means the feed gave a whole minute and nothing finer, NOT that the player played no seconds; it is never minutes x 60."
    },
    "points": {
      "type": [
        "integer",
        "null"
      ]
    },
    "rebounds": {
      "type": [
        "integer",
        "null"
      ]
    },
    "offensive_rebounds": {
      "type": [
        "integer",
        "null"
      ]
    },
    "defensive_rebounds": {
      "type": [
        "integer",
        "null"
      ]
    },
    "assists": {
      "type": [
        "integer",
        "null"
      ]
    },
    "steals": {
      "type": [
        "integer",
        "null"
      ]
    },
    "blocks": {
      "type": [
        "integer",
        "null"
      ]
    },
    "turnovers": {
      "type": [
        "integer",
        "null"
      ]
    },
    "fouls": {
      "type": [
        "integer",
        "null"
      ]
    },
    "plus_minus": {
      "type": [
        "integer",
        "null"
      ]
    },
    "field_goals_made": {
      "type": [
        "integer",
        "null"
      ]
    },
    "field_goals_attempted": {
      "type": [
        "integer",
        "null"
      ]
    },
    "field_goal_pct": {
      "type": [
        "string",
        "null"
      ]
    },
    "three_pointers_made": {
      "type": [
        "integer",
        "null"
      ]
    },
    "three_pointers_attempted": {
      "type": [
        "integer",
        "null"
      ]
    },
    "three_point_pct": {
      "type": [
        "string",
        "null"
      ]
    },
    "free_throws_made": {
      "type": [
        "integer",
        "null"
      ]
    },
    "free_throws_attempted": {
      "type": [
        "integer",
        "null"
      ]
    },
    "free_throw_pct": {
      "type": [
        "string",
        "null"
      ]
    }
  }
}