Skip to contents

Team totals of a finished game with the team-credited rebounds, turnovers and fouls.

Endpoint: GET https://miniappapi.tbf.org.tr/webapi-service/api/Match/mac-istatistik

Usage

tbf_team_box(match_id)

Arguments

match_id

Required. TBF game id (integer), e.g. 346279; match_id in tbf_schedule(). One global sequence across leagues and seasons. Only a finished game is served.

Value

A wehoop_data tibble. Two rows: home, then away. Minutes are the players' summed seconds. Every column below is always present (a zero-row tibble keeps them and their types); an answer with nothing in it raises wehoop_no_data, as in sdv-py.

col_nametypedescription
match_idintegerTBF game id (key space: TBF games, ONE global sequence across leagues and seasons: 62552 in 2006-07, 346279 in 2026-27). The match_id argument of every game wrapper; the routes echo it as a string or null, the runtime stamps the integer asked for.
sidecharacterSide of the game the row belongs to: home or away (from the route's isHome flag or home / away block).
team_process_idintegerTeam-season id of the side (from the game header; key space: TBF team registrations).
seconds_playedintegerTime on court in seconds, parsed from the 'mm:ss' or 'hh:mm:ss' text the API sends (team totals sum their players, so 200:00 = 12000).
pointsintegerPoints scored in the game (or season) the row covers.
fg_madeintegerTeam field goals made, 2PT + 3PT.
fg_attemptedintegerTeam field goals attempted, 2PT + 3PT.
fg_pctintegerTeam field-goal percentage 0-100, rounded to an integer by the API.
fg2_madeintegerTeam two-point field goals MADE (the API calls it twoPointShots).
fg2_attemptedintegerTeam two-point field goals attempted.
fg2_pctintegerTeam two-point percentage 0-100, an integer.
fg3_madeintegerTeam three-point field goals MADE (the API calls it threePointShots).
fg3_attemptedintegerTeam three-point field goals attempted.
fg3_pctintegerTeam three-point percentage 0-100, an integer.
ft_madeintegerTeam free throws MADE.
ft_attemptedintegerTeam free throws attempted.
ft_pctintegerTeam free-throw percentage 0-100, an integer.
off_reboundsintegerOffensive rebounds (hucum ribaundu).
def_reboundsintegerDefensive rebounds (savunma ribaundu).
reboundsintegerTotal rebounds (toplam ribaund).
assistsintegerAssists in this game (asist).
stealsintegerSteals in this game (top calma).
blocksintegerShots this player blocked in this game (blok).
turnoversintegerTurnovers committed in this game (top kaybi).
foulsintegerPersonal fouls committed (faul).
fouls_drawnintegerFouls drawn by the team (rivalFoul).
blocks_receivedintegerTeam shots blocked by the opponent.
efficiencyintegerTeam efficiency rating (verimlilik puani): the players' ratings summed; a number on team rows.
team_off_reboundsintegerTeam offensive rebounds not credited to a player (homeTeamStats).
team_def_reboundsintegerTeam defensive rebounds not credited to a player.
team_reboundsintegerTeam rebounds not credited to a player (offensive + defensive).
team_turnoversintegerTeam turnovers not credited to a player.
team_foulsintegerTeam fouls not credited to a player (bench / coach technicals); 0 in the samples.

Details

Official TBF app API, unofficial for SportsDataverse: the backend of the Turkish Basketball Federation's mobile app (miniappapi.tbf.org.tr), which serves BSL, TBL, KBSL and the other TBF leagues. It needs no key; robots.txt answers 404 on the host, and the runtime spaces requests at least 1 s apart. SportsDataverse has not ruled on TBF's terms, so payloads are not redistributed as release assets. The vendor's origin hosts (nikayazilim.com) serve the same data without Cloudflare but are deliberately not used, redirects are never followed, and www.tbf.org.tr's interactive Turnstile is neither used nor automated.

Coverage: season and competition are parameters (bsl Basketbol Super Ligi, back to 1966-67 in the league list; tbl second tier; kbsl women, both from 2015-16). Game wrappers serve FINISHED games only (an unfinished game raises wehoop_asset_fetch). Box scores exist from 2006-07 (no starters flagged that season); play-by-play and shots from 2025-26 only, an earlier finished game raises wehoop_no_data. Every game carries a Genius LiveStats id (genius_id, joins the genius family) from 2018-19 on some seasons and on every game of 2025-26 and later. Birth dates, contact details, photos and logos are dropped. Names and category labels are Turkish; the column descriptions give the English gloss.

Errors: wehoop_no_data when TBF has nothing for the request (HTTP 404, an unknown game or player, a season the league list lacks, an empty list, a finished game before 2025-26 asked for play-by-play or shots); wehoop_bad_request for an invalid argument or HTTP 400 / 422; wehoop_asset_fetch when the fetch failed or the answer is not the one asked for (an unfinished game, a body for another game, season, league or team, an error envelope, a redirect, a partial page or a changed capped list). All inherit wehoop_error. Timestamps are Turkey local time (Europe/Istanbul).

Examples

# \donttest{
  try(tbf_team_box(match_id = 346279))
#> ── TBF Team Box Score ────────────────────────────────────────── wehoop 3.1.0 ──
#> ℹ Data updated: 2026-10-22 03:25:48 UTC
#> # A tibble: 2 × 33
#>   match_id side  team_process_id seconds_played points fg_made fg_attempted
#>      <int> <chr>           <int>          <int>  <int>   <int>        <int>
#> 1   346279 home           265995          12000     90      30           64
#> 2   346279 away           265993          12000     89      29           59
#> # ℹ 26 more variables: fg_pct <int>, fg2_made <int>, fg2_attempted <int>,
#> #   fg2_pct <int>, fg3_made <int>, fg3_attempted <int>, fg3_pct <int>,
#> #   ft_made <int>, ft_attempted <int>, ft_pct <int>, off_rebounds <int>,
#> #   def_rebounds <int>, rebounds <int>, assists <int>, steals <int>,
#> #   blocks <int>, turnovers <int>, fouls <int>, fouls_drawn <int>,
#> #   blocks_received <int>, efficiency <int>, team_off_rebounds <int>,
#> #   team_def_rebounds <int>, team_rebounds <int>, team_turnovers <int>, …
# }