UI string tables of the site in English, French and Dutch (one row per language and key).
Endpoint: GET https://bnxt.sportpress.info/api/v1/server-config
Value
A hoopR_data tibble: UI string tables of the site in English, French and Dutch (one row per language and key). An
empty valid answer raises hoopR_no_data; the columns are always these, in this order (sportsdataverse-py
sportpress_ui_strings):
| col_name | type | description |
| language | character | ISO 639-1 code of the UI language: en, fr (French) or nl (Dutch). |
| key | character | Dotted UI string key such as 'statistics.individual.points'; 302 keys per language. |
| text | character | The UI text in that language; 11 keys label statistics columns, the rest are menus and buttons. |
Details
Unofficial and unsupported: the Sportpress API is the JSON backend of bnxtleague.com, not a documented public API. Every route needs a header key; it is public (hard-coded in the site bundle),
bnxt_runtimereads it from the bundle at run time, falls back to a documented value when the bundle cannot be read, and never prints or logs it. A 401 raises AssetFetchError (key rotated?). robots.txt allows everything; requests are spaced at least 1 s apart.Season key: the END year (
season=2026is 2025-26), the API's own key on the season routes. Every other route is keyed by the competition id (one per season: 1 = 2021-22, 2 = 2020-21, 3 = 2022-23, 12 = 2023-24, 22 = 2024-25, 24 = 2025-26, 25 = 2026-27), the competition-team id (new every season;uu_team_idis the stable club), the roster id (player x team x season) or the game id (unique across seasons).sportpress_phases(season)maps a season to its competition id.Coverage: schedule and rosters from 2021-22 (2020-21 is empty); box scores for 2021-22, 2024-25, 2025-26 and 2026-27 (2022-23 and 2023-24 answer empty); standings and averages for 2021-22 and 2024-25 on; play-by-play ('film', with court x/y) for 2021-22 and 2026-27 only: for 2022-23 to 2025-26 use Genius play-by-play through
genius_id(sportpress_game_slider(), organisation BNXT). The game routes (box score, film, overview) refuse a game that is not finished (AssetFetchError).Data notes: a team's box total can differ from the schedule final score on about 18 of 1,246 sampled team boxes (mostly 2024-25, by 2-21 points); the frames report what the API serves.
nationality_codeis dirty (lower case,USA/BELpairs, empty,HOL). Names differ by language and sponsor: join on ids. Contact and social fields are dropped; only a player's public birth date is kept. The sibling tenants sopron.sportpress.info and beac.sportpress.info are not wrapped.Errors are classed conditions:
hoopR_no_data(HTTP 404, an emptydatalist: an unknown id or a season without data, an empty ranking),hoopR_bad_request(an id or season that is not an integer, HTTP 400 / 422) andhoopR_asset_fetch(a rejected key after one renewal, any other non-200, a non-JSON or empty body, an error or changed envelope, a game that is not finished, a body for another season, competition, team or game), all inheritinghoopR_error. Wrappers raise; they never return an empty frame for a failed request. Whole doubles (24) are accepted for integer arguments.
See also
Other BNXT League Functions:
sportpress_club_seasons(),
sportpress_competition_staff(),
sportpress_competition_teams(),
sportpress_game_box(),
sportpress_game_film(),
sportpress_game_find(),
sportpress_game_leaders(),
sportpress_game_overview(),
sportpress_game_periods(),
sportpress_game_slider(),
sportpress_game_team_box(),
sportpress_game_top_performers(),
sportpress_nationality_codes(),
sportpress_phases(),
sportpress_player_career(),
sportpress_player_games(),
sportpress_player_rankings(),
sportpress_referees(),
sportpress_roster_find(),
sportpress_schedule(),
sportpress_season_roster(),
sportpress_standings(),
sportpress_team_find(),
sportpress_team_games(),
sportpress_team_player_averages(),
sportpress_team_rankings(),
sportpress_team_roster()
