Skip to main content

SIHF — SIHF statistics API (data.sihf.ch; National League, Swiss League and every SIHF league) — Game

sihf_game_info​

Header of one game: league, phase, teams, final and per-period score and shots, venue, attendance, officials.

Endpoint URL: GET https://data.sihf.ch/statistic/api/cms/gameoverview

Valid URL: https://data.sihf.ch/statistic/api/cms/gameoverview?alias=gameDetail&searchQuery=20261105000325&language=en

API ParameterPythonPatternRequiredNullableDescription
searchQuerygame_idYRequired. SIHF game id (game_id in sihf_results), e.g. 20261105000325.
languagelanguageYResponse language. Only part of the body is translated: status, position and penalty names stay German.

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
game_idintegerSIHF game id (Int64 join key; the details link of sihf_results, the searchQuery of the game wrappers).
seasonintegerSeason by its END year (2026 = 2025-26).
roundintegerRound number within the season.
league_idintegerSIHF league id of the game (1 = National League).
league_namecharacterLeague name (e.g., "National League").
region_idintegerSIHF region id of the game (1 = national).
region_namecharacterRegion name (e.g., "National").
group_idintegerSIHF group id (0 = no group).
group_namecharacterName of the league group the game belongs to ('Keine' = none).
tournament_idintegerSIHF tournament id (1 = championship).
tournament_namecharacterTournament name, German (e.g., 'Meisterschaft' = championship).
qualification_idintegerSIHF id of the stage of the season (1 = regular season).
qualification_namecharacterStage of the season (e.g., "Regular Season", "Playoff Final").
phase_idintegerSIHF phase id (regular season, a playoff round, ...).
phase_namecharacterPhase name (e.g., "NL Playoff Final").
start_date_timecharacterScheduled start, ISO-8601 with UTC offset, as a string.
end_date_timecharacterEnd of the game, ISO-8601 with UTC offset, as a string.
update_date_timecharacterWhen SIHF last updated the record, ISO-8601 with UTC offset, as a string.
status_idintegerSIHF game-status id (12 = finished).
status_namecharacterGame-status name; German whatever the language (e.g., "Ende").
status_percentintegerGame progress, 0-100 (100 once the game is over).
status_canceledlogicalWhether the game was cancelled.
home_team_idintegerSIHF team id of the home team.
home_team_namecharacterHome team display name.
home_team_acronymcharacterHome team abbreviation.
away_team_idintegerSIHF team id of the away team.
away_team_namecharacterAway team display name.
away_team_acronymcharacterAway team abbreviation.
home_scoreintegerFinal home score.
away_scoreintegerFinal away score.
home_score_by_periodintegerHome goals per period, aligned with period_indicators.
away_score_by_periodintegerAway goals per period, aligned with period_indicators.
home_shots_by_periodintegerHome shots on goal per period, aligned with period_indicators.
away_shots_by_periodintegerAway shots on goal per period, aligned with period_indicators.
period_indicatorscharacterPeriod labels: "1", "2", "3", then "OT1", ...
venue_namecharacterName of the arena the game was played in.
venue_citycharacterCity of the arena with its canton code (e.g., 'Davos-Platz GR').
spectatorsintegerAttendance as SIHF reports it.
refereescharacterReferee names, comma-joined.
linesmencharacterLinesman names, comma-joined.
broadcastscharacterBroadcasters, comma-joined (e.g., "MYSPORTS,TV24").

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

sihf_game_info(game_id=20261105000325)

Last validated n/a.

sihf_game_player_stats​

Skater box score of one game, both sides, with ice time and faceoffs.

Endpoint URL: GET https://data.sihf.ch/statistic/api/cms/gameoverview

Valid URL: https://data.sihf.ch/statistic/api/cms/gameoverview?alias=gameDetail&searchQuery=20261105000325&language=en

API ParameterPythonPatternRequiredNullableDescription
searchQuerygame_idYRequired. SIHF game id (game_id in sihf_results), e.g. 20261105000325.
languagelanguageYResponse language. Only part of the body is translated: status, position and penalty names stay German.

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
game_idintegerSIHF game id (Int64 join key; the details link of sihf_results, the searchQuery of the game wrappers).
team_sidecharacterSide of the game the row belongs to: "home" or "away".
team_idintegerSIHF team id of the row's side.
team_namecharacterTeam name of the row's side.
player_numberintegerJersey number worn in this game.
playercharacterPlayer name as SIHF prints it, last name first (e.g., "Dahlbeck Klas").
player_positioncharacterPosition, German whatever the language (e.g., "Verteidiger").
goalsintegerGoals scored by the player.
assistsintegerAssists (primary + secondary).
assists1integerPrimary assists.
assists2integerSecondary assists.
pointsintegerPoints (goals + assists).
pim_totalintegerPenalty minutes.
plus_minusintegerPlus-minus: even-strength and shorthanded goals for, minus against, while on ice.
shots_on_goalintegerShots on goal taken by the player.
sog_missedintegerShots that missed the net.
sog_postintegerShots off the post or crossbar.
blockingsintegerOpponent shots blocked by the player.
faceoffs_wonintegerFaceoffs won by the player.
faceoffs_lostintegerFaceoffs lost by the player.
faceoffs_percentdoubleFaceoff win percentage, 0-100; null with no faceoffs.
time_on_icecharacterIce time, "mm:ss".
time_on_ice_ppcharacterPower-play ice time, "mm:ss".
time_on_ice_pkcharacterPenalty-kill ice time, "mm:ss".
row_typecharacter"data" per player, "total" for the side's total row.
player_idintegerSIHF licence number of the player (Int64 join key), resolved from the game's roster.

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

