Every season of one TBF league (bsl back to 1966-67) with its activity and season ids.
Endpoint: GET https://miniappapi.tbf.org.tr/webapi-service/api/League/get-leagues-and-seasons-by-prefix
Value
A wehoop_data tibble. One row per season of the league, newest first.
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_name | type | description |
| activity_id | integer | Activity id (faaliyet = activity; key space: TBF league-SEASONS, new every season: BSL 2026-27 = 22214, BSL 2025-26 = 20728, TBL 2026-27 = 22215, KBSL 2026-27 = 22209). Cast to an integer from the 22214 / 22214.0 the API sends. |
| activity_name | character | League-season name as TBF prints it ('BSL 2026-2027'; the top flight reads 'TBL 2006-2007' until 2007-08). |
| url | character | League-season slug, '<prefix>-<YYYY>-<YYYY>' (bsl-2026-2027). |
| season_id | integer | Internal TBF season id (key space: TBF seasons, global across leagues: 174 = 2026-2027, 172 = 2025-2026; the odd ids are international UA- seasons). Never an sdv key: use season (END year). |
| season_label | character | Season label as TBF writes it, 'YYYY-YYYY' (start and end year). |
| season | integer | Season END year (2027 = the 2026-2027 season), read from the 'YYYY-YYYY' label or the request; the sdv season key. Not the internal TBF season id (season_id). |
| competition | character | TBF league the row belongs to: bsl, tbl or kbsl (the request's competition, or the league prefix the API reports). |
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).
See also
Other TBF Functions:
tbf_daily_matches(),
tbf_game_header(),
tbf_game_leaders(),
tbf_game_players(),
tbf_highlights(),
tbf_leaders_assists(),
tbf_leaders_blocks(),
tbf_leaders_efficiency(),
tbf_leaders_minutes(),
tbf_leaders_points(),
tbf_leaders_rebounds(),
tbf_leaders_steals(),
tbf_leaders_threes(),
tbf_leaders_turnovers(),
tbf_leagues(),
tbf_pbp(),
tbf_period_scores(),
tbf_player_box(),
tbf_player_career(),
tbf_players(),
tbf_schedule(),
tbf_seasons(),
tbf_shots(),
tbf_standings(),
tbf_team_box(),
tbf_team_games(),
tbf_team_player_stats(),
tbf_team_roster(),
tbf_team_staff(),
tbf_teams(),
tbf_weeks()
Examples
# \donttest{
try(tbf_league_seasons(competition = "bsl"))
#> ── TBF League Seasons ────────────────────────────────────────── wehoop 3.1.0 ──
#> ℹ Data updated: 2026-10-22 03:25:38 UTC
#> # A tibble: 61 × 7
#> activity_id activity_name url season_id season_label season competition
#> <int> <chr> <chr> <int> <chr> <int> <chr>
#> 1 22214 BSL 2026-2027 bsl-… 174 2026-2027 2027 bsl
#> 2 20728 BSL 2025-2026 bsl-… 172 2025-2026 2026 bsl
#> 3 19284 BSL 2024-2025 bsl-… 170 2024-2025 2025 bsl
#> 4 17820 Türkiye Sigorta … bsl-… 168 2023-2024 2024 bsl
#> 5 16354 BSL 2022-2023 bsl-… 166 2022-2023 2023 bsl
#> 6 14919 ING BSL 2021-2022 bsl-… 164 2021-2022 2022 bsl
#> 7 13559 ING BSL 2020-2021 bsl-… 162 2020-2021 2021 bsl
#> 8 13310 ING BSL 2019-2020 bsl-… 160 2019-2020 2020 bsl
#> 9 10986 TAHİNCİOĞLU BSL … bsl-… 158 2018-2019 2019 bsl
#> 10 8791 TAHİNCİOĞLU BSL … bsl-… 156 2017-2018 2018 bsl
#> # ℹ 51 more rows
# }
