Skip to contents

Roster rows of every team in a season: player bio, jersey, position and team.

Endpoint: GET https://prod.rosetta.nbl.com.au/get/{org}/players/in/season/{season}

Usage

nbl_rosetta_players(season, org = "wnbl", limit = NULL, offset = NULL)

Arguments

season

(integer required): Season END year (2026 = 2025-26). The runtime maps it to Rosetta's year: the START year for the NBL and WNBL from 1998-99, the calendar year for NBL1 and the NBL / WNBL winter seasons up to 1998. END 1998 and 1999 both read Rosetta year 1998, which holds two seasons; the matches frame keeps the one asked for.

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".

limit

(integer default NULL): Rows to return. Omitted = a page large enough for the whole list (a short page cut by Rosetta's path cache is refused).

offset

(integer default NULL): Rows to skip. Pages can overlap, so prefer one large limit.

Value

A wehoop_data tibble (one row per roster entry):

col_nametypedescription
orgcharacterOrganisation the row belongs to: nbl, wnbl or nbl1. From the row's competition, else from the request.
jersey_numbercharacterJersey number, a STRING.
playing_positioncharacterPlaying position code (G, F, C, PG, SF, FC, ...); null when not recorded.
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_date_updatedcharacterRecord last-edit time, ISO 8601 UTC.
player_first_namecharacterThe player's given name, e.g. Elijah.
player_last_namecharacterThe player's family name, e.g. Pepper.
player_date_of_birthcharacterDate of birth, ISO date.
player_heightdoubleHeight in centimetres.
player_weightdoubleWeight in kilograms.
player_dominant_handcharacterUnobserved in samples (null in every capture); type and meaning unverified.
player_gendercharacterGender (MALE/FEMALE upper case on seasons and players, male/female lower case on competitions and divisions; UNKNOWN seen)
player_nationalitycharacterUnobserved in samples (null in every capture); type and meaning unverified.
player_nationality_codecharacterNationality, ISO 3166-1 alpha-3 code.
player_dominant_footcharacterUnobserved in samples (null in every capture); type and meaning unverified.
player_jersey_numbercharacterJersey number, a STRING.
player_playing_positioncharacterPlaying position code (G, F, C, PG, SF, FC, ...); null when not recorded.
player_activelogicalPlayer record is active.
player_leaguecharacterRosetta league record id, UUID v4.
player_birthplacecharacterUnobserved in samples (null in every capture); type and meaning unverified.
player_rookie_yearcharacterUnobserved in samples (null in every capture); type and meaning unverified.
player_personcharacterUnobserved in samples (null in every capture); type and meaning unverified.
player_latest_jersey_numbercharacterPlayer's most recent jersey number, a STRING.
player_full_namecharacterGiven and family name.
player_source_updated_atcharacterUnobserved in samples (null in every capture); type and meaning unverified.
player_source_providercharacterUnobserved in samples (null in every capture); type and meaning unverified.
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_codecharacterTeam code, e.g. PER (the {team_code} path value)
team_namecharacterName of the team as Rosetta spells it, e.g. Perth Wildcats.
season_competition_divisioncharacterNBL1 divisions (conference x gender); empty for NBL and WNBL.
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.

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_players(org = "nbl", season = 2026))
#> ── NBL Rosetta players from prod.rosetta.nbl.com.au ──────────── wehoop 3.1.0 ──
#> ℹ Data updated: 2026-10-22 02:37:11 UTC
#> # A tibble: 195 × 33
#>    org   jersey_number playing_position player_id              rosetta_player_id
#>    <chr> <chr>         <chr>            <chr>                  <chr>            
#>  1 nbl   22            F                5c7bbb0f-410d-11f0-ab… fc35a1fb-d6b9-40…
#>  2 nbl   30            F                75e19259-410d-11f0-b4… 4afa66cc-d497-43…
#>  3 nbl   13            G                5085c036-410d-11f0-8c… a793b9cb-fb83-45…
#>  4 nbl   21            G                6b8e8e38-410d-11f0-95… 874f02e8-a2f5-4d…
#>  5 nbl   0             G                2fdd43ef-530b-11f0-93… 3ffb3584-1aba-48…
#>  6 nbl   8             G                2bb2e532-410d-11f0-9e… 2e2291aa-36b6-49…
#>  7 nbl   6             G                6aec0708-410d-11f0-83… cf991943-7063-46…
#>  8 nbl   11            G                504369dc-410d-11f0-95… 27ab462f-634a-48…
#>  9 nbl   2             F                506a8485-410d-11f0-8b… 2337cf0e-9ee7-43…
#> 10 nbl   14            F                7862645a-410d-11f0-a8… 8431bed8-a6fe-42…
#> # ℹ 185 more rows
#> # ℹ 28 more variables: player_date_updated <chr>, player_first_name <chr>,
#> #   player_last_name <chr>, player_date_of_birth <chr>, player_height <dbl>,
#> #   player_weight <dbl>, player_dominant_hand <chr>, player_gender <chr>,
#> #   player_nationality <chr>, player_nationality_code <chr>,
#> #   player_dominant_foot <chr>, player_jersey_number <chr>,
#> #   player_playing_position <chr>, player_active <lgl>, player_league <chr>, …
# }