sihf_game_player_stats(game_id=20261105000325)

Last validated n/a.

sihf_game_goalie_stats​

Goaltender box score of one game, both sides.

Endpoint URL: GET https://data.sihf.ch/statistic/api/cms/gameoverview

Valid URL: https://data.sihf.ch/statistic/api/cms/gameoverview?alias=gameDetail&searchQuery=20261105000325&language=en

API ParameterPythonPatternRequiredNullableDescription
searchQuerygame_idYRequired. SIHF game id (game_id in sihf_results), e.g. 20261105000325.
languagelanguageYResponse language. Only part of the body is translated: status, position and penalty names stay German.

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
game_idintegerSIHF game id (Int64 join key; the details link of sihf_results, the searchQuery of the game wrappers).
team_sidecharacterSide of the game the row belongs to: "home" or "away".
team_idintegerSIHF team id of the row's side.
team_namecharacterTeam name of the row's side.
player_numberintegerJersey number worn in this game.
playercharacterPlayer name as SIHF prints it, last name first (e.g., "Dahlbeck Klas").
goals_againstintegerGoals allowed by the goaltender.
savesintegerShots on goal saved by the goaltender.
shots_againstintegerShots on goal faced.
saves_percentagedoubleSave 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".
goals_against_averagedoubleGoals against per 60 minutes in this game.
penalty_in_minutesintegerPenalty minutes.
row_typecharacter"data" for every row: a game goalie box has no summary rows.
player_idintegerSIHF licence number of the player (Int64 join key), resolved from the game's roster.

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

sihf_game_goalie_stats(game_id=20261105000325)

Last validated n/a.

sihf_game_team_stats​

Team stats of one game: shots by period, faceoffs by zone, penalty minutes, power play and penalty kill.

Endpoint URL: GET https://data.sihf.ch/statistic/api/cms/gameoverview

Valid URL: https://data.sihf.ch/statistic/api/cms/gameoverview?alias=gameDetail&searchQuery=20261105000325&language=en

API ParameterPythonPatternRequiredNullableDescription
searchQuerygame_idYRequired. SIHF game id (game_id in sihf_results), e.g. 20261105000325.
languagelanguageYResponse language. Only part of the body is translated: status, position and penalty names stay German.

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
game_idintegerSIHF game id (Int64 join key; the details link of sihf_results, the searchQuery of the game wrappers).
statisticcharacterStatistic label as SIHF prints it (e.g., "SOG Total", "FO% 1P", "PPT").
home_valuecharacterHome team's value, as a string (counts, percentages and mm:ss times share the column).
away_valuecharacterAway team's value, as a string.

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

sihf_game_team_stats(game_id=20261105000325)

Last validated n/a.

sihf_game_lineups​

Lineups of one game by unit and slot, plus the absentees.

Endpoint URL: GET https://data.sihf.ch/statistic/api/cms/gameoverview

Valid URL: https://data.sihf.ch/statistic/api/cms/gameoverview?alias=gameDetail&searchQuery=20261105000325&language=en

API ParameterPythonPatternRequiredNullableDescription
searchQuerygame_idYRequired. SIHF game id (game_id in sihf_results), e.g. 20261105000325.
languagelanguageYResponse language. Only part of the body is translated: status, position and penalty names stay German.

Returns​

return_parsed=True (default) — a tidy polars.DataFrame with the columns below; pass return_as_pandas=True for a pandas.DataFrame.

col_nametypedescription
game_idintegerSIHF game id (Int64 join key; the details link of sihf_results, the searchQuery of the game wrappers).
team_sidecharacterSide of the game the row belongs to: "home" or "away".
team_idintegerSIHF team id (Int64 join key).
unitcharacterLineup unit: "goalkeeper", "defense_left" / "_right", "forward_left" / "_center" / "_right", "other"; null for an absentee.
slotinteger1-based position in SIHF's listing of the unit.
player_idintegerSIHF licence number of the player (Int64 join key), resolved from the game's roster.
player_namecharacterPlayer name from the game's roster, last name first.
player_jerseyintegerJersey number from the game's roster.
is_captainlogicalWhether the lineup tags the player as captain.
is_first_goalkeeperlogicalWhether the lineup tags the player as the starting goaltender.
absence_codecharacterAbsence code for an absentee ("SU", "IN", "AB").
absence_reasoncharacterAbsence reason, German (e.g., "Überzählig", "Verletzt", "Abwesend").

return_parsed=False — the raw JSON Dict payload, unparsed.

Example​

sihf_game_lineups(game_id=20261105000325)

Last validated n/a.