Skip to contents

Player box score of a finished game: minutes, shooting, rebounds, assists and the efficiency formulas.

Endpoint: GET https://fibalivestats.dcd.shared.geniussports.com/data/{match_id}/data.json

Rows keyed by (tno, pno), both in-game numbers; pno is not the shirt number and the feed has no global player id (join across games on name, team code and shirt_number). Percentages are numeric 0-100; minutes is the printed mm:ss and seconds_played its seconds.

Usage

genius_player_box(match_id, return_parsed = TRUE)

Arguments

match_id

Genius match id (match_id of genius_schedule(), genius_widget_games() or genius_competition_games()), e.g. 2902690.

return_parsed

Parse into a tibble (default TRUE); FALSE returns the parsed body or page record (a list): data.json as served plus _request (the ids asked for), or the sdv-internal-refs capture shape of a page.

Value

A wehoop_data tibble (a zero-row tibble with these columns when Genius answers an empty valid page), or the raw list when return_parsed = FALSE:

col_nametypedescription
match_idintegerGenius match id of the game. data.json does not carry it: it is the match_id asked for, stamped by the runtime (the global match sequence shared by every Genius customer).
tnointegerTeam number within this game: 1 = the team listed first (home on the hosted schedule and widget), 2 = the other, 0 = no team. In-game only: not a team id.
pnointegerPlayer number within this game, the key of the team's player map; 0 = no player. In-game only: not a person id and not the shirt number.
namecharacterDisplay name ('T. Nichols')
first_namecharacterGiven name in the competition's own script and spelling (Greek, Hebrew, Czech, ... as entered)
family_namecharacterFamily name in the competition's own script
international_first_namecharacterGiven name in Latin script
international_family_namecharacterFamily name in Latin script (often upper case)
scoreboard_namecharacterShort display name ('T. Nichols'), in the local script when the org enters one
shirt_numbercharacterShirt number as a string ('0' and '00' differ)
playing_positioncharacterPlaying position code (PG, SG, SF, PF, C, G, F, ...); empty string when not entered
starterinteger1 when the player started the game, else 0
captaininteger1 for the team captain, else 0; absent in some orgs
activeinteger1 when the player is on court now (at game end: on court at the final whistle), else 0
minutescharacterMinutes as the feed prints them, an 'mm:ss' text (can exceed 59 for a team; '199:60' happens); the text of an integer when the feed sends one.
seconds_playedintegerSeconds played parsed from the printed mm:ss text as minutes * 60 + seconds (so '224:60' gives 13500); null when the feed sent an integer, whose unit is unknown.
field_goals_madeintegerField goals the player made in the game (two- and three-pointers together; a count).
field_goals_attemptedintegerField goals the player attempted in the game (two- and three-pointers together; a count).
field_goals_percentagedoubleField-goal percentage, 0-100, rounded to an integer by the feed
three_pointers_madeintegerThree-pointers made
three_pointers_attemptedintegerThree-pointers attempted
three_pointers_percentagedoubleThree-point percentage, 0-100, rounded to an integer
two_pointers_madeintegerTwo-pointers made
two_pointers_attemptedintegerTwo-pointers attempted
two_pointers_percentagedoubleTwo-point percentage, 0-100, rounded to an integer
free_throws_madeintegerFree throws the player made in the game (a count).
free_throws_attemptedintegerFree throws the player attempted in the game (a count).
free_throws_percentagedoubleFree-throw percentage, 0-100, rounded to an integer
rebounds_defensiveintegerDefensive rebounds
rebounds_offensiveintegerOffensive rebounds
rebounds_totalintegerTotal rebounds (offensive plus defensive) the player collected in the game.
assistsintegerAssists credited to the player in the game.
turnoversintegerTurnovers committed by the player in the game.
stealsintegerSteals credited to the player in the game.
blocksintegerShots the player blocked in the game (blocks made, not received).
blocks_receivedintegerOwn shots blocked by an opponent
fouls_personalintegerPersonal fouls committed
fouls_onintegerFouls drawn: personal fouls committed against the player in the game.
pointsintegerPoints the player scored in the game, free throws included.
points_from_turnoversintegerPoints off turnovers
points_second_chanceintegerSecond-chance points
points_fast_breakintegerFast-break points
points_in_the_paintintegerPoints the player scored in the paint in the game (the feed's sPointsInThePaint).
plus_minus_pointsintegerPlus/minus: team point margin while the player was on court
eff_1integerGenius efficiency formula 1. The feed carries seven formulas (eff_1..eff_7) with no labels; the definitions are not published. In samples eff_1/eff_6/eff_7 often agree (an index-rating style total), eff_3/eff_4 are decimals. Unverified: do not treat any as PIR/EFF without checking against a league site
eff_2integerGenius efficiency formula 2. The feed carries seven formulas (eff_1..eff_7) with no labels; the definitions are not published. In samples eff_1/eff_6/eff_7 often agree (an index-rating style total), eff_3/eff_4 are decimals. Unverified: do not treat any as PIR/EFF without checking against a league site
eff_3doubleGenius efficiency formula 3. The feed carries seven formulas (eff_1..eff_7) with no labels; the definitions are not published. In samples eff_1/eff_6/eff_7 often agree (an index-rating style total), eff_3/eff_4 are decimals. Unverified: do not treat any as PIR/EFF without checking against a league site
eff_4doubleGenius efficiency formula 4. The feed carries seven formulas (eff_1..eff_7) with no labels; the definitions are not published. In samples eff_1/eff_6/eff_7 often agree (an index-rating style total), eff_3/eff_4 are decimals. Unverified: do not treat any as PIR/EFF without checking against a league site
eff_5integerGenius efficiency formula 5. The feed carries seven formulas (eff_1..eff_7) with no labels; the definitions are not published. In samples eff_1/eff_6/eff_7 often agree (an index-rating style total), eff_3/eff_4 are decimals. Unverified: do not treat any as PIR/EFF without checking against a league site
eff_6integerGenius efficiency formula 6. The feed carries seven formulas (eff_1..eff_7) with no labels; the definitions are not published. In samples eff_1/eff_6/eff_7 often agree (an index-rating style total), eff_3/eff_4 are decimals. Unverified: do not treat any as PIR/EFF without checking against a league site
eff_7integerGenius efficiency formula 7. The feed carries seven formulas (eff_1..eff_7) with no labels; the definitions are not published. In samples eff_1/eff_6/eff_7 often agree (an index-rating style total), eff_3/eff_4 are decimals. Unverified: do not treat any as PIR/EFF without checking against a league site. Absent in the 2014-15 era sample (WBBL 12248), which carries eff_1..eff_6 on players and no team tot_eff_*

Details

Access. The Genius hosts publish no robots.txt and no terms. CloudFront refuses datacenter IPs on the LiveStats and hosted hosts: from a server set options(wehoop.proxy = ...) or the GENIUS_PROXY environment variable to an http(s) proxy URL (never printed or logged). Requests are spaced at least one second apart per host; keep crawls slow and incremental. Some league sites (the NZ NBL) forbid AI crawlers in their own robots.txt, which does not cover these hosts. Unofficial use of a public source: payloads are not redistributed as release assets.

Org and season. Every competition is an ORG code plus a competition id (comp_id): genius_competitions() lists an org's competitions with the sdv END-year season (a START-year org lists 2025-26 as season 2026), genius_match_competition() maps a game to its competition, and data.json itself names no date, competition or season. The hosted ORG can differ from the LiveStats ORG of /u/ (NZNBL vs NZN). Match ids are one global sequence across every Genius customer. data.json carries no global team or player id: tno (1 or 2) and pno are in-game numbers; only finished games are read.

Errors (classed conditions, all inheriting wehoop_error): wehoop_no_data when Genius has nothing for the request (HTTP 404, the S3 AccessDenied 403, an empty 200 from the hosted host, an empty recent-games window, a schedule or widget with no matches); wehoop_bad_request for HTTP 400 / 422 or a URL that is not a Genius route (e.g. a non-numeric id); wehoop_asset_fetch when the answer is unknown: the CloudFront "Request blocked" 403, a rate limit or 5xx, the intermittent HTTP 500 "A website error has occurred" page (transient = TRUE: retry later), a dead connection, an error envelope, a cut-off page, an unfinished game, or a body for another match, competition or ORG.

Examples

# \donttest{
  try(genius_player_box(match_id = 2902690))
#> ── Genius LiveStats player box score ─────────────────────────── wehoop 3.1.0 ──
#> ℹ Data updated: 2026-10-22 02:36:16 UTC
#> # A tibble: 24 × 51
#>    match_id   tno   pno name       first_name family_name international_first_…¹
#>       <int> <int> <int> <chr>      <chr>      <chr>       <chr>                 
#>  1  2902690     1    11 Τ. Νικολσ  Τάι        Νικολσ      Ty                    
#>  2  2902690     1    18 Τ. Φιντσ   Τζέιλεν    Φιντσ       Jalen                 
#>  3  2902690     1    12 Ο. Πεϊν    Ομάρ       Πεϊν        Omar                  
#>  4  2902690     1    10 Τ. Ηττουν… Τζον-Μίλτ… Ηττουνασ    John-Milton           
#>  5  2902690     1     2 Γ. Γκιουζ… Γιώργος    Γκιουζέλης  Giorgos               
#>  6  2902690     1    16 Ν. Φραϊντ… Νόα        Φραϊντελ    Noah                  
#>  7  2902690     1     4 Μ. Χατζηδ… Μανόλης    Χατζηδακησ  Manolis               
#>  8  2902690     1     1 Κ. Παπαδα… Κωνσταντί… Παπαδακησ   Konstantinos          
#>  9  2902690     1    15 Γ. Καριουσ Γουίλιαμ   Καριουσ     William Glen          
#> 10  2902690     1    17 Τ. Αντερσ… Τάιταν     Αντερσον    Tytan                 
#> # ℹ 14 more rows
#> # ℹ abbreviated name: ¹​international_first_name
#> # ℹ 44 more variables: international_family_name <chr>, scoreboard_name <chr>,
#> #   shirt_number <chr>, playing_position <chr>, starter <int>, captain <int>,
#> #   active <int>, minutes <chr>, seconds_played <int>, field_goals_made <int>,
#> #   field_goals_attempted <int>, field_goals_percentage <dbl>,
#> #   three_pointers_made <int>, three_pointers_attempted <int>, …
# }