Standings with team season stats.
Arguments
- season
Season END year (
2026is 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 (
4940is the 2025/26 Regular Season,5297the playoffs); phase ids change every season.NULL(the default) leaves the choice to the API: on/playerthat served the regular season (verified, byte-identical tophase = 4940); on the other routes that default is assumed, not verified.- return_parsed
Logical.
TRUE(the default) returns thefastRhockey_datatibble;FALSEreturns 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_name | type | description |
| rank | integer | Position of the team in the standings table |
| team_id | numeric | SIHF team id (whole number; e.g. 101151 = HC Davos). The same key space as the sihf family's team_id. |
| name | character | Team name as the league app displays it |
| short_name | character | Team abbreviation |
| streak | character | Last results, most recent first: W or L |
| gp | integer | Number of games played |
| gw | integer | Wins, all kinds |
| gwot | integer | Overtime + shootout wins (gwo + gwpe) |
| gwpe | integer | Number of wins decided in a shootout |
| gl | integer | Losses, all kinds |
| glot | integer | Overtime + shootout losses (glo + glpe) |
| glpe | integer | Shootout losses |
| po | integer | Standings points: 3 per regulation win, 2 per overtime/shootout win, 1 per overtime/shootout loss (verified) |
| g | integer | Number of goals scored |
| geq | integer | Even-strength goals (geq + gpp + gpk can fall short of g) |
| gpp | integer | Power-play goals |
| gpk | integer | Shorthanded goals |
| ga | integer | Goals against: number of goals conceded |
| gaeq | integer | Even-strength goals against |
| gapp | integer | Shorthanded goals allowed on the power play |
| gapk | integer | Power-play goals allowed while shorthanded |
| go | integer | Goal difference, g - ga (verified) |
| ppo | integer | Power-play opportunities |
| pks | integer | Times shorthanded |
| sog | integer | Number of shots on goal |
| penalties | integer | Penalties taken (upstream fo: fo2 + fo5 + fo10 + gm + mp). Not faceoffs: see face_offs / fot. |
| pim | integer | Penalty minutes |
| fow | integer | Number of faceoffs won |
| fol | integer | Number of faceoffs lost |
| shm | integer | Shots that missed the net |
| shp | integer | Shots that hit the post |
| shb | integer | Own shots blocked by an opponent |
| bks | integer | Opponent shots blocked |
| sa | integer | Shots on goal against |
| sam | integer | Shots against that missed the net; 0 on every 2026 team row |
| sap | integer | Shots against that hit the post; 0 on every 2026 team row |
| sab | integer | Shots against that were blocked; 0 on every 2026 team row |
| sort_order | integer | App sort key; not the rank |
| website | character | Club website URL |
| position_change | character | Rank movement since the last round ('none' on every 2026 row) |
| is_live | logical | Team is playing now |
| current_result | integer | Team's goals in a live game; 0 otherwise |
| current_opponent_result | integer | Opponent's goals in a live game; 0 otherwise |
| pos | integer | Standings position (= rank on every 2026 row) |
| hg | integer | Home games played (gp / 2 on every 2026 row) |
| gsow | integer | Shootout wins; duplicate of gwpe (equal on every 2026 row) |
| gfd | integer | Goals by defenders |
| gff | integer | Goals by forwards |
| gfi | integer | Goals by import (non-Swiss-licence) players (inferred; cf. the sihf/ teamGoalPosNation table) |
| gasow | integer | Shootout losses; duplicate of glpe (equal on every 2026 row) |
| pp | integer | Power-play time, seconds |
| bp | integer | Shorthanded (box-play) time, seconds |
| fo2 | integer | Minor (2-minute) penalties |
| fo5 | integer | Major (5-minute) penalties |
| fo10 | integer | 10-minute misconducts |
| gm | integer | Game misconducts |
| mp | integer | Match penalties |
| ps | integer | Shootout attempts taken |
| psg | integer | Goals scored in shootouts |
| psm | integer | Shootout misses (ps = psg + psm on every 2026 team row) |
| psa | integer | Shootout shots faced (psga + pssvs) |
| psga | integer | Shootout goals against |
| pssvs | integer | Saves made in shootouts |
| spec | integer | Total home attendance |
| cap | integer | Total home arena capacity over the home games |
| fowoz | integer | Offensive-zone faceoffs won |
| fownz | integer | Neutral-zone faceoffs won |
| fowdz | integer | Defensive-zone faceoffs won |
| foloz | integer | Offensive-zone faceoffs lost |
| folnz | integer | Neutral-zone faceoffs lost |
| foldz | integer | Defensive-zone faceoffs lost |
| sgo | integer | Not determined. Equals gff + gfd on every team row; skater values are close to but not always g |
| sslot | integer | Shots from the slot |
| sag | integer | Shots on goal against that were saved; 0 on every 2026 team row (use sa) |
| sago | integer | Shots on goal against that went in; 0 on every 2026 team row (use ga) |
| saslot | integer | Slot shots against |
| qualification_status | character | Clinch marker ('none' on every 2026 row) |
| is_qualified_chl | logical | Qualified for the Champions Hockey League |
| goal_efficiency | numeric | Shooting percentage, 100 * g / sog (verified); -1 with no shots |
| ppg_efficiency | numeric | Power-play percentage, 100 * gpp / ppo (verified) |
| ppggp | numeric | Power-play goals per game |
| ppopgp | numeric | Power-play opportunities per game |
| ppgp | numeric | Power-play time per game, seconds |
| gpg | numeric | Goals scored per game played |
| gagp | numeric | Goals against per game |
| gappgp | numeric | Shorthanded goals against per game |
| geqgp | numeric | Even-strength goals per game |
| gaeqgp | numeric | Even-strength goals against per game |
| bks_per_game | numeric | Blocked shots per game |
| pim_per_game | numeric | Penalty minutes per game |
| ps_percentage | numeric | Shootout success percentage, 0-100 |
| attendance | integer | Average home attendance (spec / hg) |
| capacity | integer | Arena capacity (cap / hg) |
| utilization | numeric | Capacity utilisation, 100 * spec / cap |
| soggp | numeric | Shots on goal per game |
| sslotgp | numeric | Slot shots per game |
| shmgp | numeric | Missed shots per game |
| shpgp | numeric | Post hits per game |
| gpkgp | numeric | Shorthanded goals per game |
| pk_efficiency | numeric | Penalty-kill percentage, 100 * (1 - gapk / pks) (verified) |
| pksgp | numeric | Times shorthanded per game |
| gapkgp | numeric | Power-play goals against per game |
| bpgp | numeric | Shorthanded time per game, seconds |
| fot | integer | Faceoffs taken (fow + fol) |
| face_offs_percentage | numeric | Faceoff win percentage, 0-100; -1 with no faceoffs |
| fogp | numeric | Faceoffs taken per game |
| fowgp | numeric | Faceoffs won per game |
| folgp | numeric | Faceoffs lost per game |
| fopoz | numeric | Offensive-zone faceoff win percentage, 0-100 |
| fopnz | numeric | Neutral-zone faceoff win percentage, 0-100 |
| fopdz | numeric | Defensive-zone faceoff win percentage, 0-100 |
| sagp | numeric | Shots on goal against per game |
| saslotgp | numeric | Slot shots against per game |
| gffd | integer | Goals by forwards and defenders (gff + gfd; verified) |
| gffp | numeric | Share of goals by forwards, 100 * gff / g |
| gfdp | numeric | Share of goals by defenders, 100 * gfd / g |
| gfip | numeric | Share of goals by import players, 100 * gfi / g |
| pssvs_percentage | numeric | Shootout save percentage, 0-100; -1 with no shootout shots faced |
| pgp | numeric | Standings points per game |
| gwit | integer | Wins in regulation time (gw = gwit + overtime/shootout wins; verified) |
| gwo | integer | Number of wins in overtime |
| glit | integer | Losses in regulation time (gl = glit + overtime/shootout losses; verified) |
| glo | integer | Overtime losses |
Details
Polite use. www.nationalleague.ch/robots.txt disallows /api, so keep use light and incremental. Requests
are spaced at least one second apart (on every attempt, retries included). Check the site's terms of use before
any bulk download or redistribution. 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.
See also
Other National League Functions:
nl_current_games(),
nl_game_overview(),
nl_lineups(),
nl_pbp(),
nl_player_box(),
nl_player_season(),
nl_player_stats(),
nl_playoffs(),
nl_playouts(),
nl_schedule(),
nl_shots(),
nl_team_info(),
nl_team_player_stats(),
nl_team_schedule(),
nl_team_stats(),
nl_top_scorers()
Examples
# \donttest{
try(nl_standings(phase = 4940, season = 2026))
#> ── National League Standings Information from nationalleague.ch ────────────────
#> ℹ Data updated: 2026-11-02 03:51:58 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>, …
# }
