Skip to contents

A player's season totals and averages for every season, by period.

Endpoint: GET https://prod.rosetta.nbl.com.au/get/{org}/statistics/for/player/{player_id}

Usage

nbl_rosetta_player_stats(player_id, org = "wnbl")

Arguments

player_id

(character required): Player id: the DataCore person id (player_id of nbl_rosetta_players) or Rosetta's own id; either is accepted.

org

(character default "wnbl", the women's WNBL): Organisation: nbl (men's NBL), wnbl (women's) or nbl1 (the second tier, men's and women's conferences). One of "nbl", "wnbl", "nbl1".

Value

A wehoop_data tibble (one row per season and period):

col_nametypedescription
orgcharacterOrganisation the row belongs to: nbl, wnbl or nbl1. From the row's competition, else from the request.
assists_averagedoubleAssists per game.
blocks_averagedoubleBlocks per game.
field_goals_attemptedintegerField goals attempted, season total.
field_goals_madeintegerField goals made, season total.
field_goals_attempted_averagedoubleField goals attempted per game.
field_goals_made_averagedoubleField goals made per game.
field_goals_percentagedoubleField goals made / attempted, a 0-1 FRACTION.
fouls_averagedoubleFouls committed (personal + technical + others) per game.
free_throws_attemptedintegerFree throws attempted, season total.
free_throws_madeintegerFree throws made, season total.
free_throws_attempted_averagedoubleFree throws attempted per game.
free_throws_made_averagedoubleFree throws made per game.
free_throws_percentagedoubleFree throws made / attempted, a 0-1 FRACTION.
gamesintegerGames played in the season (in the period rows, by the player or team).
games_startedintegerGames in the starting five.
offensive_reboundsintegerOffensive rebounds, season total.
foulsintegerFouls committed (personal + technical + others), season total.
personal_foulsintegerPersonal fouls, season total.
technical_foulsintegerTechnical fouls, season total.
periodintegerPeriod as a STRING: 0 = game or season total, 1-4 = quarters, 11/12/13 = first/second/third overtime (inferred: fewer teams have each)
three_points_attemptedintegerThree-point field goals attempted, season total.
three_points_attempted_averagedoubleThree-point field goals attempted per game.
three_points_madeintegerThree-point field goals made, season total.
three_points_made_averagedoubleThree-point field goals made per game.
three_points_percentagedoubleThree-point field goals made / attempted, a 0-1 FRACTION.
turnovers_averagedoubleTurnovers per game.
turnoversintegerTurnovers, season total.
two_points_attemptedintegerTwo-point field goals attempted, season total.
two_points_attempted_averagedoubleTwo-point field goals attempted per game.
two_points_madeintegerTwo-point field goals made, season total.
two_points_made_averagedoubleTwo-point field goals made per game.
two_points_percentagedoubleTwo-point field goals made / attempted, a 0-1 FRACTION.
minutesdoubleMinutes played, decimal minutes.
minutes_averagedoubleMinutes per game, decimal minutes.
pointsintegerPoints, season total.
reboundsintegerTotal rebounds, season total.
assistsintegerAssists, season total.
blocksintegerBlocks, season total.
stealsintegerSteals, season total.
plus_minusintegerPoint differential while on court, season total.
plus_minus_averagedoublePoint differential while on court per game.
efficiencyintegerEfficiency rating (PTS + REB + AST + STL + BLK - missed FG - missed FT - TOV), season total.
efficiency_averagedoubleEfficiency rating (PTS + REB + AST + STL + BLK - missed FG - missed FT - TOV) per game.
points_averagedoublePoints per game.
rebounds_averagedoubleTotal rebounds per game.
steals_averagedoubleSteals per game.
player_idcharacterDataCore id (UUID v1, Sportradar) of the player; stable across seasons and the id to join on across routes.
rosetta_player_idcharacterRosetta's own id (UUID v4; v5 on NBL1) of the player; routes that take this entity accept it as well as the DataCore id.
player_first_namecharacterThe player's given name, e.g. Elijah.
player_jersey_numbercharacterJersey number, a STRING.
player_last_namecharacterThe player's family name, e.g. Pepper.
player_playing_positioncharacterPlaying position code (G, F, C, PG, SF, FC, ...); null when not recorded.
team_idcharacterDataCore id (UUID v1, Sportradar) of the team; stable across seasons and the id to join on across routes.
rosetta_team_idcharacterRosetta's own id (UUID v4; v5 on NBL1) of the team; routes that take this entity accept it as well as the DataCore id.
team_namecharacterName of the team as Rosetta spells it, e.g. Perth Wildcats.
team_codecharacterTeam code, e.g. PER (the {team_code} path value)
season_idcharacterDataCore id (UUID v1, Sportradar) of the season; stable across seasons and the id to join on across routes.
rosetta_season_idcharacterRosetta's own id (UUID v4; v5 on NBL1) of the season; routes that take this entity accept it as well as the DataCore id.
season_yearintegerRosetta's year of the season: the START year for the NBL and WNBL from 1998-99 (2025 = 2025-26), the calendar year for NBL1 and the 1979-1997 winter seasons. See season_end_year for the sdv key.
season_typecharacterSeason type: regular (includes finals), preseason, in_season (cups, blitz, exhibition), test.
season_competition_divisioncharacterNBL1 divisions (conference x gender); empty for NBL and WNBL.
sc_total_scoreintegerSuperCoach score including double-double / triple-double bonuses.
sc_total_score_without_dd_and_tdintegerSuperCoach score without those bonuses.
sc_breakdown_points_valueintegerThe stat's value for the game or season.
sc_breakdown_points_pointsintegerSuperCoach points this stat earns (e.g. 3 per steal or block, -2 per turnover)
sc_breakdown_rebounds_valueintegerThe stat's value for the game or season.
sc_breakdown_rebounds_pointsintegerSuperCoach points this stat earns (e.g. 3 per steal or block, -2 per turnover)
sc_breakdown_assists_valueintegerThe stat's value for the game or season.
sc_breakdown_assists_pointsintegerSuperCoach points this stat earns (e.g. 3 per steal or block, -2 per turnover)
sc_breakdown_blocks_valueintegerThe stat's value for the game or season.
sc_breakdown_blocks_pointsintegerSuperCoach points this stat earns (e.g. 3 per steal or block, -2 per turnover)
sc_breakdown_steals_valueintegerThe stat's value for the game or season.
sc_breakdown_steals_pointsintegerSuperCoach points this stat earns (e.g. 3 per steal or block, -2 per turnover)
sc_breakdown_turnovers_valueintegerThe stat's value for the game or season.
sc_breakdown_turnovers_pointsintegerSuperCoach points this stat earns (e.g. 3 per steal or block, -2 per turnover)
sc_breakdown_triple_double_valueintegerThe stat's value for the game or season.
sc_breakdown_triple_double_pointsintegerSuperCoach points this stat earns (e.g. 3 per steal or block, -2 per turnover)
sc_double_figure_countintegerStats in double figures (for the double-double / triple-double bonus)
season_end_yearintegersdv season key: the END year of the season (2026 = 2025-26), derived from season_year (a START year for the NBL and WNBL from 1998-99, a calendar year for NBL1 and the 1979-1997 winter seasons; year 1998 is split on the start date). Where the body carries no year it is the season asked for.
sc_breakdown_double_double_valueintegerThe stat's value for the game or season.
sc_breakdown_double_double_pointsintegerSuperCoach points this stat earns (e.g. 3 per steal or block, -2 per turnover)
season_start_datecharacterFirst day of the season, ISO date-time without offset.
player_full_namecharacterGiven and family name.
player_activelogicalPlayer record is active.
player_date_of_birthcharacterDate of birth, ISO date.
player_nationalitycharacterUnobserved in samples (null in every capture); type and meaning unverified.
player_heightdoubleHeight in centimetres.
player_weightdoubleUnobserved in samples (null in every capture); type and meaning unverified.
team_gendercharacterGender (MALE/FEMALE upper case on seasons and players, male/female lower case on competitions and divisions; UNKNOWN seen)
synthetic_from_rosterlogicalRow built from the roster because the player has no season statistics (all stats 0)

Columns the body adds beyond these follow, in body order (sdv-py keeps them too).

Details

  • Unofficial: the JSON proxy behind nbl.com.au (not an API the NBL documents or supports). The terms of use were not reviewed; payloads are not redistributed as release assets.

  • Gated by a referer, not a key: every request carries Origin / Referer set to nbl.com.au (the runtime sends them); without them the host answers 403 MISSING_API_KEY, which is raised as wehoop_asset_fetch.

  • Fills a hole in ESPN: ESPN's nbl feed has box scores but no plays for the 2025-26 NBL season (the stats provider changed from Genius Sports to Sportradar DataCore that year). nbl_rosetta_match_pbp has the full event log with shot x/y for 2025-26 and, in the same shape, back to 2011-12 (WNBL about 2014-15). Matches from 1979 have box scores only.

  • One host serves three organisations; pass org='nbl' (default), 'wnbl' or 'nbl1'. NBL1 is the second tier (men's and women's conferences, calendar-year seasons).

  • Season = the END year (2026 = 2025-26) everywhere. Rosetta's own year is the START year for the NBL and WNBL from 1998-99 and a calendar year for NBL1 and the 1979-1997 winter seasons; the runtime maps it. Year 1998 holds two seasons (calendar 1998 and 1998-99).

  • Ids: <entity>id columns are DataCore ids (UUID v1; join on them), rosetta<entity>_id Rosetta's own. match_id is the DataCore fixture id every match route is keyed on.

  • Unknown ids, orgs and types answer 200 with no rows (wehoop_no_data). Rosetta caches a body per path and serves it whatever the query string, so a page cut by someone else's limit is refused (wehoop_asset_fetch); retry after the cache entry expires.

Errors: wehoop_no_data when Rosetta answers 404 or no rows (an unknown match, team, player or season id, an org or season type with nothing, or no season in progress); wehoop_asset_fetch for the 403 gate body, a stub or error envelope, a page cut by Rosetta's path cache, a body for another org, season or entity than the one asked for, or any other failed fetch; wehoop_bad_request for an unknown org / season_type, a malformed id, or HTTP 400 / 422.

Examples

# \donttest{
  try(nbl_rosetta_player_stats(org = "nbl", player_id = "7619d3ea-410d-11f0-9235-2902fc2f936f"))
#> ── NBL Rosetta player_stats from prod.rosetta.nbl.com.au ─────── wehoop 3.1.0 ──
#> ℹ Data updated: 2026-10-22 02:37:09 UTC
#> # A tibble: 3 × 91
#>   org   assists_average blocks_average field_goals_attempted field_goals_made
#>   <chr>           <dbl>          <dbl>                 <int>            <int>
#> 1 nbl              1.57         0.243                    338              134
#> 2 nbl              3            0                         93               43
#> 3 nbl              1.23         0.0645                   184               77
#> # ℹ 86 more variables: field_goals_attempted_average <dbl>,
#> #   field_goals_made_average <dbl>, field_goals_percentage <dbl>,
#> #   fouls_average <dbl>, free_throws_attempted <int>, free_throws_made <int>,
#> #   free_throws_attempted_average <dbl>, free_throws_made_average <dbl>,
#> #   free_throws_percentage <dbl>, games <int>, games_started <int>,
#> #   offensive_rebounds <int>, fouls <int>, personal_fouls <int>,
#> #   technical_fouls <int>, period <int>, three_points_attempted <int>, …
# }