Skip to contents

Standings with team season stats.

Usage

nl_standings(season = NULL, phase = NULL, return_parsed = TRUE)

Arguments

season

Season END year (2026 is 2025/26), sent to the API unchanged. Changing it changes every list, so it scopes the answer. Lists are served for 2019-2027 (the app's season picker) and patchily before: 2012 and 2017 answered, 2010/2014/2015/2016/2018 answered an empty list (probed 2026-10-12). NULL (the default) leaves the choice to the API.

phase

SIHF phase id (4940 is the 2025/26 Regular Season, 5297 the playoffs); phase ids change every season. NULL (the default) leaves the choice to the API: on /player that served the regular season (verified, byte-identical to phase = 4940); on the other routes that default is assumed, not verified.

return_parsed

Logical. TRUE (the default) returns the fastRhockey_data tibble; FALSE returns the raw JSON body as a nested list (api keys already dropped).

Value

A fastRhockey_data tibble (123 columns) with the columns below, or the raw JSON body when return_parsed = FALSE. A valid but empty payload returns a zero-row tibble with these columns.

col_nametypedescription
rankintegerPosition of the team in the standings table
team_idnumericSIHF team id (whole number; e.g. 101151 = HC Davos). The same key space as the sihf family's team_id.
namecharacterTeam name as the league app displays it
short_namecharacterTeam abbreviation
streakcharacterLast results, most recent first: W or L
gpintegerNumber of games played
gwintegerWins, all kinds
gwotintegerOvertime + shootout wins (gwo + gwpe)
gwpeintegerNumber of wins decided in a shootout
glintegerLosses, all kinds
glotintegerOvertime + shootout losses (glo + glpe)
glpeintegerShootout losses
pointegerStandings points: 3 per regulation win, 2 per overtime/shootout win, 1 per overtime/shootout loss (verified)
gintegerNumber of goals scored
geqintegerEven-strength goals (geq + gpp + gpk can fall short of g)
gppintegerPower-play goals
gpkintegerShorthanded goals
gaintegerGoals against: number of goals conceded
gaeqintegerEven-strength goals against
gappintegerShorthanded goals allowed on the power play
gapkintegerPower-play goals allowed while shorthanded
gointegerGoal difference, g - ga (verified)
ppointegerPower-play opportunities
pksintegerTimes shorthanded
sogintegerNumber of shots on goal
penaltiesintegerPenalties taken (upstream fo: fo2 + fo5 + fo10 + gm + mp). Not faceoffs: see face_offs / fot.
pimintegerPenalty minutes
fowintegerNumber of faceoffs won
folintegerNumber of faceoffs lost
shmintegerShots that missed the net
shpintegerShots that hit the post
shbintegerOwn shots blocked by an opponent
bksintegerOpponent shots blocked
saintegerShots on goal against
samintegerShots against that missed the net; 0 on every 2026 team row
sapintegerShots against that hit the post; 0 on every 2026 team row
sabintegerShots against that were blocked; 0 on every 2026 team row
sort_orderintegerApp sort key; not the rank
websitecharacterClub website URL
position_changecharacterRank movement since the last round ('none' on every 2026 row)
is_livelogicalTeam is playing now
current_resultintegerTeam's goals in a live game; 0 otherwise
current_opponent_resultintegerOpponent's goals in a live game; 0 otherwise
posintegerStandings position (= rank on every 2026 row)
hgintegerHome games played (gp / 2 on every 2026 row)
gsowintegerShootout wins; duplicate of gwpe (equal on every 2026 row)
gfdintegerGoals by defenders
gffintegerGoals by forwards
gfiintegerGoals by import (non-Swiss-licence) players (inferred; cf. the sihf/ teamGoalPosNation table)
gasowintegerShootout losses; duplicate of glpe (equal on every 2026 row)
ppintegerPower-play time, seconds
bpintegerShorthanded (box-play) time, seconds
fo2integerMinor (2-minute) penalties
fo5integerMajor (5-minute) penalties
fo10integer10-minute misconducts
gmintegerGame misconducts
mpintegerMatch penalties
psintegerShootout attempts taken
psgintegerGoals scored in shootouts
psmintegerShootout misses (ps = psg + psm on every 2026 team row)
psaintegerShootout shots faced (psga + pssvs)
psgaintegerShootout goals against
pssvsintegerSaves made in shootouts
specintegerTotal home attendance
capintegerTotal home arena capacity over the home games
fowozintegerOffensive-zone faceoffs won
fownzintegerNeutral-zone faceoffs won
fowdzintegerDefensive-zone faceoffs won
folozintegerOffensive-zone faceoffs lost
folnzintegerNeutral-zone faceoffs lost
foldzintegerDefensive-zone faceoffs lost
sgointegerNot determined. Equals gff + gfd on every team row; skater values are close to but not always g
sslotintegerShots from the slot
sagintegerShots on goal against that were saved; 0 on every 2026 team row (use sa)
sagointegerShots on goal against that went in; 0 on every 2026 team row (use ga)
saslotintegerSlot shots against
qualification_statuscharacterClinch marker ('none' on every 2026 row)
is_qualified_chllogicalQualified for the Champions Hockey League
goal_efficiencynumericShooting percentage, 100 * g / sog (verified); -1 with no shots
ppg_efficiencynumericPower-play percentage, 100 * gpp / ppo (verified)
ppggpnumericPower-play goals per game
ppopgpnumericPower-play opportunities per game
ppgpnumericPower-play time per game, seconds
gpgnumericGoals scored per game played
gagpnumericGoals against per game
gappgpnumericShorthanded goals against per game
geqgpnumericEven-strength goals per game
gaeqgpnumericEven-strength goals against per game
bks_per_gamenumericBlocked shots per game
pim_per_gamenumericPenalty minutes per game
ps_percentagenumericShootout success percentage, 0-100
attendanceintegerAverage home attendance (spec / hg)
capacityintegerArena capacity (cap / hg)
utilizationnumericCapacity utilisation, 100 * spec / cap
soggpnumericShots on goal per game
sslotgpnumericSlot shots per game
shmgpnumericMissed shots per game
shpgpnumericPost hits per game
gpkgpnumericShorthanded goals per game
pk_efficiencynumericPenalty-kill percentage, 100 * (1 - gapk / pks) (verified)
pksgpnumericTimes shorthanded per game
gapkgpnumericPower-play goals against per game
bpgpnumericShorthanded time per game, seconds
fotintegerFaceoffs taken (fow + fol)
face_offs_percentagenumericFaceoff win percentage, 0-100; -1 with no faceoffs
fogpnumericFaceoffs taken per game
fowgpnumericFaceoffs won per game
folgpnumericFaceoffs lost per game
fopoznumericOffensive-zone faceoff win percentage, 0-100
fopnznumericNeutral-zone faceoff win percentage, 0-100
fopdznumericDefensive-zone faceoff win percentage, 0-100
sagpnumericShots on goal against per game
saslotgpnumericSlot shots against per game
gffdintegerGoals by forwards and defenders (gff + gfd; verified)
gffpnumericShare of goals by forwards, 100 * gff / g
gfdpnumericShare of goals by defenders, 100 * gfd / g
gfipnumericShare of goals by import players, 100 * gfi / g
pssvs_percentagenumericShootout save percentage, 0-100; -1 with no shootout shots faced
pgpnumericStandings points per game
gwitintegerWins in regulation time (gw = gwit + overtime/shootout wins; verified)
gwointegerNumber of wins in overtime
glitintegerLosses in regulation time (gl = glit + overtime/shootout losses; verified)
glointegerOvertime losses

Details

robots.txt ruling. www.nationalleague.ch/robots.txt disallows /api. The owner approved building on it on 2026-10-12, for polite, incremental use only: requests are spaced at least one second apart (on every attempt, retries included), and a bulk backfill or a published mirror needs the owner's sign-off first. Crawl incrementally: fetch a finished game once (keyed by game_id), find new games with one nl_schedule() call per run, and fetch season tables at most once per game day.

Seasons are END years and go on the wire unchanged. Ids (*_id) are whole-number numeric (a 14-digit game_id exceeds R's 32-bit integer); every other whole-number column is integer. The club backend key the API ships in /teams/{id}/info is dropped before parsing and never returned.

Endpoint: GET https://www.nationalleague.ch/api/teams.

Errors

Raises a classed condition (all inherit fastRhockey_error): fastRhockey_no_data for a 404 or an empty answer (no games or rows for that season, team or phase), fastRhockey_asset_fetch for a failed fetch, an error object in a 200, a body without the ids it must carry, or an answer for another season, team, game or player, and fastRhockey_bad_request for a 400/422 or an argument that is not a whole number.

Examples

# \donttest{
  try(nl_standings(phase = 4940, season = 2026))
#> ── National League Standings Information from nationalleague.ch ────────────────
#> ℹ Data updated: 2026-10-13 01:58:34 UTC
#> # A tibble: 14 × 123
#>     rank team_id name      short_name streak    gp    gw  gwot  gwpe    gl  glot
#>    <int>   <dbl> <chr>     <chr>      <chr>  <int> <int> <int> <int> <int> <int>
#>  1     1  101151 HC Davos  HCD        "[\"W…    52    39     5     3    13     5
#>  2     2  103138 Fribourg… FRI        "[\"O…    52    37    13     8    15     2
#>  3     3  103140 Genève-S… GSHC       "[\"W…    52    31     5     1    21     3
#>  4     4  101139 ZSC Lions ZSC        "[\"O…    52    29     4     2    23     8
#>  5     5  101150 HC Lugano HCL        "[\"L…    52    28     2     2    24     7
#>  6     6  103141 Lausanne… LHC        "[\"O…    52    29     7     2    23     5
#>  7     7  101060 SCRJ Lak… SCRJ       "[\"L…    52    27     6     2    25     6
#>  8     8  101144 EV Zug    EVZ        "[\"W…    52    23     3     2    29     9
#>  9     9  102126 SC Bern   SCB        "[\"W…    52    24     9     5    28     5
#> 10    10  102128 EHC Biel… EHCB       "[\"W…    52    24    10     7    28     5
#> 11    11  102127 SCL Tige… SCL        "[\"O…    52    20     4     1    32     8
#> 12    12  101149 EHC Klot… EHCK       "[\"L…    52    20     5     0    32     8
#> 13    13  101152 HC Ambri… HCAP       "[\"O…    52    20     6     3    32     5
#> 14    14  103144 HC Ajoie  HCA        "[\"O…    52    13     4     3    39     7
#> # ℹ 112 more variables: glpe <int>, po <int>, g <int>, geq <int>, gpp <int>,
#> #   gpk <int>, ga <int>, gaeq <int>, gapp <int>, gapk <int>, go <int>,
#> #   ppo <int>, pks <int>, sog <int>, penalties <int>, pim <int>, fow <int>,
#> #   fol <int>, shm <int>, shp <int>, shb <int>, bks <int>, sa <int>, sam <int>,
#> #   sap <int>, sab <int>, sort_order <int>, website <chr>,
#> #   position_change <chr>, is_live <lgl>, current_result <int>,
#> #   current_opponent_result <int>, pos <int>, hg <int>, gsow <int>, …
# }