Skip to contents

Team box score of one FIBA game, with the game-level figures.

Endpoint: GET https://www.fiba.basketball/en/games/{game_id}

Usage

fiba_gamepage_box_teams(game_id, comp, return_parsed = TRUE)

Arguments

game_id

(integer, required) FIBA game id (global): gameId of a gdap schedule row, e.g. 100720 = the World Cup 2023 final.

comp

(integer, required) Required. FIBA competition id (GDAP key space), one per edition: competition.competitionId of any game row (208182 = World Cup 2023, 208722 = Paris 2024 men, 208850 = BCL 2024-25). The game must belong to it. Find it with fiba_gdap_editions or fiba_gdap_games_between.

return_parsed

Parse the payload into a tibble (default TRUE); FALSE returns the raw JSON list (the game-page objects game, playByPlay, gameDetails, playersTeamA, playersTeamB).

Value

A wehoop_data tibble (the raw JSON list when return_parsed = FALSE) with the following columns:

col_nametypedescription
game_idintegerFIBA game id (Int64), global across competitions: gdapGameId, the <gameId> of a game-page URL.
competition_idintegerFIBA competition id (Int64) of the game's edition; the comp argument.
statistic_systemcharacterLive-stats system of the game: OVR (World Cup, Olympics) or FLS (club competitions, most qualifiers); they differ in the play-by-play action ids, order and text.
team_sidecharacterA or B: whether the row is the schedule's team A or team B (null when the page does not say).
organisation_idintegerStable federation or club id (Int64) of the team, the same in every competition (64 = Germany); the page's T_<id> and the play-by-play oId. NOT the per-competition team_id.
scoreintegerTeam final score.
pointsintegerPoints scored in the game.
fg_madeintegerField goals made (2 + 3 points).
fg_attemptedintegerField goals attempted (2 + 3 points).
fg_pctdoubleField-goal percentage, 0-100.
fg2_madeintegerTwo-point field goals made.
fg2_attemptedintegerTwo-point field goals attempted.
fg2_pctdoubleTwo-point field-goal percentage, 0-100.
fg3_madeintegerThree-point field goals made.
fg3_attemptedintegerThree-point field goals attempted.
fg3_pctdoubleThree-point field-goal percentage, 0-100.
ft_madeintegerFree throws made.
ft_attemptedintegerFree throws attempted.
ft_pctdoubleFree-throw percentage, 0-100.
reb_offensiveintegerOffensive rebounds.
reb_defensiveintegerDefensive rebounds.
reb_totalintegerTotal rebounds (a team row includes the team rebounds team_reb_total).
assistsintegerAssists credited in the game.
stealsintegerSteals credited in the game.
blocksintegerBlocked shots (blocks made).
blocks_receivedintegerOwn shots blocked by the opponent (blocks received).
turnoversintegerTurnovers (a team row includes the team turnovers team_turnovers).
foulsintegerPersonal fouls (a team row includes the team fouls team_fouls).
fouls_drawnintegerFouls drawn in the game.
paint_fg_madeintegerField goals made in the paint (team points_in_paint = 2 x paint_fg_made on every sampled game).
paint_fg_attemptedintegerField goals attempted in the paint.
paint_fg_pctdoubleField-goal percentage in the paint, 0-100.
efficiencyintegerEfficiency (FIBA EFF: points + rebounds + assists + steals + blocks - missed field goals - missed free throws - turnovers).
biggest_leadintegerBiggest lead, points.
biggest_lead_scorecharacterScore when the biggest lead was reached, 'A-B' string (spacing varies; empty when the team never led).
biggest_runintegerBiggest scoring run, points.
biggest_run_scorecharacterScore of the biggest scoring run, 'x-y' string; exact meaning unverified.
fast_break_pointsintegerFast-break points.
points_off_turnoversintegerPoints scored after turnovers.
bench_pointsintegerPoints from the bench (the sum of the non-starters' points).
points_in_paintintegerPoints in the paint (2 x paint_fg_made).
second_chance_pointsintegerSecond-chance points.
a_actintegerAlways 0 in the samples; meaning unverified (FIBA stat code A_ACT).
a_foulintegerAlways 0 in the samples; meaning unverified (FIBA stat code A_FOUL).
a_todintegerAlways 0 in the samples; meaning unverified (FIBA stat code A_TOD).
a_totintegerAlways 0 in the samples; meaning unverified (FIBA stat code A_TOT).
team_reb_offensiveintegerTeam offensive rebounds, credited to no player.
team_reb_defensiveintegerTeam defensive rebounds, credited to no player.
team_reb_totalintegerTeam rebounds (total rebounds minus the players' sum).
team_foulsintegerTeam (bench/coach) fouls (personal fouls minus the players' sum).
team_turnoversintegerTeam turnovers (turnovers minus the players' sum).
team_bench_points_flagintegerBench points in FLS games (equal to bench_points); 0 in OVR games (FIBA stat code T_PFB).
time_ledcharacterTime the team led, 'mm:ss' string.
lead_changesintegerLead changes in the game (game-level; repeats on both team rows).
times_tiedintegerTimes the score was tied (game-level; repeats on both team rows).
durationcharacterGame duration as an 'h:mm' string (game-level; repeats on both team rows).
attendanceintegerAttendance (game-level; repeats on both team rows).

Details

FIBA's terms restrict this source. The GDAP developer-portal terms limit API use to 'Authorized Users' (federations, organisers, FIBA partners) and say any broader use 'is not authorised'; the fiba.basketball terms say no portion of the site may be duplicated, redistributed or manipulated. The package owner reviewed both clauses on 2026-10-12, accepted them and approved the full intake, published data releases included. Users who are not themselves authorised by FIBA should check the terms before using the wrappers.

The GDAP subscription key is public (fiba.basketball ships it in every page); the runtime reads it from the live page at run time and never logs it. Officials' contact details and coaches' and officials' dates of birth are dropped from every body.

Id key spaces: competition_id is one per edition (2023 World Cup = 208182) and game_id is global across competitions (the <gameId> of a game-page URL). team_id is per team per competition (Germany is 279569 at the 2023 World Cup and 281545 at Paris 2024), while organisation_id is the stable federation or club (64 = Germany, every year); the game page's T_<id> and the play-by-play oId are organisation ids, not team ids.

The wrapper takes the game id and its competition (comp) and builds the real page URL from GDAP (the competition's marketing name gives the history slug, its schedule gives the two team codes; a competition with an event page is tried at its event URL when the archive URL answers the not-found shell, and the Champions League host last).

Box scores start about 2006; play-by-play with shot x/y about 2012 (OVR events) and 2017-18 (FLS club competitions). A game with no box score raises wehoop_no_data; a game still live raises wehoop_asset_fetch. The page request sends a browser User-Agent (sdv-py answers fiba.basketball's HTTP 403 to plain clients with Chrome TLS; libcurl with a browser User-Agent was served on 2026-10-18). Shot x/y are image pixels with an unverified scale.

Errors are classed conditions (all inherit wehoop_error): wehoop_no_data when FIBA has nothing (HTTP 404, or GDAP answers {} / [] for an unknown id, a game page with no box score, a listed game whose teams are not drawn yet); wehoop_bad_request for HTTP 400 / 422 or a malformed id, season or date; wehoop_asset_fetch for any other failed fetch or an answer that is not about the request (an error envelope, HTTP 401 after a key refresh, HTTP 500, a body for another game, competition, team, player, federation, family or season, a game of another competition than comp, the HTTP 200 not-found shell of a wrong game page, a live game). Seasons are FIBA's own key, which equals the sdv key: the END year for club competitions, the event year for national-team events, the target tournament year for qualifiers.

Examples

# \donttest{
  try(fiba_gamepage_box_teams(game_id = 100720, comp = 208182))
#> ── FIBA gamepage_box_teams from fiba.basketball ──────────────── wehoop 3.1.0 ──
#> ℹ Data updated: 2026-10-22 02:35:32 UTC
#> # A tibble: 2 × 57
#>   game_id competition_id statistic_system team_side organisation_id score points
#>     <int>          <int> <chr>            <chr>               <int> <int>  <int>
#> 1  100720         208182 OVR              A                      64    83     83
#> 2  100720         208182 OVR              B                    8323    77     77
#> # ℹ 50 more variables: fg_made <int>, fg_attempted <int>, fg_pct <dbl>,
#> #   fg2_made <int>, fg2_attempted <int>, fg2_pct <dbl>, fg3_made <int>,
#> #   fg3_attempted <int>, fg3_pct <dbl>, ft_made <int>, ft_attempted <int>,
#> #   ft_pct <dbl>, reb_offensive <int>, reb_defensive <int>, reb_total <int>,
#> #   assists <int>, steals <int>, blocks <int>, blocks_received <int>,
#> #   turnovers <int>, fouls <int>, fouls_drawn <int>, paint_fg_made <int>,
#> #   paint_fg_attempted <int>, paint_fg_pct <dbl>, efficiency <int>, …
# }