Skip to contents

Team totals of both teams in one FEB game: shooting, rebounds, assists, turnovers, fouls.

Endpoint: GET https://intrafeb.feb.es/LiveStats.API/api/v1/TeamStats/{game_id}

One row per team, home first. fastb, ptsto, secpts, bench and paint are null on every sampled game (the stat crews do not fill them); seconds_played and val are null on these rows.

Usage

feb_team_stats(game_id)

Arguments

game_id

(integer required): FEB game id, e.g. 2535725; the game_id column of feb_schedule(), feb_results() and feb_overview().

Value

A wehoop_data tibble with these columns:

col_nametypedescription
game_idintegerFEB game id (one global sequence): the {gameId} of every LiveStats route and the p= of Partido.aspx. Game bodies do not print it, so it comes from the request.
team_sidecharacterSide of the game the row belongs to: home or away (the feed's TEAM[0] / TEAM[1], or its 1/2 and 0/1 side codes, normalised).
team_idintegerTeam-season id (key space: FEB team registrations; a NEW id every season, e.g. HLA Alicante = 979989 in 2025-26 and 1008687 in 2026-27). Joins the schedule's home_team_id / away_team_id; not a club or player id.
teamcharacterTeam name as registered for the season (sponsor name, uppercase: 'HLA ALICANTE').
team_codecharacterFederation team code, 8 digits as a string: the 6-digit club_code plus a 2-digit team suffix ('03058600'). Null on 2020-21 games.
club_codecharacterFederation club code, 6 digits as a string (the first 6 digits of team_code). Whether it is stable across seasons is unverified. Null on 2020-21 games.
seconds_playedintegerSeconds on court (the feed's min, an integer count of seconds: 1064 = 17:44; a team row sums its players, 12000 = 200:00). Null on /TeamStats rows.
min_formattedcharacterTime played as 'mm:ss'; '0:00' on /TeamStats rows (only box-score totals carry a value).
ptsintegerTeam points: the final score when the game is over, else the live score.
p1mintegerFree throws made (tiros libres; integer as a string).
p1aintegerFree throws attempted (integer as a string).
p1pdoubleFree-throw percentage, 0-100, as a string with a DECIMAL COMMA ('77,3'); '0,0' when no attempts.
p2mintegerTwo-point field goals made (integer as a string).
p2aintegerTwo-point field goals attempted (integer as a string).
p2pdoubleTwo-point percentage, 0-100, string with a decimal comma ('54,1').
p3mintegerThree-point field goals made (integer as a string).
p3aintegerThree-point field goals attempted (integer as a string).
p3pdoubleThree-point percentage, 0-100, string with a decimal comma ('47,6').
fgmintegerField goals made, 2PT + 3PT (tiros de campo; integer as a string).
fgaintegerField goals attempted, 2PT + 3PT (integer as a string).
fgpdoubleField-goal percentage, 0-100, string with a decimal comma ('51,7').
rointegerOffensive rebounds (rebotes ofensivos; integer as a string).
rdintegerDefensive rebounds (rebotes defensivos; integer as a string).
rtintegerTotal rebounds (rebotes totales; integer as a string).
assistintegerAssists (asistencias; integer as a string).
stintegerSteals (balones robados, page column BR; integer as a string).
tointegerTurnovers (balones perdidos, page column BP; integer as a string).
bsintegerBlocks made (tapones a favor, page column TF; integer as a string).
tcintegerShots of this team that were blocked (tapones en contra, page column TC). Null on /TeamStats rows.
mtintegerDunks (mates, page column MT). Null on /TeamStats rows.
pfintegerPersonal fouls committed (faltas cometidas, page column FC; integer as a string).
rfintegerFouls received / drawn (faltas recibidas, page column FR; integer as a string).
foulsintegerTeam fouls committed in the game (equals pf on the samples).
valintegerFEB efficiency rating (valoracion). Null on /TeamStats rows, filled on box-score totals.
fastbintegerFast-break points. Null on every sampled game: the federation's stat crews do not fill it.
ptstointegerPoints off turnovers. Null on every sampled game: the federation's stat crews do not fill it.
secptsintegerSecond-chance points. Null on every sampled game: the federation's stat crews do not fill it.
benchintegerBench points. Null on every sampled game: the federation's stat crews do not fill it.
paintintegerPoints in the paint. Null on every sampled game: the federation's stat crews do not fill it.

Details

The Spanish Basketball Federation (FEB) wrappers cover Primera FEB, Segunda FEB and Liga Femenina Endesa (plus the federation's other groups on the same routes). They mirror sdv-py's sportsdataverse.basketball.feb wrappers of the same names: same arguments, the same snake_case columns and types, one row per sdv-py row.

Legal notice. The FEB's aviso legal (legal notice) asserts intellectual-property rights over the site's content and its databases (the EU database right). It has no explicit scraping clause, and robots.txt answers 404 on both hosts. Fetching for your own use on your own machine is how these wrappers are meant to be used; check the notice before you republish the data.

Unofficial and unsupported. The LiveStats API (intrafeb.feb.es) is the federation's own widget backend, not a documented public API. It needs a bearer token, which is public: it is read from the home page of baloncestoenvivo.feb.es at run time, kept in memory for the R session (24 h validity, renewed once on an HTTP 401) and never printed, logged or written. Requests are spaced at least one second apart per host; 429 and 5xx answers are retried (three attempts).

Coverage. The game routes answer from 2020-21 (Liga Femenina Endesa from its first game; Primera FEB from 2021-03-12, so its earlier 2020-21 games and every earlier season answer 404). 2020-21 play-by-play is text only. The schedule pages go back to 1996-97 (season = 1997).

Seasons are END years (season = 2027 is 2026-27); the site's own t key is the START year, so the request sends t = season - 1.

Errors are classed conditions, never a warning plus an empty frame: wehoop_no_data (HTTP 404, an unknown group, a schedule page with no games, an empty overview window), wehoop_bad_request (HTTP 400 / 422, or a game_id, group or season that is not a non-negative integer) and wehoop_asset_fetch (any other failure: another status, a transport error, a token the API still rejects after one renewal, a non-JSON or non-HTML body, an error or changed envelope, a play-by-play of another game, a page for another group or season, or layout drift). All inherit wehoop_error.

 feb_team_stats(game_id = 2535725)