Skip to contents

One game's box score: one row per rostered player with the statistics the site configures.

Endpoint: GET https://embed-api.eui.connect.sportradar.com/v1/embed/{website_id}/fixture_detail?sub=statistics

A player who did not play has participated FALSE and NA statistics. LNB has blocks_received and plus_minus but no field-goal totals; LNBP the reverse. minutes is the ISO duration as sent and seconds_played its value. Percentages are 0-100. side is home or away.

Usage

atrium_box_score(website_id, fixture_id, locale = NULL)

Arguments

website_id

(integer required): Site config id: which league site's widget this is (12 LNB France, 14 LNBP Mexico, 3 NBL1 Australia, 13 El Salvador, 22 Panama, 236 Austria, 326 Montenegro). Not a league id: one site serves several competitions.

fixture_id

(character required): Game UUID (fixture_id in atrium_fixtures()), e.g. "0dc631bd-c34c-11f1-8d16-4d5a21afb79d".

locale

(character optional): Locale of the labels, e.g. "en-EN" or "fr-FR". Omitted = the site's own language. Ids and codes never change.

Value

A wehoop_data tibble, one row per (fixture_id, person_id):

col_nametypedescription
website_idintegerSite config id the body came from (12 LNB, 14 LNBP, 3 NBL1, 13 El Salvador, 22 Panama, 236 Austria, 326 Montenegro), read from the body's links.self.
fixture_idcharacterGame UUID (fixture); the key of every game frame and of the fixture_detail routes.
season_idcharacterSeason UUID of the game.
entity_idcharacterTeam UUID the player is rostered with for this game.
sidecharacterSide of the game the row belongs to: home or away (from the fixture's isHome flag).
person_idcharacterPlayer UUID (person), shared across seasons and sites.
person_namecharacterPlayer name as the site prints it (upper case on LNBP and NBL1).
bibcharacterJersey number the player wears, as text.
positioncharacterPosition code on the roster (LNB, e.g. PG); null on LNBP.
starterlogicalTrue when the player started the game.
activelogicalTrue when the player is on the court in a live game.
participatedlogicalTrue when the player entered the game; false rows have null statistics.
did_not_play_reasoncharacterReason the player did not play; null in every body seen.
minutescharacterTime played as an ISO 8601 duration (PT7M23S); a team's is the sum over its players (PT200M) (player, this game).
seconds_playedintegerTime played in whole seconds, parsed from minutes (player, this game).
pointsintegerPoints scored (player, this game).
reboundsintegerTotal rebounds (player, this game).
rebounds_offensiveintegerOffensive rebounds (player, this game).
rebounds_defensiveintegerDefensive rebounds (player, this game).
assistsintegerAssists (player, this game).
stealsintegerSteals (player, this game).
blocksintegerShots blocked (player, this game).
blocks_receivedintegerOwn shots blocked by an opponent (LNB only) (player, this game).
turnoversintegerTurnovers (player, this game).
fouls_totalintegerFouls committed (player, this game).
fouls_drawnintegerFouls drawn (committed against the player or team; LNBP only) (player, this game).
plus_minusintegerPlus/minus, the point differential while on court (LNB only; null in some team lines) (player, this game).
efficiencyintegerEfficiency rating, from the site's own formula (player, this game).
field_goals_madeintegerField goals made, two- and three-pointers together (LNBP only) (player, this game).
field_goals_attemptedintegerField goals attempted (LNBP only) (player, this game).
field_goals_percentagedoubleField-goal percentage, 0-100 (LNBP only) (player, this game).
points_two_madeintegerTwo-point field goals made (player, this game).
points_two_attemptedintegerTwo-point field goals attempted (player, this game).
points_two_percentagedoubleTwo-point percentage, 0-100 (player, this game).
points_three_madeintegerThree-point field goals made (player, this game).
points_three_attemptedintegerThree-point field goals attempted (player, this game).
points_three_percentagedoubleThree-point percentage, 0-100 (player, this game).
free_throws_madeintegerFree throws made (player, this game).
free_throws_attemptedintegerFree throws attempted (player, this game).
free_throws_percentagedoubleFree-throw percentage, 0-100 (player, this game).
points_fast_breakintegerFast-break points (LNBP only) (player, this game).

Details

Unofficial. This is the public endpoint the Sportradar Atrium / Synergy "Connect" widget calls from every visitor's browser (keyless; the host has no robots.txt). The data is Sportradar's and the leagues'. The wrappers read it on the caller's behalf, one request at least 1 s after the last to the host, and it is not republished as release assets. Keep crawls small and incremental.

Sites and seasons. website_id picks the league site; one site carries many competitions. Seasons are END years (season = 2026): the site's own year is the START year on LNB and the calendar year elsewhere, and a year can hold several competitions, so pair season with competition_id (see atrium_seasons()) or pass season_id. atrium_end_year() maps a site's own year to that END year, and atrium_season_id() finds the season UUID.

Columns are configured per site: a statistic one site omits is NA. A key the documented columns do not list is appended with an inferred type. Player and team ids (UUIDs, character) are shared across sites; the player stat tables carry names only, so person_id there is decoded from the widget link beside each name.

Errors (classed conditions, all inheriting wehoop_error): wehoop_no_data when the site has nothing for the request (HTTP 404, no such season, an empty fixture list, a game with no play-by-play yet, or a fixture id the site does not serve: an unknown id or a game of another site, which the API answers alike with an empty fixture); wehoop_bad_request for HTTP 400 / 422 or an argument that cannot be mapped (an ambiguous END year, season with season_id); wehoop_asset_fetch for any other failed fetch, an error / stub body, or a body that belongs to another site, type, season, game, player or team than the one asked for.

Examples

# \donttest{
  try(atrium_box_score(website_id = 14, fixture_id = "0dc631bd-c34c-11f1-8d16-4d5a21afb79d"))
#> ── Atrium box score from embed-api.eui.connect.sportradar.com ── wehoop 3.1.0 ──
#> ℹ Data updated: 2026-10-22 02:33:42 UTC
#> # A tibble: 24 × 41
#>    website_id fixture_id   season_id entity_id side  person_id person_name bib  
#>         <int> <chr>        <chr>     <chr>     <chr> <chr>     <chr>       <chr>
#>  1         14 0dc631bd-c3… cc7d79f3… 6667c530… home  14f9317e… JOSE REYES  5    
#>  2         14 0dc631bd-c3… cc7d79f3… 6667c530… home  2f2d54b0… KAYO GONCA… 33   
#>  3         14 0dc631bd-c3… cc7d79f3… 6667c530… home  6474fd80… DAISHON SM… 1    
#>  4         14 0dc631bd-c3… cc7d79f3… 6667c530… home  680091e4… LUCAS DORIA 7    
#>  5         14 0dc631bd-c3… cc7d79f3… 6667c530… home  7b4ac74b… MARCOS RAM… 99   
#>  6         14 0dc631bd-c3… cc7d79f3… 6667c530… home  8edbc4a7… TAVARIO  M… 0    
#>  7         14 0dc631bd-c3… cc7d79f3… 6667c530… home  9d8134a6… ROMEAO FER… 3    
#>  8         14 0dc631bd-c3… cc7d79f3… 6667c530… home  bff532e1… GABRIEL VA… 23   
#>  9         14 0dc631bd-c3… cc7d79f3… 6667c530… home  ca638b7f… BRYAN RIVE… 18   
#> 10         14 0dc631bd-c3… cc7d79f3… 6667c530… home  cc58457a… ANYELO CIS… 6    
#> # ℹ 14 more rows
#> # ℹ 33 more variables: position <chr>, starter <lgl>, active <lgl>,
#> #   participated <lgl>, did_not_play_reason <chr>, minutes <chr>,
#> #   seconds_played <int>, points <int>, rebounds <int>,
#> #   rebounds_offensive <int>, rebounds_defensive <int>, assists <int>,
#> #   steals <int>, blocks <int>, blocks_received <int>, turnovers <int>,
#> #   fouls_total <int>, fouls_drawn <int>, plus_minus <int>, efficiency <int>, …
# }