{"openapi":"3.0.3","info":{"title":"ARBS Stats API","version":"1.0.0","description":"Read-only external stats API. Authenticate every request with an API key (`X-API-Key: <key>` or `Authorization: Bearer <key>`). Each key is scoped to a single league; requests for another league return 403. Per-key rate limits are enforced (429 with `Retry-After` and `X-RateLimit-Limit`/`X-RateLimit-Remaining`). Every success response wraps the resource in a `data` field."},"servers":[{"url":"https://api.hoops.ardata.tech/api/v1"}],"components":{"securitySchemes":{"ApiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"},"BearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"Envelope":{"type":"object","properties":{"data":{}},"description":"Generic success envelope. All responses wrap the resource in a `data` field."},"Error":{"type":"object","properties":{"statusCode":{"type":"integer","description":"HTTP status code."},"error":{"type":"string","description":"Short error name, e.g. \"Unauthorized\"."},"message":{"type":"string","description":"Human-readable explanation."},"code":{"type":"string","description":"Stable machine code, e.g. API_KEY_INVALID, FORBIDDEN, RATE_LIMIT_EXCEEDED."}},"description":"Error envelope returned for all non-2xx responses."},"Team":{"type":"object","properties":{"id":{"type":"string","description":"Unique team id."},"leagueId":{"type":"string","description":"League this team belongs to."},"name":{"type":"string","description":"Full team name."},"shortName":{"type":"string","description":"Abbreviated tricode, e.g. \"ARD\"."},"logoUrl":{"type":"string","nullable":true,"description":"Team logo URL, if set."},"bannerUrl":{"type":"string","nullable":true,"description":"Team banner URL, if set."},"primaryColor":{"type":"string","nullable":true,"description":"Primary brand color (hex), if set."},"secondaryColor":{"type":"string","nullable":true,"description":"Secondary brand color (hex), if set."}},"description":"A team in the league."},"Player":{"type":"object","properties":{"id":{"type":"string","description":"Unique player id."},"userId":{"type":"string","nullable":true,"description":"Linked user account id, or null for roster-only players."},"firstName":{"type":"string","description":"First name."},"lastName":{"type":"string","description":"Last name."},"photoUrl":{"type":"string","nullable":true,"description":"Profile photo URL, if uploaded."},"heightCm":{"type":"integer","nullable":true,"description":"Height in centimeters, if recorded."},"weightKg":{"type":"integer","nullable":true,"description":"Weight in kilograms, if recorded."},"approvedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the player was approved into the league."}},"description":"A player profile."},"PlayerRef":{"type":"object","properties":{"id":{"type":"string","description":"Player id."},"firstName":{"type":"string","description":"First name."},"lastName":{"type":"string","description":"Last name."}},"description":"Compact player reference used inside the POTG block."},"Season":{"type":"object","properties":{"id":{"type":"string","description":"Season id."},"leagueId":{"type":"string","description":"League this season belongs to."},"name":{"type":"string","description":"Season name, e.g. \"Demo Season\"."},"startDate":{"type":"string","format":"date-time","description":"Season start date."},"endDate":{"type":"string","format":"date-time","nullable":true,"description":"Season end date."},"status":{"type":"string","description":"Season status: ACTIVE, COMPLETED, or UPCOMING."},"registrationOpen":{"type":"boolean","description":"Whether team/player registration is currently open."}},"description":"A league season."},"Division":{"type":"object","properties":{"id":{"type":"string","description":"Division id."},"seasonId":{"type":"string","description":"Season the division belongs to."},"name":{"type":"string","description":"Division name, e.g. \"East\"."},"sortOrder":{"type":"integer","description":"Display order."}},"description":"A division within a season."},"PeriodScores":{"type":"object","properties":{"home":{"type":"array","items":{"type":"integer"},"description":"Home points per period, in order."},"away":{"type":"array","items":{"type":"integer"},"description":"Away points per period, in order."}},"description":"Per-period point totals for each team."},"Game":{"type":"object","properties":{"id":{"type":"string","description":"Unique game id."},"seasonId":{"type":"string","description":"Season the game belongs to."},"divisionId":{"type":"string","nullable":true,"description":"Division id, if the game is division-scoped."},"homeTeamId":{"type":"string","description":"Home team id."},"awayTeamId":{"type":"string","description":"Away team id."},"playerOfGameId":{"type":"string","nullable":true,"description":"Player of the Game id, once finalized."},"gameNumber":{"type":"integer","nullable":true,"description":"Optional schedule/game number."},"scheduledAt":{"type":"string","format":"date-time","description":"Scheduled tip-off time."},"venue":{"type":"string","nullable":true,"description":"Venue name, if set."},"facebookUrl":{"type":"string","nullable":true,"description":"Facebook stream/post URL, if set."},"instagramUrl":{"type":"string","nullable":true,"description":"Instagram URL, if set."},"youtubeUrl":{"type":"string","nullable":true,"description":"YouTube stream URL, if set."},"periodLengthMinutes":{"type":"integer","description":"Length of each period in minutes."},"timeoutsPerTeam":{"type":"integer","description":"Timeouts allotted per team."},"status":{"type":"string","enum":["SCHEDULED","IN_PROGRESS","COMPLETED"],"description":"Lifecycle status."},"gameType":{"type":"string","description":"Game type, e.g. REGULAR or PLAYOFF."},"homeScore":{"type":"integer","description":"Current/final home score."},"awayScore":{"type":"integer","description":"Current/final away score."},"periodScores":{"$ref":"#/components/schemas/PeriodScores"},"currentPeriod":{"type":"integer","nullable":true,"description":"Current period while live; null when not in progress."},"completedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the game was completed; null until final."},"homeTeam":{"$ref":"#/components/schemas/Team"},"awayTeam":{"$ref":"#/components/schemas/Team"}},"description":"A game with teams, score, status, and period."},"GameDetail":{"allOf":[{"$ref":"#/components/schemas/Game"},{"type":"object","properties":{"season":{"$ref":"#/components/schemas/Season"},"division":{"$ref":"#/components/schemas/Division","nullable":true},"playerOfGame":{"$ref":"#/components/schemas/Player","nullable":true},"scorerAssignments":{"type":"array","items":{"$ref":"#/components/schemas/ScorerAssignment"},"description":"Scorers assigned to this game."},"scorers":{"type":"array","items":{"$ref":"#/components/schemas/ScorerAssignment"},"description":"Alias of scorerAssignments."}}}],"description":"A single game plus its season, division, player-of-game, and scorer assignments."},"ScorerAssignment":{"type":"object","properties":{"id":{"type":"string","description":"Assignment id."},"gameId":{"type":"string","description":"Game id."},"userId":{"type":"string","description":"Assigned scorer user id."},"role":{"type":"string","description":"Scorer role, e.g. PRIMARY or SECONDARY."},"teamId":{"type":"string","nullable":true,"description":"Team the scorer is bound to, if any."},"playerId":{"type":"string","nullable":true,"description":"Player the scorer is bound to, if any."},"statGroup":{"type":"string","description":"Stat group this scorer covers, e.g. SHOT or FLOOR."},"assignedAt":{"type":"string","format":"date-time","description":"When the scorer was assigned."},"user":{"type":"object","properties":{"id":{"type":"string","description":"Scorer user id."},"firstName":{"type":"string","description":"First name."},"lastName":{"type":"string","description":"Last name."},"email":{"type":"string","nullable":true,"description":"Email address."}}}},"description":"A scorer assigned to a game (co-scoring)."},"Standing":{"type":"object","properties":{"id":{"type":"string","description":"Standing row id."},"teamId":{"type":"string","description":"Team id."},"seasonId":{"type":"string","description":"Season id."},"divisionId":{"type":"string","nullable":true,"description":"Division id, if divisional."},"gamesPlayed":{"type":"integer","description":"Games played."},"wins":{"type":"integer","description":"Wins."},"losses":{"type":"integer","description":"Losses."},"winPct":{"type":"number","description":"Win percentage (0–1). Serialized as a decimal string on some endpoints."},"pointsFor":{"type":"integer","description":"Total points scored."},"pointsAgainst":{"type":"integer","description":"Total points allowed."},"pointsDiff":{"type":"integer","description":"Point differential (for − against)."},"homeWins":{"type":"integer","description":"Home wins."},"homeLosses":{"type":"integer","description":"Home losses."},"awayWins":{"type":"integer","description":"Away wins."},"awayLosses":{"type":"integer","description":"Away losses."},"streak":{"type":"integer","description":"Current streak length."},"lastTen":{"type":"string","description":"Record over the last ten games, e.g. \"9-1\"."},"divisionRank":{"type":"integer","nullable":true,"description":"Rank within the division."},"conferenceRank":{"type":"integer","nullable":true,"description":"Rank within the conference."},"team":{"$ref":"#/components/schemas/Team"},"quotient":{"type":"number","description":"Tiebreaker quotient."},"streakDisplay":{"type":"string","description":"Human-readable streak, e.g. \"W1\"."},"lastTenDisplay":{"type":"string","description":"Human-readable last-ten record, e.g. \"9-1\"."}},"description":"A team standings row."},"StandingsData":{"type":"object","properties":{"seasonId":{"type":"string","description":"Season the standings belong to."},"divisionId":{"type":"string","nullable":true,"description":"Division filter, or null for all divisions."},"standings":{"type":"array","items":{"$ref":"#/components/schemas/Standing"}}},"description":"Standings grouped for a season/division."},"LeaderEntry":{"type":"object","properties":{"rank":{"type":"integer","description":"1-based rank within the category."},"player":{"$ref":"#/components/schemas/Player"},"team":{"$ref":"#/components/schemas/Team"},"value":{"type":"number","description":"Ranking value (per-game average, total, or percentage depending on category)."},"total":{"type":"number","description":"Season total for the category."},"gamesPlayed":{"type":"integer","description":"Games played."}},"description":"A single leaderboard entry for a counting/percentage category."},"LeaderAllEntry":{"type":"object","properties":{"rank":{"type":"integer","description":"1-based overall rank."},"player":{"$ref":"#/components/schemas/Player"},"team":{"$ref":"#/components/schemas/Team"},"gamesPlayed":{"type":"integer","description":"Games played."},"totalPoints":{"type":"integer","description":"Total points."},"totalRebounds":{"type":"integer","description":"Total rebounds."},"totalAssists":{"type":"integer","description":"Total assists."},"totalSteals":{"type":"integer","description":"Total steals."},"totalBlocks":{"type":"integer","description":"Total blocks."},"totalFg3Made":{"type":"integer","description":"Total three-pointers made."},"totalFtMade":{"type":"integer","description":"Total free throws made."},"totalFgMade":{"type":"integer","description":"Total field goals made."},"ppg":{"type":"number","description":"Points per game."},"rpg":{"type":"number","description":"Rebounds per game."},"apg":{"type":"number","description":"Assists per game."},"spg":{"type":"number","description":"Steals per game."},"bpg":{"type":"number","description":"Blocks per game."}},"description":"Combined stat line used by the \"all\" leaderboard."},"LeadersData":{"type":"object","properties":{"seasonId":{"type":"string","description":"Season the leaders are computed for."},"points":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Points-per-game leaders."},"rebounds":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Rebounds-per-game leaders."},"assists":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Assists-per-game leaders."},"steals":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Steals-per-game leaders."},"blocks":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Blocks-per-game leaders."},"twoPointers":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Two-pointers made leaders."},"threePointers":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Three-pointers made leaders."},"freeThrowsMade":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Free-throws made leaders."},"fieldGoalsMade":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Field-goals made leaders."},"all":{"type":"array","items":{"$ref":"#/components/schemas/LeaderAllEntry"},"description":"Overall leaders with a full stat line."},"fgPct":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Field-goal percentage leaders."},"fg3Pct":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Three-point percentage leaders."},"ftPct":{"type":"array","items":{"$ref":"#/components/schemas/LeaderEntry"},"description":"Free-throw percentage leaders."}},"description":"Statistical leaders by category."},"StatLine":{"type":"object","properties":{"id":{"type":"string","description":"Stat line id."},"gameId":{"type":"string","description":"Game id."},"playerId":{"type":"string","description":"Player id."},"teamId":{"type":"string","description":"Team id."},"isStarter":{"type":"boolean","description":"Whether the player started."},"minutes":{"type":"integer","description":"Minutes played (0 when minutes are not tracked)."},"points":{"type":"integer","description":"Points."},"fgMade":{"type":"integer","description":"Field goals made."},"fgAttempted":{"type":"integer","description":"Field goals attempted."},"fg3Made":{"type":"integer","description":"Three-pointers made."},"fg3Attempted":{"type":"integer","description":"Three-pointers attempted."},"ftMade":{"type":"integer","description":"Free throws made."},"ftAttempted":{"type":"integer","description":"Free throws attempted."},"offRebounds":{"type":"integer","description":"Offensive rebounds."},"defRebounds":{"type":"integer","description":"Defensive rebounds."},"rebounds":{"type":"integer","description":"Total rebounds."},"assists":{"type":"integer","description":"Assists."},"steals":{"type":"integer","description":"Steals."},"blocks":{"type":"integer","description":"Blocks."},"turnovers":{"type":"integer","description":"Turnovers."},"fouls":{"type":"integer","description":"Personal fouls."},"plusMinus":{"type":"integer","description":"Plus/minus while on court."}},"description":"A single-game per-player stat line."},"BoxScorePlayerLine":{"allOf":[{"$ref":"#/components/schemas/StatLine"},{"type":"object","properties":{"player":{"$ref":"#/components/schemas/Player"}}}],"description":"A box score row: a per-game stat line with the player attached."},"BoxScoreTotals":{"type":"object","properties":{"points":{"type":"integer","description":"Team points."},"fgMade":{"type":"integer","description":"Field goals made."},"fgAttempted":{"type":"integer","description":"Field goals attempted."},"fgPct":{"type":"number","description":"Field-goal percentage (0–1)."},"fg3Made":{"type":"integer","description":"Three-pointers made."},"fg3Attempted":{"type":"integer","description":"Three-pointers attempted."},"fg3Pct":{"type":"number","description":"Three-point percentage (0–1)."},"ftMade":{"type":"integer","description":"Free throws made."},"ftAttempted":{"type":"integer","description":"Free throws attempted."},"ftPct":{"type":"number","description":"Free-throw percentage (0–1)."},"rebounds":{"type":"integer","description":"Total rebounds."},"assists":{"type":"integer","description":"Assists."},"steals":{"type":"integer","description":"Steals."},"blocks":{"type":"integer","description":"Blocks."},"turnovers":{"type":"integer","description":"Turnovers."},"fouls":{"type":"integer","description":"Personal fouls."}},"description":"Team totals for a box score."},"BoxScoreTeam":{"type":"object","properties":{"team":{"$ref":"#/components/schemas/Team"},"players":{"type":"array","items":{"$ref":"#/components/schemas/BoxScorePlayerLine"}},"totals":{"$ref":"#/components/schemas/BoxScoreTotals"}},"description":"One side of a box score: the team, its player lines, and totals."},"PotgLine":{"type":"object","properties":{"points":{"type":"integer","description":"Points."},"rebounds":{"type":"integer","description":"Rebounds."},"assists":{"type":"integer","description":"Assists."},"steals":{"type":"integer","description":"Steals."},"blocks":{"type":"integer","description":"Blocks."}},"description":"The core stat line used to rank Player of the Game."},"PotgEntry":{"type":"object","properties":{"player":{"$ref":"#/components/schemas/PlayerRef"},"teamId":{"type":"string","description":"Team the candidate plays for."},"line":{"$ref":"#/components/schemas/PotgLine"},"gameScore":{"type":"number","description":"Computed game-score used to rank candidates."},"source":{"type":"string","description":"Only on `official`: how the winner was chosen, e.g. \"computed\" or \"manual\"."}},"description":"A Player of the Game candidate."},"Potg":{"type":"object","properties":{"predicted":{"type":"boolean","description":"True while the game is live (provisional winner); false once final."},"home":{"$ref":"#/components/schemas/PotgEntry","nullable":true},"away":{"$ref":"#/components/schemas/PotgEntry","nullable":true},"official":{"$ref":"#/components/schemas/PotgEntry","nullable":true},"winnerId":{"type":"string","nullable":true,"description":"Team id of the Player of the Game winner."}},"description":"Player of the Game block: per-team best performers plus the official pick."},"BoxScoreData":{"type":"object","properties":{"game":{"$ref":"#/components/schemas/Game"},"homeTeam":{"$ref":"#/components/schemas/BoxScoreTeam"},"awayTeam":{"$ref":"#/components/schemas/BoxScoreTeam"},"potg":{"$ref":"#/components/schemas/Potg"}},"description":"Full per-player box score for a game, including the POTG block."},"GameEvent":{"type":"object","properties":{"id":{"type":"string","description":"Event id."},"eventType":{"type":"string","description":"Play type, e.g. FG2_MADE, FG3_MADE, FT_MADE, REBOUND, ASSIST, STEAL, BLOCK, TURNOVER, FOUL."},"period":{"type":"integer","description":"Period the play occurred in."},"gameTime":{"type":"string","description":"Game clock at the play, MM:SS."},"teamId":{"type":"string","nullable":true,"description":"Team involved, if any."},"teamName":{"type":"string","nullable":true,"description":"Team short name, if any."},"playerId":{"type":"string","nullable":true,"description":"Player involved, if any."},"playerName":{"type":"string","nullable":true,"description":"Player full name, if any."},"jerseyNumber":{"type":"integer","nullable":true,"description":"Player jersey number, if known."},"clientTimestamp":{"type":"string","format":"date-time","description":"When the play was recorded by the scorer client."}},"description":"A single play-by-play event."},"EventsData":{"type":"object","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/GameEvent"}},"manual":{"type":"boolean","description":"True if the play-by-play was entered manually rather than derived from stats."}},"description":"Ordered play-by-play log for a game."},"PlayerSeasonStats":{"type":"object","properties":{"id":{"type":"string","description":"Season-stats row id."},"playerId":{"type":"string","description":"Player id."},"seasonId":{"type":"string","description":"Season id."},"teamId":{"type":"string","description":"Team id."},"gamesPlayed":{"type":"integer","description":"Games played."},"gamesStarted":{"type":"integer","description":"Games started."},"totalMinutes":{"type":"integer","description":"Total minutes (0 when minutes are not tracked)."},"totalPoints":{"type":"integer","description":"Total points."},"totalFgMade":{"type":"integer","description":"Total field goals made."},"totalFgAttempted":{"type":"integer","description":"Total field goals attempted."},"totalFg3Made":{"type":"integer","description":"Total three-pointers made."},"totalFg3Attempted":{"type":"integer","description":"Total three-pointers attempted."},"totalFtMade":{"type":"integer","description":"Total free throws made."},"totalFtAttempted":{"type":"integer","description":"Total free throws attempted."},"totalOffReb":{"type":"integer","description":"Total offensive rebounds."},"totalDefReb":{"type":"integer","description":"Total defensive rebounds."},"totalRebounds":{"type":"integer","description":"Total rebounds."},"totalAssists":{"type":"integer","description":"Total assists."},"totalSteals":{"type":"integer","description":"Total steals."},"totalBlocks":{"type":"integer","description":"Total blocks."},"totalTurnovers":{"type":"integer","description":"Total turnovers."},"totalFouls":{"type":"integer","description":"Total fouls."},"ppg":{"type":"string","description":"Points per game (decimal string)."},"rpg":{"type":"string","description":"Rebounds per game (decimal string)."},"apg":{"type":"string","description":"Assists per game (decimal string)."},"spg":{"type":"string","description":"Steals per game (decimal string)."},"bpg":{"type":"string","description":"Blocks per game (decimal string)."},"mpg":{"type":"string","description":"Minutes per game (decimal string)."},"topg":{"type":"string","description":"Turnovers per game (decimal string)."},"fpg":{"type":"string","description":"Fouls per game (decimal string)."},"fgPct":{"type":"string","nullable":true,"description":"Field-goal percentage (0–1 decimal string); null with no attempts."},"fg3Pct":{"type":"string","nullable":true,"description":"Three-point percentage (0–1 decimal string); null with no attempts."},"ftPct":{"type":"string","nullable":true,"description":"Free-throw percentage (0–1 decimal string); null with no attempts."},"highPoints":{"type":"integer","description":"Season-high points."},"highRebounds":{"type":"integer","description":"Season-high rebounds."},"highAssists":{"type":"integer","description":"Season-high assists."},"highSteals":{"type":"integer","description":"Season-high steals."},"highBlocks":{"type":"integer","description":"Season-high blocks."},"doubleDoubles":{"type":"integer","description":"Double-doubles."},"tripleDoubles":{"type":"integer","description":"Triple-doubles."},"player":{"$ref":"#/components/schemas/Player"},"season":{"$ref":"#/components/schemas/Season"},"team":{"$ref":"#/components/schemas/Team"}},"description":"A player’s aggregated stats for one season. `player`, `season`, and `team` are included depending on the endpoint."},"CareerStats":{"type":"object","properties":{"id":{"type":"string","description":"Career-stats row id."},"playerId":{"type":"string","description":"Player id."},"seasonsPlayed":{"type":"integer","description":"Distinct seasons played."},"gamesPlayed":{"type":"integer","description":"Career games played."},"totalMinutes":{"type":"integer","description":"Career minutes (0 when not tracked)."},"totalPoints":{"type":"integer","description":"Career points."},"totalRebounds":{"type":"integer","description":"Career rebounds."},"totalAssists":{"type":"integer","description":"Career assists."},"totalSteals":{"type":"integer","description":"Career steals."},"totalBlocks":{"type":"integer","description":"Career blocks."},"totalTurnovers":{"type":"integer","description":"Career turnovers."},"totalFgMade":{"type":"integer","description":"Career field goals made."},"totalFgAttempted":{"type":"integer","description":"Career field goals attempted."},"totalFg3Made":{"type":"integer","description":"Career three-pointers made."},"totalFg3Attempted":{"type":"integer","description":"Career three-pointers attempted."},"totalFtMade":{"type":"integer","description":"Career free throws made."},"totalFtAttempted":{"type":"integer","description":"Career free throws attempted."},"careerPpg":{"type":"string","description":"Career points per game (decimal string)."},"careerRpg":{"type":"string","description":"Career rebounds per game (decimal string)."},"careerApg":{"type":"string","description":"Career assists per game (decimal string)."},"careerSpg":{"type":"string","description":"Career steals per game (decimal string)."},"careerBpg":{"type":"string","description":"Career blocks per game (decimal string)."},"careerMpg":{"type":"string","description":"Career minutes per game (decimal string)."},"careerFgPct":{"type":"string","nullable":true,"description":"Career field-goal percentage (decimal string)."},"careerFg3Pct":{"type":"string","nullable":true,"description":"Career three-point percentage (decimal string)."},"careerFtPct":{"type":"string","nullable":true,"description":"Career free-throw percentage (decimal string)."},"careerHighPoints":{"type":"integer","description":"Career-high points."},"careerHighRebounds":{"type":"integer","description":"Career-high rebounds."},"careerHighAssists":{"type":"integer","description":"Career-high assists."},"careerHighSteals":{"type":"integer","description":"Career-high steals."},"careerHighBlocks":{"type":"integer","description":"Career-high blocks."},"totalDoubleDoubles":{"type":"integer","description":"Career double-doubles."},"totalTripleDoubles":{"type":"integer","description":"Career triple-doubles."}},"description":"A player’s career totals across all seasons."},"TeamStatsData":{"type":"object","properties":{"teamStats":{"type":"object","properties":{"teamId":{"type":"string","description":"Team id."},"seasonId":{"type":"string","description":"Season id."},"gamesPlayed":{"type":"integer","description":"Team games played."},"standing":{"$ref":"#/components/schemas/Standing"},"playerStats":{"type":"array","items":{"$ref":"#/components/schemas/PlayerSeasonStats"}}}}},"description":"Team season stats: standing plus every rostered player’s season line."},"PlayerStatsData":{"type":"object","properties":{"seasonStats":{"type":"array","items":{"$ref":"#/components/schemas/PlayerSeasonStats"},"description":"One entry per season the player has stats for."},"careerStats":{"$ref":"#/components/schemas/CareerStats","nullable":true}},"description":"A player’s per-season and career stats."},"PlayerGameLogEntry":{"allOf":[{"$ref":"#/components/schemas/StatLine"},{"type":"object","properties":{"game":{"$ref":"#/components/schemas/Game"},"team":{"$ref":"#/components/schemas/Team"}}}],"description":"A per-game stat line with the game and team attached."},"RosterEntry":{"type":"object","properties":{"id":{"type":"string","description":"Roster entry id."},"playerId":{"type":"string","description":"Player id."},"teamId":{"type":"string","description":"Team id."},"seasonId":{"type":"string","description":"Season id."},"jerseyNumber":{"type":"integer","nullable":true,"description":"Jersey number, if assigned."},"position":{"type":"string","nullable":true,"description":"Position, if set."},"isStarter":{"type":"boolean","description":"Whether the player is a designated starter."},"isActive":{"type":"boolean","description":"Whether the roster entry is active."},"joinedAt":{"type":"string","format":"date-time","description":"When the player joined the roster."},"leftAt":{"type":"string","format":"date-time","nullable":true,"description":"When the player left the roster, if applicable."},"player":{"$ref":"#/components/schemas/Player"}},"description":"A player’s roster entry for a team/season."},"PlayerDetailData":{"type":"object","properties":{"player":{"allOf":[{"$ref":"#/components/schemas/Player"},{"type":"object","properties":{"careerStats":{"$ref":"#/components/schemas/CareerStats","nullable":true},"media":{"type":"array","items":{},"description":"Player media items (photos/videos)."},"rosterEntries":{"type":"array","items":{"$ref":"#/components/schemas/RosterEntry"},"description":"Roster history across seasons."}}}]},"team":{"$ref":"#/components/schemas/Team","nullable":true},"seasonStats":{"$ref":"#/components/schemas/PlayerSeasonStats","nullable":true},"careerStats":{"$ref":"#/components/schemas/CareerStats","nullable":true}},"description":"Full player profile with career stats, roster history, and current-season stats."},"Award":{"type":"object","properties":{"id":{"type":"string","description":"Award id."},"seasonId":{"type":"string","description":"Season the award belongs to."},"type":{"type":"string","description":"Award type, e.g. MVP or DPOY."},"playerId":{"type":"string","nullable":true,"description":"Recipient player id, if a player award."},"teamId":{"type":"string","nullable":true,"description":"Recipient team id, if a team award."}},"description":"A published award. The demo league currently returns an empty array."},"ScorebugSide":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","description":"Team name."},"shortName":{"type":"string","description":"Abbreviation, e.g. \"ARD\"."},"logoUrl":{"type":"string","nullable":true,"description":"Team logo URL, if set."},"primaryColor":{"type":"string","nullable":true,"description":"Primary hex color."},"secondaryColor":{"type":"string","nullable":true,"description":"Secondary hex color."},"score":{"type":"integer","description":"Current team score."}},"description":"One side of the scorebug."},"Scorebug":{"type":"object","properties":{"gameId":{"type":"string"},"status":{"type":"string","description":"SCHEDULED | IN_PROGRESS | COMPLETED | POSTPONED | CANCELLED."},"period":{"type":"integer","nullable":true,"description":"Current period (1–4 regulation, 5+ overtime); null before tip-off."},"periodLabel":{"type":"string","nullable":true,"description":"Human label, e.g. \"Q2\" or \"OT1\"."},"clock":{"type":"string","nullable":true,"description":"Remaining time this period as MM:SS; null when there is no clock."},"clockSeconds":{"type":"integer","nullable":true,"description":"Remaining seconds this period."},"clockRunning":{"type":"boolean","description":"True while the game clock is running."},"timerStartedAt":{"type":"string","format":"date-time","nullable":true,"description":"When the running clock last started — tick down from clockSeconds using this for a smooth overlay."},"home":{"$ref":"#/components/schemas/ScorebugSide"},"away":{"$ref":"#/components/schemas/ScorebugSide"},"updatedAt":{"type":"string","format":"date-time","description":"Server time this payload was generated."}},"description":"Lean live payload for broadcast / OBS overlays: score, count-down clock, period, and team identity."}}},"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"paths":{"/leagues/{slug}/standings":{"get":{"summary":"League standings","description":"Standings for the league's active season/division. Pass ?seasonId to select a specific season.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"League slug. Must match the league your API key is scoped to."},{"name":"seasonId","in":"query","required":false,"schema":{"type":"string"},"description":"Select a specific season. Defaults to the active season."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Standings for the league's active season/division. Pass ?seasonId to select a specific season.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/StandingsData"}},"description":"Success envelope — the resource is under `data`."},"example":{"data":{"seasonId":"cmo6ogjym0002tqwod1hii108","divisionId":null,"standings":[{"id":"cmqo74iub006jbq3akjen8dsq","teamId":"cmo6ogka10006tqwo0qy25guy","seasonId":"cmo6ogjym0002tqwod1hii108","divisionId":"cmqo748ub0001bq3aji7zm0cl","gamesPlayed":30,"wins":25,"losses":5,"winPct":0.833,"pointsFor":1040,"pointsAgainst":892,"pointsDiff":148,"homeWins":23,"homeLosses":5,"awayWins":2,"awayLosses":0,"streak":1,"lastTen":"9-1","divisionRank":1,"conferenceRank":1,"team":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"},"quotient":1.166,"streakDisplay":"W1","lastTenDisplay":"9-1"},{"id":"cmqo74ul200ejbq3a6ld7zo81","teamId":"cmo6ogkfr0008tqwo21xm7zjx","seasonId":"cmo6ogjym0002tqwod1hii108","divisionId":"cmqo74l3v0081bq3a79fyyjxd","gamesPlayed":4,"wins":3,"losses":1,"winPct":0.75,"pointsFor":414,"pointsAgainst":360,"pointsDiff":54,"homeWins":1,"homeLosses":1,"awayWins":2,"awayLosses":0,"streak":2,"lastTen":"3-1","divisionRank":1,"conferenceRank":2,"team":{"id":"cmo6ogkfr0008tqwo21xm7zjx","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Caiden Tech","shortName":"CTK","logoUrl":null,"bannerUrl":null,"primaryColor":"#2563EB","secondaryColor":"#1E3A5F"},"quotient":1.15,"streakDisplay":"W2","lastTenDisplay":"3-1"}]}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/leagues/{slug}/schedule":{"get":{"summary":"League schedule","description":"Upcoming and scheduled games (same Game shape as results). Pass ?seasonId to select a season.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"League slug. Must match the league your API key is scoped to."},{"name":"seasonId","in":"query","required":false,"schema":{"type":"string"},"description":"Select a specific season. Defaults to the active season."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Upcoming and scheduled games (same Game shape as results). Pass ?seasonId to select a season.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Game"}}},"description":"Success envelope — the resource is under `data`."},"example":{"data":[{"id":"cmr3x027401bxq4wo2ntycnlf","seasonId":"cmo6ogjym0002tqwod1hii108","divisionId":"cmqo748ub0001bq3aji7zm0cl","homeTeamId":"cmo6ogka10006tqwo0qy25guy","awayTeamId":"cmqo490nd0003m5h5fevtscp2","playerOfGameId":null,"gameNumber":null,"scheduledAt":"2026-07-10T19:00:00.000Z","venue":"Main Gym","facebookUrl":null,"instagramUrl":null,"youtubeUrl":null,"periodLengthMinutes":12,"timeoutsPerTeam":4,"status":"SCHEDULED","gameType":"REGULAR","homeScore":0,"awayScore":0,"periodScores":{"away":[],"home":[]},"currentPeriod":null,"completedAt":null,"homeTeam":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"},"awayTeam":{"id":"cmqo490nd0003m5h5fevtscp2","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Northside Kings","shortName":"NOR","logoUrl":null,"bannerUrl":null,"primaryColor":null,"secondaryColor":null}}]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/leagues/{slug}/results":{"get":{"summary":"League results","description":"Completed games with final scores. Pass ?seasonId to select a season.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"League slug. Must match the league your API key is scoped to."},{"name":"seasonId","in":"query","required":false,"schema":{"type":"string"},"description":"Select a specific season. Defaults to the active season."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Completed games with final scores. Pass ?seasonId to select a season.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Game"}}},"description":"Success envelope — the resource is under `data`."},"example":{"data":[{"id":"cmr3x027401bxq4wo2ntycnlf","seasonId":"cmo6ogjym0002tqwod1hii108","divisionId":"cmqo748ub0001bq3aji7zm0cl","homeTeamId":"cmo6ogka10006tqwo0qy25guy","awayTeamId":"cmqo490nd0003m5h5fevtscp2","playerOfGameId":null,"gameNumber":null,"scheduledAt":"2026-07-02T19:46:01.818Z","venue":"Main Gym","facebookUrl":null,"instagramUrl":null,"youtubeUrl":null,"periodLengthMinutes":12,"timeoutsPerTeam":4,"status":"COMPLETED","gameType":"REGULAR","homeScore":10,"awayScore":7,"periodScores":{"away":[7],"home":[10]},"currentPeriod":null,"completedAt":"2026-07-02T19:46:04.359Z","homeTeam":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"},"awayTeam":{"id":"cmqo490nd0003m5h5fevtscp2","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Northside Kings","shortName":"NOR","logoUrl":null,"bannerUrl":null,"primaryColor":null,"secondaryColor":null}},{"id":"cmr3wd6gs00unq4woz0ico5zn","seasonId":"cmo6ogjym0002tqwod1hii108","divisionId":"cmqo748ub0001bq3aji7zm0cl","homeTeamId":"cmo6ogka10006tqwo0qy25guy","awayTeamId":"cmqo490nd0003m5h5fevtscp2","playerOfGameId":"cmo6ogku1000btqwonf0cufzf","gameNumber":null,"scheduledAt":"2026-07-02T19:28:14.219Z","venue":"Main Gym","facebookUrl":null,"instagramUrl":null,"youtubeUrl":null,"periodLengthMinutes":12,"timeoutsPerTeam":4,"status":"COMPLETED","gameType":"REGULAR","homeScore":73,"awayScore":73,"periodScores":{"away":[73],"home":[73]},"currentPeriod":null,"completedAt":"2026-07-02T19:28:20.781Z","homeTeam":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"},"awayTeam":{"id":"cmqo490nd0003m5h5fevtscp2","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Northside Kings","shortName":"NOR","logoUrl":null,"bannerUrl":null,"primaryColor":null,"secondaryColor":null}}]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/leagues/{slug}/leaders":{"get":{"summary":"Statistical leaders","description":"Per-category stat leaders. Pass ?seasonId to select a season.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"League slug. Must match the league your API key is scoped to."},{"name":"seasonId","in":"query","required":false,"schema":{"type":"string"},"description":"Select a specific season. Defaults to the active season."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Per-category stat leaders. Pass ?seasonId to select a season.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LeadersData"}},"description":"Success envelope — the resource is under `data`."},"example":{"data":{"seasonId":"cmo6ogjym0002tqwod1hii108","points":[{"rank":1,"player":{"id":"cmo6oglbb000gtqwoyct8srf6","userId":null,"firstName":"Kyle","lastName":"Anderson","photoUrl":"https://caiden-basketball-media.fly.storage.tigris.dev/players/cmo6oglbb000gtqwoyct8srf6/profile-1779512262500.jpg","heightCm":null,"weightKg":null,"approvedAt":"2026-04-20T04:11:08.135Z"},"team":{"id":"cmo6ogkfr0008tqwo21xm7zjx","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Caiden Tech","shortName":"CTK","logoUrl":null,"bannerUrl":null,"primaryColor":"#2563EB","secondaryColor":"#1E3A5F"},"value":29.8,"total":119,"gamesPlayed":4},{"rank":2,"player":{"id":"cmqo492t2000rm5h5aidr0alb","userId":null,"firstName":"Derek","lastName":"Ramos","photoUrl":null,"heightCm":null,"weightKg":null,"approvedAt":"2026-06-21T18:24:41.078Z"},"team":{"id":"cmqo490sn0005m5h5auuc5wyh","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Harbor City Hawks","shortName":"HAR","logoUrl":null,"bannerUrl":null,"primaryColor":null,"secondaryColor":null},"value":22.3,"total":67,"gamesPlayed":3}],"all":[{"rank":1,"player":{"id":"cmo6oglbb000gtqwoyct8srf6","userId":null,"firstName":"Kyle","lastName":"Anderson","photoUrl":"https://caiden-basketball-media.fly.storage.tigris.dev/players/cmo6oglbb000gtqwoyct8srf6/profile-1779512262500.jpg","heightCm":null,"weightKg":null,"approvedAt":"2026-04-20T04:11:08.135Z"},"team":{"id":"cmo6ogkfr0008tqwo21xm7zjx","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Caiden Tech","shortName":"CTK","logoUrl":null,"bannerUrl":null,"primaryColor":"#2563EB","secondaryColor":"#1E3A5F"},"gamesPlayed":4,"totalPoints":119,"totalRebounds":16,"totalAssists":19,"totalSteals":1,"totalBlocks":0,"totalFg3Made":11,"totalFtMade":12,"totalFgMade":48,"ppg":29.8,"rpg":4,"apg":4.8,"spg":0.3,"bpg":0}]}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/leagues/{slug}/teams":{"get":{"summary":"League teams","description":"Teams in the league.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"League slug. Must match the league your API key is scoped to."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Teams in the league.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Team"}}},"description":"Success envelope — the resource is under `data`."},"example":{"data":[{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"},{"id":"cmqo490nd0003m5h5fevtscp2","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Northside Kings","shortName":"NOR","logoUrl":null,"bannerUrl":null,"primaryColor":null,"secondaryColor":null}]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/leagues/{slug}/awards":{"get":{"summary":"League awards","description":"Published awards (empty until awards are published).","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"League slug. Must match the league your API key is scoped to."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Published awards (empty until awards are published).","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Award"}}},"description":"Success envelope — the resource is under `data`."},"example":{"data":[]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/leagues/{slug}/bracket":{"get":{"summary":"Playoff bracket","description":"Bracket, when the season is in or after playoffs. Shape depends on the season bracket configuration.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"League slug. Must match the league your API key is scoped to."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Bracket, when the season is in or after playoffs. Shape depends on the season bracket configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/games/live":{"get":{"summary":"Live games","description":"Games currently in progress across your league (same Game shape, status IN_PROGRESS).","parameters":[],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Games currently in progress across your league (same Game shape, status IN_PROGRESS).","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Game"}}},"description":"Success envelope — the resource is under `data`."},"example":{"data":[{"id":"cmr3x027401bxq4wo2ntycnlf","seasonId":"cmo6ogjym0002tqwod1hii108","divisionId":"cmqo748ub0001bq3aji7zm0cl","homeTeamId":"cmo6ogka10006tqwo0qy25guy","awayTeamId":"cmqo490nd0003m5h5fevtscp2","playerOfGameId":null,"gameNumber":null,"scheduledAt":"2026-07-02T19:46:01.818Z","venue":"Main Gym","facebookUrl":null,"instagramUrl":null,"youtubeUrl":null,"periodLengthMinutes":12,"timeoutsPerTeam":4,"status":"IN_PROGRESS","gameType":"REGULAR","homeScore":41,"awayScore":38,"periodScores":{"away":[22,16],"home":[24,17]},"currentPeriod":3,"completedAt":null,"homeTeam":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"},"awayTeam":{"id":"cmqo490nd0003m5h5fevtscp2","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Northside Kings","shortName":"NOR","logoUrl":null,"bannerUrl":null,"primaryColor":null,"secondaryColor":null}}]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/games/{id}":{"get":{"summary":"Game detail","description":"A single game with teams, score, status, period, season, division, and scorer assignments.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Game id (must belong to your league)."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"A single game with teams, score, status, period, season, division, and scorer assignments.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GameDetail"}},"description":"Success envelope — the resource is under `data`."},"example":{"data":{"id":"cmr3x027401bxq4wo2ntycnlf","seasonId":"cmo6ogjym0002tqwod1hii108","divisionId":"cmqo748ub0001bq3aji7zm0cl","homeTeamId":"cmo6ogka10006tqwo0qy25guy","awayTeamId":"cmqo490nd0003m5h5fevtscp2","playerOfGameId":null,"gameNumber":null,"scheduledAt":"2026-07-02T19:46:01.818Z","venue":"Main Gym","facebookUrl":null,"instagramUrl":null,"youtubeUrl":null,"periodLengthMinutes":12,"timeoutsPerTeam":4,"status":"COMPLETED","gameType":"REGULAR","homeScore":10,"awayScore":7,"periodScores":{"away":[7],"home":[10]},"currentPeriod":null,"completedAt":"2026-07-02T19:46:04.359Z","homeTeam":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"},"awayTeam":{"id":"cmqo490nd0003m5h5fevtscp2","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Northside Kings","shortName":"NOR","logoUrl":null,"bannerUrl":null,"primaryColor":null,"secondaryColor":null},"season":{"id":"cmo6ogjym0002tqwod1hii108","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Demo Season","startDate":"2026-04-20T00:00:00.000Z","endDate":"2026-08-30T00:00:00.000Z","status":"ACTIVE","registrationOpen":false},"division":{"id":"cmqo748ub0001bq3aji7zm0cl","seasonId":"cmo6ogjym0002tqwod1hii108","name":"East","sortOrder":0},"playerOfGame":null,"scorers":[{"id":"cmr3x02bf01bzq4wogpnvh2vc","gameId":"cmr3x027401bxq4wo2ntycnlf","userId":"cmqqbotkq0000lgn2v5owphg7","role":"PRIMARY","teamId":null,"playerId":null,"statGroup":"SHOT","assignedAt":"2026-07-02T19:46:02.043Z","user":{"id":"cmqqbotkq0000lgn2v5owphg7","firstName":"Shot","lastName":"Scorer","email":"shot.scorer@arbs.gg"}}]}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/games/{id}/boxscore":{"get":{"summary":"Game box score","description":"Full per-player box score, including the Player of the Game (potg) block. Same shape delivered by webhooks.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Game id."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Full per-player box score, including the Player of the Game (potg) block. Same shape delivered by webhooks.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/BoxScoreData"}},"description":"Success envelope — the resource is under `data`."},"example":{"data":{"game":{"id":"cmr3x027401bxq4wo2ntycnlf","seasonId":"cmo6ogjym0002tqwod1hii108","divisionId":"cmqo748ub0001bq3aji7zm0cl","homeTeamId":"cmo6ogka10006tqwo0qy25guy","awayTeamId":"cmqo490nd0003m5h5fevtscp2","playerOfGameId":null,"gameNumber":null,"scheduledAt":"2026-07-02T19:46:01.818Z","venue":"Main Gym","facebookUrl":null,"instagramUrl":null,"youtubeUrl":null,"periodLengthMinutes":12,"timeoutsPerTeam":4,"status":"COMPLETED","gameType":"REGULAR","homeScore":10,"awayScore":7,"periodScores":{"away":[7],"home":[10]},"currentPeriod":null,"completedAt":"2026-07-02T19:46:04.359Z","homeTeam":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"},"awayTeam":{"id":"cmqo490nd0003m5h5fevtscp2","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Northside Kings","shortName":"NOR","logoUrl":null,"bannerUrl":null,"primaryColor":null,"secondaryColor":null}},"homeTeam":{"team":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"},"players":[{"id":"cmr3x047901e5q4wow9clsfm8","gameId":"cmr3x027401bxq4wo2ntycnlf","playerId":"cmo6ogkzq000ctqwow7kno77m","teamId":"cmo6ogka10006tqwo0qy25guy","isStarter":false,"minutes":0,"points":2,"fgMade":1,"fgAttempted":1,"fg3Made":0,"fg3Attempted":0,"ftMade":0,"ftAttempted":0,"offRebounds":0,"defRebounds":0,"rebounds":0,"assists":0,"steals":0,"blocks":0,"turnovers":0,"fouls":0,"plusMinus":0,"player":{"id":"cmo6ogkzq000ctqwow7kno77m","userId":null,"firstName":"Marcus","lastName":"Santos","photoUrl":null,"heightCm":null,"weightKg":null,"approvedAt":"2026-04-20T04:11:07.718Z"}}],"totals":{"points":10,"fgMade":5,"fgAttempted":5,"fgPct":0,"fg3Made":0,"fg3Attempted":0,"fg3Pct":0,"ftMade":0,"ftAttempted":0,"ftPct":0,"rebounds":0,"assists":0,"steals":0,"blocks":0,"turnovers":0,"fouls":0}},"awayTeam":{"team":{"id":"cmqo490nd0003m5h5fevtscp2","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Northside Kings","shortName":"NOR","logoUrl":null,"bannerUrl":null,"primaryColor":null,"secondaryColor":null},"players":[{"id":"cmr3x047001e3q4wo3nm1vpae","gameId":"cmr3x027401bxq4wo2ntycnlf","playerId":"cmqo491zi000hm5h53ogcb979","teamId":"cmqo490nd0003m5h5fevtscp2","isStarter":false,"minutes":0,"points":7,"fgMade":3,"fgAttempted":3,"fg3Made":1,"fg3Attempted":1,"ftMade":0,"ftAttempted":0,"offRebounds":0,"defRebounds":12,"rebounds":12,"assists":10,"steals":6,"blocks":0,"turnovers":0,"fouls":0,"plusMinus":0,"player":{"id":"cmqo491zi000hm5h53ogcb979","userId":null,"firstName":"Victor","lastName":"Domingo","photoUrl":null,"heightCm":null,"weightKg":null,"approvedAt":"2026-06-21T18:24:40.014Z"}}],"totals":{"points":7,"fgMade":3,"fgAttempted":3,"fgPct":0,"fg3Made":1,"fg3Attempted":1,"fg3Pct":0,"ftMade":0,"ftAttempted":0,"ftPct":0,"rebounds":12,"assists":10,"steals":6,"blocks":0,"turnovers":0,"fouls":0}},"potg":{"predicted":false,"home":{"player":{"id":"cmo6ogkzq000ctqwow7kno77m","firstName":"Marcus","lastName":"Santos"},"teamId":"cmo6ogka10006tqwo0qy25guy","line":{"points":2,"rebounds":0,"assists":0,"steals":0,"blocks":0},"gameScore":2},"away":{"player":{"id":"cmqo491zi000hm5h53ogcb979","firstName":"Victor","lastName":"Domingo"},"teamId":"cmqo490nd0003m5h5fevtscp2","line":{"points":7,"rebounds":12,"assists":10,"steals":6,"blocks":0},"gameScore":35},"official":{"player":{"id":"cmo6ogkzq000ctqwow7kno77m","firstName":"Marcus","lastName":"Santos"},"teamId":"cmo6ogka10006tqwo0qy25guy","line":{"points":2,"rebounds":0,"assists":0,"steals":0,"blocks":0},"gameScore":2,"source":"computed"},"winnerId":"cmo6ogka10006tqwo0qy25guy"}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/games/{id}/events":{"get":{"summary":"Play-by-play","description":"Ordered game events (the play-by-play log).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Game id."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Ordered game events (the play-by-play log).","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EventsData"}},"description":"Success envelope — the resource is under `data`."},"example":{"data":{"events":[{"id":"cmr3x02zi01c3q4wou1wlr70h","eventType":"FG2_MADE","period":1,"gameTime":"05:00","teamId":"cmo6ogka10006tqwo0qy25guy","teamName":"ARD","playerId":"cmo6ogku1000btqwonf0cufzf","playerName":"Alvin Reyes","jerseyNumber":4,"clientTimestamp":"2026-07-02T19:46:02.821Z"},{"id":"cmr3x032t01cfq4wop9wo70dz","eventType":"FG2_MADE","period":1,"gameTime":"05:00","teamId":"cmqo490nd0003m5h5fevtscp2","teamName":"NOR","playerId":"cmqo491zi000hm5h53ogcb979","playerName":"Victor Domingo","jerseyNumber":4,"clientTimestamp":"2026-07-02T19:46:02.821Z"}],"manual":false}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/games/{id}/scorebug":{"get":{"summary":"Live scorebug","description":"Lean, fast live payload for broadcast / OBS overlays — score, count-down clock, period, and team identity. Poll it (~1–2s) or tick client-side from clockSeconds + timerStartedAt while clockRunning. Also available UNKEYED and CORS-open at https://api.hoops.ardata.tech/api/games/{id}/scorebug (with https://api.hoops.ardata.tech/api/games/live to list every live game across all leagues) for browser overlays that need public, cross-league access.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Game id."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Lean, fast live payload for broadcast / OBS overlays — score, count-down clock, period, and team identity. Poll it (~1–2s) or tick client-side from clockSeconds + timerStartedAt while clockRunning. Also available UNKEYED and CORS-open at https://api.hoops.ardata.tech/api/games/{id}/scorebug (with https://api.hoops.ardata.tech/api/games/live to list every live game across all leagues) for browser overlays that need public, cross-league access.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Scorebug"}},"description":"Success envelope — the resource is under `data`."},"example":{"data":{"gameId":"cmr3x027401bxq4wo2ntycnlf","status":"IN_PROGRESS","period":2,"periodLabel":"Q2","clock":"07:34","clockSeconds":454,"clockRunning":true,"timerStartedAt":"2026-07-12T16:20:00.000Z","home":{"id":"cmo6ogka10006tqwo0qy25guy","name":"AR Data","shortName":"ARD","logoUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F","score":10},"away":{"id":"cmqo490nd0003m5h5fevtscp2","name":"Northside Kings","shortName":"NOR","logoUrl":null,"primaryColor":null,"secondaryColor":null,"score":7},"updatedAt":"2026-07-12T16:21:54.000Z"}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/teams/{id}":{"get":{"summary":"Team detail","description":"Team profile.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Team id (must belong to your league)."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Team profile.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Team"}},"description":"Success envelope — the resource is under `data`."},"example":{"data":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/teams/{id}/roster":{"get":{"summary":"Team roster","description":"Active roster entries with player details.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Team id."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Active roster entries with player details.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RosterEntry"}}},"description":"Success envelope — the resource is under `data`."},"example":{"data":[{"id":"cmqo7494s0005bq3aytsvxdav","playerId":"cmo6ogku1000btqwonf0cufzf","teamId":"cmo6ogka10006tqwo0qy25guy","seasonId":"cmo6ogjym0002tqwod1hii108","jerseyNumber":4,"position":null,"isStarter":false,"isActive":true,"joinedAt":"2026-06-21T19:44:54.844Z","leftAt":null,"player":{"id":"cmo6ogku1000btqwonf0cufzf","userId":null,"firstName":"Alvin","lastName":"Reyes","photoUrl":null,"heightCm":null,"weightKg":null,"approvedAt":"2026-04-20T04:11:07.513Z"}},{"id":"cmqo7499y0007bq3avlii12vq","playerId":"cmo6ogkzq000ctqwow7kno77m","teamId":"cmo6ogka10006tqwo0qy25guy","seasonId":"cmo6ogjym0002tqwod1hii108","jerseyNumber":7,"position":null,"isStarter":false,"isActive":true,"joinedAt":"2026-06-21T19:44:55.031Z","leftAt":null,"player":{"id":"cmo6ogkzq000ctqwow7kno77m","userId":null,"firstName":"Marcus","lastName":"Santos","photoUrl":null,"heightCm":null,"weightKg":null,"approvedAt":"2026-04-20T04:11:07.718Z"}}]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/teams/{id}/stats":{"get":{"summary":"Team stats","description":"Team season stats: standing plus each rostered player’s season line.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Team id."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Team season stats: standing plus each rostered player’s season line.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TeamStatsData"}},"description":"Success envelope — the resource is under `data`."},"example":{"data":{"teamStats":{"teamId":"cmo6ogka10006tqwo0qy25guy","seasonId":"cmo6ogjym0002tqwod1hii108","gamesPlayed":30,"standing":{"id":"cmqo74iub006jbq3akjen8dsq","teamId":"cmo6ogka10006tqwo0qy25guy","seasonId":"cmo6ogjym0002tqwod1hii108","divisionId":"cmqo748ub0001bq3aji7zm0cl","gamesPlayed":30,"wins":25,"losses":5,"winPct":"0.833","pointsFor":1040,"pointsAgainst":892,"pointsDiff":148,"homeWins":23,"homeLosses":5,"awayWins":2,"awayLosses":0,"streak":1,"lastTen":"9-1","divisionRank":1,"conferenceRank":1},"playerStats":[{"id":"cmqo74j4r006pbq3a6m8s2kjy","playerId":"cmo6ogku1000btqwonf0cufzf","seasonId":"cmo6ogjym0002tqwod1hii108","teamId":"cmo6ogka10006tqwo0qy25guy","gamesPlayed":29,"gamesStarted":4,"totalMinutes":0,"totalPoints":309,"totalFgMade":125,"totalFgAttempted":183,"totalFg3Made":32,"totalFg3Attempted":48,"totalFtMade":27,"totalFtAttempted":34,"totalOffReb":20,"totalDefReb":58,"totalRebounds":78,"totalAssists":57,"totalSteals":17,"totalBlocks":5,"totalTurnovers":24,"totalFouls":41,"ppg":"10.7","rpg":"2.7","apg":"2","spg":"0.6","bpg":"0.2","mpg":"0","topg":"0.8","fpg":"1.4","fgPct":"0.683","fg3Pct":"0.667","ftPct":"0.794","highPoints":35,"highRebounds":13,"highAssists":7,"highSteals":4,"highBlocks":2,"doubleDoubles":2,"tripleDoubles":0,"player":{"id":"cmo6ogku1000btqwonf0cufzf","userId":null,"firstName":"Alvin","lastName":"Reyes","photoUrl":null,"heightCm":null,"weightKg":null,"approvedAt":"2026-04-20T04:11:07.513Z"}}]}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/players/{id}":{"get":{"summary":"Player detail","description":"Player profile with career stats, roster history, and current-season stats.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Player id (must be rostered in your league)."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Player profile with career stats, roster history, and current-season stats.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PlayerDetailData"}},"description":"Success envelope — the resource is under `data`."},"example":{"data":{"player":{"id":"cmo6ogkzq000ctqwow7kno77m","userId":null,"firstName":"Marcus","lastName":"Santos","photoUrl":null,"heightCm":null,"weightKg":null,"approvedAt":"2026-04-20T04:11:07.718Z","careerStats":{"id":"cmojjp82g0003mngplbjurjh9","playerId":"cmo6ogkzq000ctqwow7kno77m","seasonsPlayed":3,"gamesPlayed":30,"totalMinutes":0,"totalPoints":265,"totalRebounds":77,"totalAssists":57,"totalSteals":15,"totalBlocks":1,"totalTurnovers":26,"totalFgMade":104,"totalFgAttempted":168,"totalFg3Made":29,"totalFg3Attempted":63,"totalFtMade":28,"totalFtAttempted":42,"careerPpg":"8.8","careerRpg":"2.6","careerApg":"1.9","careerSpg":"0.5","careerBpg":"0","careerMpg":"0","careerFgPct":"0.619","careerFg3Pct":"0.46","careerFtPct":"0.667","careerHighPoints":25,"careerHighRebounds":8,"careerHighAssists":6,"careerHighSteals":2,"careerHighBlocks":1,"totalDoubleDoubles":0,"totalTripleDoubles":0},"media":[],"rosterEntries":[{"id":"cmqo7499y0007bq3avlii12vq","playerId":"cmo6ogkzq000ctqwow7kno77m","teamId":"cmo6ogka10006tqwo0qy25guy","seasonId":"cmo6ogjym0002tqwod1hii108","jerseyNumber":7,"position":null,"isStarter":false,"isActive":true,"joinedAt":"2026-06-21T19:44:55.031Z","leftAt":null,"player":{"id":"cmo6ogkzq000ctqwow7kno77m","userId":null,"firstName":"Marcus","lastName":"Santos","photoUrl":null,"heightCm":null,"weightKg":null,"approvedAt":"2026-04-20T04:11:07.718Z"}}]},"team":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"},"seasonStats":{"id":"cmqo74ja0006rbq3anpfxfsoo","playerId":"cmo6ogkzq000ctqwow7kno77m","seasonId":"cmo6ogjym0002tqwod1hii108","teamId":"cmo6ogka10006tqwo0qy25guy","gamesPlayed":24,"gamesStarted":4,"totalMinutes":0,"totalPoints":152,"totalFgMade":59,"totalFgAttempted":97,"totalFg3Made":17,"totalFg3Attempted":38,"totalFtMade":17,"totalFtAttempted":26,"totalOffReb":13,"totalDefReb":31,"totalRebounds":44,"totalAssists":32,"totalSteals":9,"totalBlocks":1,"totalTurnovers":19,"totalFouls":23,"ppg":"6.3","rpg":"1.8","apg":"1.3","spg":"0.4","bpg":"0","mpg":"0","topg":"0.8","fpg":"1","fgPct":"0.608","fg3Pct":"0.447","ftPct":"0.654","highPoints":18,"highRebounds":8,"highAssists":6,"highSteals":2,"highBlocks":1,"doubleDoubles":0,"tripleDoubles":0},"careerStats":{"id":"cmojjp82g0003mngplbjurjh9","playerId":"cmo6ogkzq000ctqwow7kno77m","seasonsPlayed":3,"gamesPlayed":30,"totalMinutes":0,"totalPoints":265,"totalRebounds":77,"totalAssists":57,"totalSteals":15,"totalBlocks":1,"totalTurnovers":26,"totalFgMade":104,"totalFgAttempted":168,"totalFg3Made":29,"totalFg3Attempted":63,"totalFtMade":28,"totalFtAttempted":42,"careerPpg":"8.8","careerRpg":"2.6","careerApg":"1.9","careerSpg":"0.5","careerBpg":"0","careerMpg":"0","careerFgPct":"0.619","careerFg3Pct":"0.46","careerFtPct":"0.667","careerHighPoints":25,"careerHighRebounds":8,"careerHighAssists":6,"careerHighSteals":2,"careerHighBlocks":1,"totalDoubleDoubles":0,"totalTripleDoubles":0}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/players/{id}/stats":{"get":{"summary":"Player stats","description":"Player season and career stats.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Player id."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Player season and career stats.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PlayerStatsData"}},"description":"Success envelope — the resource is under `data`."},"example":{"data":{"seasonStats":[{"id":"cmqo74ja0006rbq3anpfxfsoo","playerId":"cmo6ogkzq000ctqwow7kno77m","seasonId":"cmo6ogjym0002tqwod1hii108","teamId":"cmo6ogka10006tqwo0qy25guy","gamesPlayed":24,"gamesStarted":4,"totalMinutes":0,"totalPoints":152,"totalFgMade":59,"totalFgAttempted":97,"totalFg3Made":17,"totalFg3Attempted":38,"totalFtMade":17,"totalFtAttempted":26,"totalOffReb":13,"totalDefReb":31,"totalRebounds":44,"totalAssists":32,"totalSteals":9,"totalBlocks":1,"totalTurnovers":19,"totalFouls":23,"ppg":"6.3","rpg":"1.8","apg":"1.3","spg":"0.4","bpg":"0","mpg":"0","topg":"0.8","fpg":"1","fgPct":"0.608","fg3Pct":"0.447","ftPct":"0.654","highPoints":18,"highRebounds":8,"highAssists":6,"highSteals":2,"highBlocks":1,"doubleDoubles":0,"tripleDoubles":0,"season":{"id":"cmo6ogjym0002tqwod1hii108","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Demo Season","startDate":"2026-04-20T00:00:00.000Z","endDate":"2026-08-30T00:00:00.000Z","status":"ACTIVE","registrationOpen":false},"team":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"}}],"careerStats":{"id":"cmojjp82g0003mngplbjurjh9","playerId":"cmo6ogkzq000ctqwow7kno77m","seasonsPlayed":3,"gamesPlayed":30,"totalMinutes":0,"totalPoints":265,"totalRebounds":77,"totalAssists":57,"totalSteals":15,"totalBlocks":1,"totalTurnovers":26,"totalFgMade":104,"totalFgAttempted":168,"totalFg3Made":29,"totalFg3Attempted":63,"totalFtMade":28,"totalFtAttempted":42,"careerPpg":"8.8","careerRpg":"2.6","careerApg":"1.9","careerSpg":"0.5","careerBpg":"0","careerMpg":"0","careerFgPct":"0.619","careerFg3Pct":"0.46","careerFtPct":"0.667","careerHighPoints":25,"careerHighRebounds":8,"careerHighAssists":6,"careerHighSteals":2,"careerHighBlocks":1,"totalDoubleDoubles":0,"totalTripleDoubles":0}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/players/{id}/games":{"get":{"summary":"Player game log","description":"Per-game stat lines, each with the game and team attached.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Player id."}],"security":[{"ApiKeyHeader":[]},{"BearerAuth":[]}],"responses":{"200":{"description":"Per-game stat lines, each with the game and team attached.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PlayerGameLogEntry"}}},"description":"Success envelope — the resource is under `data`."},"example":{"data":[{"id":"cmqzgzs7e004d64fg79anzdds","gameId":"cmqzgzrbl003364fgnwxtqa7m","playerId":"cmo6ogkzq000ctqwow7kno77m","teamId":"cmo6ogka10006tqwo0qy25guy","isStarter":false,"minutes":0,"points":2,"fgMade":1,"fgAttempted":1,"fg3Made":0,"fg3Attempted":0,"ftMade":0,"ftAttempted":0,"offRebounds":0,"defRebounds":0,"rebounds":0,"assists":0,"steals":0,"blocks":0,"turnovers":0,"fouls":0,"plusMinus":0,"game":{"id":"cmqzgzrbl003364fgnwxtqa7m","seasonId":"cmo6ogjym0002tqwod1hii108","divisionId":"cmqo748ub0001bq3aji7zm0cl","homeTeamId":"cmo6ogka10006tqwo0qy25guy","awayTeamId":"cmqo490nd0003m5h5fevtscp2","playerOfGameId":null,"gameNumber":null,"scheduledAt":"2026-07-05T12:00:00.000Z","venue":"Main Gym","facebookUrl":null,"instagramUrl":null,"youtubeUrl":null,"periodLengthMinutes":12,"timeoutsPerTeam":4,"status":"COMPLETED","gameType":"REGULAR","homeScore":8,"awayScore":3,"periodScores":{"away":[3],"home":[8]},"currentPeriod":null,"completedAt":"2026-06-29T17:06:50.182Z","homeTeam":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"},"awayTeam":{"id":"cmqo490nd0003m5h5fevtscp2","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"Northside Kings","shortName":"NOR","logoUrl":null,"bannerUrl":null,"primaryColor":null,"secondaryColor":null}},"team":{"id":"cmo6ogka10006tqwo0qy25guy","leagueId":"cmo6ogjsp0000tqwo7m852cgj","name":"AR Data","shortName":"ARD","logoUrl":null,"bannerUrl":null,"primaryColor":"#E85D1A","secondaryColor":"#12120F"}}]}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API key is not scoped to the requested league/resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-key rate limit exceeded. See the Retry-After and X-RateLimit-* headers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}