Skip to contents

Team box score of a finished game: score by period, fouls, timeouts and the team totals.

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

One row per team (tno 1 and 2; the feed has no team id). Percentages are numeric 0-100. ot_score is the points in overtime (NA without overtime).

Usage

genius_team_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.
namecharacterTeam name as the org enters it
name_internationalcharacterTeam name in Latin script
short_namecharacterShort team name (shortName in the feed), in the competition's own script when the org enters one.
codecharacterTeam code, three letters as entered (may be in the local script, e.g. Greek 'AEK' in Greek script)
code_internationalcharacterTeam code in Latin script
coachcharacterHead coach display name
scoreintegerTeam points (current or final); a numeric string in the 2014-15 era sample (WBBL 12248), an integer since
full_scoreintegerTeam points including overtime; equal to score in every sample (a numeric string in the 2014-15 era)
p1_scoreintegerPoints scored in period 1 (a numeric string in the 2014-15 era)
p2_scoreintegerPoints scored in period 2 (a numeric string in the 2014-15 era)
p3_scoreintegerPoints scored in period 3 (a numeric string in the 2014-15 era)
p4_scoreintegerPoints scored in period 4 (a numeric string in the 2014-15 era)
ot_scoreintegerPoints the team scored in overtime; null without overtime. Whether several overtimes are summed is unverified.
foulsintegerTeam fouls in the current (last) period
timeoutsintegerTimeouts counter of the current period (unverified: remaining vs taken); 0 in every sampled (finished) game
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_madeintegerTeam total: field goals made
field_goals_attemptedintegerTeam total: field goals attempted
field_goals_percentagedoubleTeam total: field-goal percentage, 0-100, rounded to an integer by the feed
three_pointers_madeintegerTeam total: three-pointers made
three_pointers_attemptedintegerTeam total: three-pointers attempted
three_pointers_percentagedoubleTeam total: three-point percentage, 0-100, rounded to an integer
two_pointers_madeintegerTeam total: two-pointers made
two_pointers_attemptedintegerTeam total: two-pointers attempted
two_pointers_percentagedoubleTeam total: two-point percentage, 0-100, rounded to an integer
free_throws_madeintegerTeam total: free throws made
free_throws_attemptedintegerTeam total: free throws attempted
free_throws_percentagedoubleTeam total: free-throw percentage, 0-100, rounded to an integer
rebounds_defensiveintegerTeam total: defensive rebounds
rebounds_offensiveintegerTeam total: offensive rebounds
rebounds_totalintegerTeam total: total rebounds
assistsintegerTeam total: assists
turnoversintegerTeam total: turnovers
stealsintegerTeam total: steals
blocksintegerTeam total: blocks made
blocks_receivedintegerTeam total: own shots blocked by an opponent
fouls_personalintegerTeam total: personal fouls committed
fouls_onintegerTeam total: fouls drawn
pointsintegerTeam total: points
points_from_turnoversintegerTeam total: points off turnovers
points_second_chanceintegerTeam total: second-chance points
points_fast_breakintegerTeam total: fast-break points
points_in_the_paintintegerTeam total: points in the paint
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 (team total). Absent in the 2014-15 era sample (WBBL 12248), which carries eff_1..eff_6 on players and no team tot_eff_*
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 (team total). Team tot_eff_2 is 2 in every 2016+ sample (a constant, not a stat). Absent in the 2014-15 era sample (WBBL 12248), which carries eff_1..eff_6 on players and no team tot_eff_*
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 (team total). Absent in the 2014-15 era sample (WBBL 12248), which carries eff_1..eff_6 on players and no team tot_eff_*
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 (team total). Absent in the 2014-15 era sample (WBBL 12248), which carries eff_1..eff_6 on players and no team tot_eff_*
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 (team total). Absent in the 2014-15 era sample (WBBL 12248), which carries eff_1..eff_6 on players and no team tot_eff_*
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 (team total). Absent in the 2014-15 era sample (WBBL 12248), which carries eff_1..eff_6 on players and no team tot_eff_*
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 (team total). Absent in the 2014-15 era sample (WBBL 12248), which carries eff_1..eff_6 on players and no team tot_eff_*
bench_pointsintegerTeam total: points scored by non-starters
biggest_leadintegerTeam total: biggest lead, points
biggest_scoring_runintegerTeam total: biggest unanswered scoring run, points
lead_changesintegerTeam total: lead changes in the game (same value on both teams)
times_scores_levelintegerTeam total: times the score was tied (same value on both teams)
time_leadingdoubleTeam total: minutes the team led, decimal minutes (33.58 = 33 min 35 s)
fouls_teamintegerTeam total: team (bench) fouls
fouls_totalintegerTeam total: all fouls committed (personal + technical + team bench)
rebounds_teamintegerTeam total: team rebounds (credited to no player)
rebounds_team_defensiveintegerTeam total: team defensive rebounds
rebounds_team_offensiveintegerTeam total: team offensive rebounds
turnovers_teamintegerTeam total: team turnovers (credited to no player, e.g. shot clock)

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.

 genius_team_box(match_id = 2902690)