Skip to contents

Goaltender season totals: games, starts, goals against, GAA, shots, saves, save percentage, ice time.

Reads the Swiss Ice Hockey Federation statistics API (data.sihf.ch, keyless JSON). SIHF keys a season by its END year (2026 = 2025-26). An unknown season, league_id or phase_id is never an error upstream (SIHF silently answers another one), so every table answer is checked against the body's own filter echo and refused when it differs. Every request is spaced at least one second from the last one to the host.

Usage

sihf_goalie_stats(season, league_id = 1L, phase_id = NULL, language = "en")

Arguments

season

Required. Season by its END year (2026 = 2025-26). A season SIHF does not have raises fastRhockey_no_data error (the API itself silently answers another one).

league_id

SIHF league id: 1 = National League, 2 = Swiss League, 100 = MyHockey League, 3 = 1. Liga, 43 = SWHL B, 113 = U21-Elit (the body's League filter lists them). An id SIHF does not have for the season raises fastRhockey_no_data error.

phase_id

SIHF phase id (regular season, a playoff round, ...; the body's Phase filter lists them). NULL = no phase filter: the season summary over every phase (player / goalie tables), every game (results), the regular-season table (standings).

language

Response language. Only part of the body is translated: status, position and penalty names stay German.

Value

A fastRhockey_data tibble with 19 columns. A zero-row tibble with these columns when the payload holds no rows.

col_nametypedescription
seasonintegerSeason by its END year (2026 = 2025-26), from the body's echo of the Season filter.
phase_idintegerSIHF phase id (regular season, a playoff round, ...); null unless a phase filter is passed.
rankintegerRank in the table; null on a summary row.
playercharacterPlayer name as SIHF prints it, last name first (e.g., "Dahlbeck Klas").
team_idintegerSIHF team id (integer join key).
team_namecharacterTeam display name as SIHF publishes it.
team_acronymcharacterTeam abbreviation as SIHF publishes it (e.g., "HCD").
games_playedintegerGames the goaltender dressed for.
first_keeperintegerGames listed as the starting goaltender.
goals_againstintegerGoals allowed by the goaltender.
goals_against_averagenumericGoals against per 60 minutes.
shots_againstintegerShots on goal faced.
savesintegerShots on goal saved by the goaltender.
saves_percentagenumericSave percentage on a 0-100 scale (91.25 = .9125).
seconds_playedcharacterIce time as "mm:ss" (a string, despite the upstream name). Minutes are not capped at 59: an overtime game reads "65:00", a season total "3615:02".
penalty_in_minutesintegerPenalty minutes.
goalsintegerGoals scored by the goaltender (almost always 0).
assistsintegerAssists by the goaltender.
row_typecharacter"data" for a regular row; "average" or "total" for a summary row SIHF mixes into the table.

Errors

  • fastRhockey_no_data: SIHF answered 404 (unknown game), or ignored a requested season, league or phase and served another one.

  • fastRhockey_bad_request: SIHF answered 400 / 422, or an argument is invalid.

  • fastRhockey_asset_fetch: any other non-2xx answer or a dead connection after retries, an empty or unreadable body, a stub or redirect body, a table without its filter echo, a truncated table, or a gameoverview body for another game.

Examples

# \donttest{
  try(sihf_goalie_stats(season = 2026, league_id = 1))
#> ── SIHF Goalie Stats Information from data.sihf.ch ─── fastRhockey 1.0.0.9000 ──
#> ℹ Data updated: 2026-10-13 01:59:42 UTC
#> # A tibble: 35 × 19
#>    season phase_id  rank player      team_id team_name team_acronym games_played
#>     <int>    <int> <int> <chr>         <int> <chr>     <chr>               <int>
#>  1   2026       NA     1 Hrubec Sim…  101139 ZSC Lions ZSC                    60
#>  2   2026       NA     2 Reideborn …  102126 SC Bern   SCB                    39
#>  3   2026       NA     3 Berra Reto   103138 Fribourg… FRI                    75
#>  4   2026       NA     4 Aeschliman…  101151 HC Davos  HCD                    67
#>  5   2026       NA     5 Meyer Robin  102127 SCL Tige… SCL                    22
#>  6   2026       NA     6 Schlegel N…  101150 HC Lugano HCL                    42
#>  7   2026       NA    NA Durchschni…      NA Durchsch… NA                     44
#>  8   2026       NA     7 Charlin St…  103140 Genève-S… GSHC                   66
#>  9   2026       NA     8 Waeber Lud…  101149 EHC Klot… EHCK                   25
#> 10   2026       NA     9 Genoni Leo…  101144 EV Zug    EVZ                    52
#> # ℹ 25 more rows
#> # ℹ 11 more variables: first_keeper <int>, goals_against <int>,
#> #   goals_against_average <dbl>, shots_against <int>, saves <int>,
#> #   saves_percentage <dbl>, seconds_played <chr>, penalty_in_minutes <int>,
#> #   goals <int>, assists <int>, row_type <chr>
# }