Skip to contents

One match's official player box score, one row per player line (period 0 = whole game).

Endpoint: GET https://prod.rosetta.nbl.com.au/get/match/{match_id}/live/all

Usage

nbl_rosetta_match_player_box(match_id)

Arguments

match_id

(character required): DataCore fixture id of the match (match_id of nbl_rosetta_matches), a UUID, e.g. b217a699-4bef-11f0-bc08-933162362355.

Value

A wehoop_data tibble (one row per player line):

col_nametypedescription
match_idcharacterDataCore fixture id of the match (UUID v1): the {match_id} route key and fixtureId in play-by-play. Join on it.
match_statuscharacterStatus of the match in Rosetta's words (complete for a finished game): box score and play-by-play of any other status are partial.
stat_line_idcharacterProvider record hash of this statistics row (64 hex characters)
rosetta_stat_line_idcharacterRosetta id of this statistics row (UUID v4)
assistsintegerAssists in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
blocksintegerBlocks in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
defensive_reboundsintegerDefensive rebounds in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
efficiencyintegerEfficiency rating (PTS + REB + AST + STL + BLK - missed FG - missed FT - TOV) in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
field_goals_attemptedintegerField goals attempted in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
field_goals_madeintegerField goals made in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
field_goals_percentagedoubleField goals made / attempted, a 0-1 FRACTION.
foulsintegerFouls committed (personal + technical + others) in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
free_throws_attemptedintegerFree throws attempted in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
free_throws_madeintegerFree throws made in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
free_throws_percentagedoubleFree throws made / attempted, a 0-1 FRACTION.
jersey_numbercharacterJersey number, a STRING.
minutesdoubleMinutes played: "MM:SS" string in player_match_statistics, decimal minutes in calculated_player_statistics, player-minutes (integer, 5 x period length) in team rows; "00:00" or 0 where not recorded.
minutes_stringcharacterMinutes played as an ISO 8601 duration (PT30M32S); null on NBL1.
offensive_reboundsintegerOffensive rebounds in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
participatedlogicalPlayer took part in the game.
periodintegerPeriod as a STRING: 0 = game or season total, 1-4 = quarters, 11/12/13 = first/second/third overtime (inferred: fewer teams have each)
period_typecharacterPeriod type: regular (overtime unobserved)
personal_foulsintegerPersonal fouls in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
playing_positioncharacterPlaying position code (G, F, C, PG, SF, FC, ...); null when not recorded.
plus_minusintegerPoint differential while on court in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
pointsintegerPoints in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
reboundsintegerTotal rebounds in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
starterlogicalPlayer started the game.
stealsintegerSteals in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
technical_foulsintegerTechnical fouls in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
three_points_attemptedintegerThree-point field goals attempted in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
three_points_madeintegerThree-point field goals made in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
three_points_percentagedoubleThree-point field goals made / attempted, a 0-1 FRACTION.
turnoversintegerTurnovers in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
two_points_attemptedintegerTwo-point field goals attempted in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
two_points_madeintegerTwo-point field goals made in the match, or in the period on period rows; 0 where the era did not record it (results-only seasons before pbp)
two_points_percentagedoubleTwo-point field goals made / attempted, a 0-1 FRACTION.
rosetta_match_idcharacterRosetta's match RECORD id (UUID v4) as carried by box-score and play-by-play rows; no route accepts it. Join on match_id.
player_idcharacterDataCore id (UUID v1, Sportradar) of the player; stable across seasons and the id to join on across routes.
player_first_namecharacterThe player's given name, e.g. Elijah.
player_last_namecharacterThe player's family name, e.g. Pepper.
player_full_namecharacterGiven and family name.
player_jersey_numbercharacterJersey number, a STRING.
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.
team_codecharacterTeam code, e.g. PER (the {team_code} path value)
team_namecharacterName of the team as Rosetta spells it, e.g. Perth Wildcats.
scintegerNBL SuperCoach fantasy score for the game.

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_match_player_box(match_id = "b217a699-4bef-11f0-bc08-933162362355"))
#> ── NBL Rosetta match_player_box from prod.rosetta.nbl.com.au ─── wehoop 3.1.0 ──
#> ℹ Data updated: 2026-10-22 02:37:04 UTC
#> # A tibble: 24 × 49
#>    match_id        match_status stat_line_id rosetta_stat_line_id assists blocks
#>    <chr>           <chr>        <chr>        <chr>                  <int>  <int>
#>  1 b217a699-4bef-… complete     57f5abff663… b2a062e4-f3b3-4c60-…       1      1
#>  2 b217a699-4bef-… complete     53a507c5776… fa64d272-9870-4190-…       0      0
#>  3 b217a699-4bef-… complete     7c9a19fd0b7… f810edb8-0a31-43e4-…       0      1
#>  4 b217a699-4bef-… complete     123825a424c… f761c24a-e52b-431a-…       3      1
#>  5 b217a699-4bef-… complete     2292fcddf70… f457ee22-71c9-4896-…       0      0
#>  6 b217a699-4bef-… complete     90c8fe3e6d1… f2734872-70a2-420a-…       0      0
#>  7 b217a699-4bef-… complete     84fc18c941e… d154ac3e-cb40-4672-…       4      2
#>  8 b217a699-4bef-… complete     36e6d1629cf… ce20e283-9d82-440e-…       0      0
#>  9 b217a699-4bef-… complete     99256f46270… caf9300d-b16c-4487-…       1      0
#> 10 b217a699-4bef-… complete     7aa7ac5d9cb… c5c40b4d-3708-46eb-…       1      0
#> # ℹ 14 more rows
#> # ℹ 43 more variables: defensive_rebounds <int>, efficiency <int>,
#> #   field_goals_attempted <int>, field_goals_made <int>,
#> #   field_goals_percentage <dbl>, fouls <int>, free_throws_attempted <int>,
#> #   free_throws_made <int>, free_throws_percentage <dbl>, jersey_number <chr>,
#> #   minutes <dbl>, minutes_string <chr>, offensive_rebounds <int>,
#> #   participated <lgl>, period <int>, period_type <chr>, …
# }