Skip to contents

Box score of a finished game: one row per team, with the head coach and the team line.

Endpoint: GET https://api.basketball-bundesliga.de/games/{game_id}/stats (DBBL: the same route on https://api-1.dbbl.scb.world).

Usage

scb_game_teams(game_id, league = "dbbl")

Arguments

game_id

(required) Game id (game_id in scb_games), e.g. 2006920 (BBL) or 10130 (DBBL). One sequence per league.

league

(default "dbbl", the women's DBBL) League: bbl (men, easyCredit Basketball Bundesliga, api.basketball-bundesliga.de) or dbbl (women, Toyota Damen-Basketball-Bundesliga, api-1.dbbl.scb.world). The two share one API; game ids overlap, so a game is (league, game_id).

Value

A wehoop_data tibble: Box score of a finished game: one row per team, with the head coach and the team line. An empty valid answer raises wehoop_no_data; the columns are always these, in this order (sdv-py scb_game_teams):

col_nametypedescription
leaguecharacterLeague the row belongs to: bbl (men) or dbbl (women); BBL and DBBL game ids overlap, so a game is (league, game_id).
game_idcharacterGame id, a string. Joins to /games/{gameId}.
seasonintegerSeason END year (2026 = 2025-26), the sdv key; the API's season_id plus one.
sidecharacterhome or guest (the away side), for the team the row belongs to.
team_idcharacterClub id; equal to seasonTeamId in every sample. Joins to /teams/{teamId}.
head_coach_namecharacterName of the team's head coach.
statuscharacterGame status: PRE (scheduled), LIVE, POST (ended, not yet official) or OFFICIAL (final).
scheduled_timecharacterScheduled tip-off, ISO 8601 UTC.
season_team_idcharacterSeason-team id; equal to the club teamId in every sample (BBL 2005-2026, DBBL 2024-2026).
season_idintegerSeason, START year (2026 = 2026-27).
team_namecharacterTeam name as listed that season (sponsor names included, e.g. 'EWE Baskets Oldenburg').
team_tlccharacterThree-letter club code.
competitioncharacterCompetition: BBL, BBL_CUP (Pokal), ALLSTAR, CHAMPIONS_CUP on the BBL host; DBBL, DBBL_CUP on the DBBL host.
stagecharacterStage: MAIN_ROUND (Hauptrunde, regular season), PLAYINS, FIRST_ROUND, SECOND_ROUND, ROUND_OF_16 (Achtelfinale), ROUND_OF_8 (Viertelfinale), SEMI_FINALS, FINALS, THIRD_PLACE_GAME, QUALIFICATION, GROUP_STAGE.
seconds_playedintegerThe team's playing time in SECONDS in the game (players plus the team line) (12000 = 5 x 40 min).
pointsintegerThe team's points in the game (players plus the team line).
two_point_shots_madeintegerThe team's 2-point field goals made in the game (players plus the team line).
two_point_shots_attemptedintegerThe team's 2-point field goals attempted in the game (players plus the team line).
two_point_shot_success_percentdoubleThe team's 2-point field-goal percentage in the game (players plus the team line), 0-100 (one decimal); 0 when no attempts.
three_point_shots_madeintegerThe team's 3-point field goals made in the game (players plus the team line).
three_point_shots_attemptedintegerThe team's 3-point field goals attempted in the game (players plus the team line).
three_point_shot_success_percentdoubleThe team's 3-point field-goal percentage in the game (players plus the team line), 0-100 (one decimal); 0 when no attempts.
field_goals_madeintegerThe team's field goals made in the game (players plus the team line).
field_goals_attemptedintegerThe team's field goals attempted in the game (players plus the team line).
field_goals_success_percentdoubleThe team's field-goal percentage in the game (players plus the team line), 0-100 (one decimal); 0 when no attempts.
free_throws_madeintegerThe team's free throws made in the game (players plus the team line).
free_throws_attemptedintegerThe team's free throws attempted in the game (players plus the team line).
free_throws_success_percentdoubleThe team's free-throw percentage in the game (players plus the team line), 0-100 (one decimal); 0 when no attempts.
offensive_reboundsintegerThe team's offensive rebounds in the game (players plus the team line).
defensive_reboundsintegerThe team's defensive rebounds in the game (players plus the team line).
total_reboundsintegerThe team's rebounds (offensive + defensive) in the game (players plus the team line).
assistsintegerThe team's assists in the game (players plus the team line).
stealsintegerThe team's steals in the game (players plus the team line).
turnoversintegerThe team's turnovers in the game (players plus the team line).
blocksintegerThe team's blocked shots in the game (players plus the team line).
fouls_committedintegerThe team's fouls committed in the game (players plus the team line).
efficiencyintegerThe team's efficiency (EFF = PTS + REB + AST + STL + BLK - missed FG - missed FT - TO; checked on a 2026 box score) in the game (players plus the team line).
plus_minusintegerThe team's point margin in the game.
team_line_seconds_playedintegerTeam-line playing time in SECONDS (not credited to a player).
team_line_pointsintegerTeam-line points (not credited to a player).
team_line_two_point_shots_madeintegerTeam-line 2-point field goals made (not credited to a player).
team_line_two_point_shots_attemptedintegerTeam-line 2-point field goals attempted (not credited to a player).
team_line_two_point_shot_success_percentdoubleTeam-line 2-point field-goal percentage (not credited to a player), 0-100 (one decimal); 0 when no attempts.
team_line_three_point_shots_madeintegerTeam-line 3-point field goals made (not credited to a player).
team_line_three_point_shots_attemptedintegerTeam-line 3-point field goals attempted (not credited to a player).
team_line_three_point_shot_success_percentdoubleTeam-line 3-point field-goal percentage (not credited to a player), 0-100 (one decimal); 0 when no attempts.
team_line_field_goals_madeintegerTeam-line field goals made (not credited to a player).
team_line_field_goals_attemptedintegerTeam-line field goals attempted (not credited to a player).
team_line_field_goals_success_percentdoubleTeam-line field-goal percentage (not credited to a player), 0-100 (one decimal); 0 when no attempts.
team_line_free_throws_madeintegerTeam-line free throws made (not credited to a player).
team_line_free_throws_attemptedintegerTeam-line free throws attempted (not credited to a player).
team_line_free_throws_success_percentdoubleTeam-line free-throw percentage (not credited to a player), 0-100 (one decimal); 0 when no attempts.
team_line_offensive_reboundsintegerTeam-line offensive rebounds (not credited to a player).
team_line_defensive_reboundsintegerTeam-line defensive rebounds (not credited to a player).
team_line_total_reboundsintegerTeam-line rebounds (offensive + defensive) (not credited to a player).
team_line_assistsintegerTeam-line assists (not credited to a player).
team_line_stealsintegerTeam-line steals (not credited to a player).
team_line_turnoversintegerTeam-line turnovers (not credited to a player).
team_line_blocksintegerTeam-line blocked shots (not credited to a player).
team_line_fouls_committedintegerTeam-line fouls committed (not credited to a player).
team_line_efficiencyintegerTeam-line efficiency (EFF = PTS + REB + AST + STL + BLK - missed FG - missed FT - TO; checked on a 2026 box score) (not credited to a player).
team_line_plus_minusintegerTeam-line plus-minus: the team line has no court time, so this is not a margin.
field_goals_recomputedlogicalTrue when the API's field-goal totals disagreed with its 2-point plus 3-point parts (2005-06 box scores) and were recomputed from the parts.

Details

  • Unofficial use of a public source: these wrappers read the front-end API of the German Bundesliga sites (easycredit-bbl.de, toyota-dbbl.de), run by SCB; payloads are not redistributed as release assets.

  • Legal notice: the BBL Impressum forbids storing BBL content (Inhalte) in an information system without BBL's written permission. That is a copyright term, not a robots rule (the API host has no robots.txt). The owner reviewed it and accepted the intake (2026-10-12 ruling); keep requests slow (the runtime waits at least 1 s per host) and raise any published data release with the owner. The DBBL host is the same operator and API; its site notice was not separately reviewed.

  • Both hosts need two headers: a constant x-api-key and an x-api-secret that rotates. The runtime derives the secret on first use from the key embedded in an easycredit-bbl.de page (reversed, : turned into -) and never logs or returns it. The derivation was reverse-engineered from observed requests and responses and has not been checked against the site's own front-end code; if the site changes how it signs requests, every call fails with wehoop_asset_fetch.

  • Id key spaces: seasonId is the START year (2025 = 2025-26), so a wrapper's END-year season is sent as season - 1. Teams are keyed by teamId (seasonTeamId equals it in every sample). seasonPlayerId is per player per season and per club (a player traded mid-season has two); realPlayerId is the person. playerId is ambiguous (the seasonPlayerId in box scores, records and /season-players; the person in /transfers). Game ids are strings.

  • Errors are classed conditions: wehoop_no_data (404, 204, a 400 "not a valid" id, no rows, a box score of a game not yet started), wehoop_bad_request (a bad argument, another 400 / 422) and wehoop_asset_fetch (a refused secret after one re-derive, any other non-2xx, an HTML / non-JSON / error-shaped body, a truncated page, a body for another game, season, club or league, a box score still in play), all inheriting wehoop_error. Wrappers raise; they never return an empty frame.

Examples

# \donttest{
  try(scb_game_teams(game_id = "2006920"))
#> Error in scb_game_teams(game_id = "2006920") : 
#>   www.easycredit-bbl.de/ answered HTTP 503: the API key could not be read.
# }