Skip to main content

NL — National League app API (www.nationalleague.ch/api, Switzerland) — Player

nl_player_box​

One game's player box score: goals, assists, shots, faceoffs, ice time, goaltending.

Endpoint URL: GET https://www.nationalleague.ch/api/games/{game_id}

Valid URL: https://www.nationalleague.ch/api/games/20261105000325

API ParameterPythonPatternRequiredNullableDescription
game_idgame_idYSIHF game id, 14 digits <season(4)><competition(4)><sequence(6)> (game_id in nl_schedule; the same id as the sihf family's game_id), e.g. 20261105000325.

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 <season(4)><competition(4)><sequence(6)> (Int64; e.g. 20261105000325, 1105 = National League). The same id as the sihf family's game_id; its first four digits are the season END year.
team_sidecharacterhome or away: the side of the team this row belongs to.
team_idintegerSIHF team id (Int64; e.g. 101151 = HC Davos). The same key space as the sihf family's team_id.
player_idintegerSIHF licence number (Int64; e.g. 305519 = Tobias Geisser). Joins the sihf family's player_id and every SIHF *LicenceNr.
numbercharacterSweater number, a string
first_namecharacterFirst (given) name of the player
last_namecharacterLast (family) name of the player
short_namecharacterInitial and last name, e.g. 'S. Aeschlimann'
namecharacterFirst and last name
positioncharactergoalkeeper, defender or forwarder (sic)
fowintegerNumber of faceoffs won
folintegerNumber of faceoffs lost
sogintegerNumber of shots on goal
shmintegerShots that missed the net
shpintegerShots that hit the post
shbintegerOwn shots blocked by an opponent
bksintegerOpponent shots blocked
toiintegerTime on ice, seconds
toi_eqintegerEven-strength time on ice, seconds
toi_ppintegerPower-play time on ice, seconds
toi_pkintegerShorthanded time on ice, seconds
pimintegerPenalty minutes
gintegerNumber of goals scored
a1integerFirst (primary) assists credited
a2integerSecond (secondary) assists credited
plintegerPlus count: on ice for an even-strength or shorthanded goal for
miintegerMinus count: on ice for a goal against
mipintegerGoaltender time played, hundredths of a minute (6000 = 60:00; = seconds / 0.6)
gaintegerGoals against: number of goals conceded
svsintegerNumber of saves made by the goaltender
saintegerShots on goal against
gaanumericGoals-against average; 0 in every sampled row, even for goaltenders who conceded
save_percentagenumericSave percentage, 0-100
faceoffsintegerFaceoffs taken (upstream fo: fow + fol). Not penalties.
faceoffs_percentagenumericFaceoff win percentage (upstream foPercentage); -1 without faceoffs.
aintegerAssists (a1 + a2)
ptsintegerPoints (goals + assists)
pl_miintegerPlus/minus (pl - mi)

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

Example​

nl_player_box(game_id=20261105000325)

Last validated n/a.

nl_player_stats​

Season stats for every player, with playerId.

Endpoint URL: GET https://www.nationalleague.ch/api/player

Valid URL: https://www.nationalleague.ch/api/player?season=2026&phase=4940

API ParameterPythonPatternRequiredNullableDescription
seasonseasonYSeason END year: 2026 = 2025/26. Diffing 2026 vs 2027 changes every list, and /player/{playerId} gp (51 vs 7), so it scopes. Lists are served for 2019-2027 (the app's season picker, /api/content/metadata seasons) and patchily before: 2012 and 2017 answered, 2010/2014/2015/2016/2018 answered [] (probed 2026-10-12).
phasephaseYSIHF phase id (see x-phase-ids). Omitted = the regular season: /player?season=2026 and phase=4940 answer byte-identical bodies, phase=5297 (playoffs) a different one (max gp 19 vs 52). Phase ids change every season; whether the metadata ids apply to 2027 is unverified.

Returns​

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

col_nametypedescription
player_idintegerSIHF licence number (Int64; e.g. 305519 = Tobias Geisser). Joins the sihf family's player_id and every SIHF *LicenceNr.
first_namecharacterFirst (given) name of the player
last_namecharacterLast (family) name of the player
team_idintegerSIHF team id (Int64; e.g. 101151 = HC Davos). The same key space as the sihf family's team_id.
team_short_namecharacterTeam abbreviation
team_namecharacterTeam name as the league app displays it
numbercharacterSweater number, a string
positioncharactergoalkeeper, defender or forwarder (sic); one of 502 rows in the full 2026 body has the integer 0
topscorer_pointsintegerPostFinance Top Scorer game score (an app fantasy rating, not on-ice points)
topscorer_point_averagenumericPostFinance Top Scorer game score per game
topscorer_market_valueintegerPostFinance Top Scorer game market value
topscorer_market_value_trendintegerMarket-value trend: 1 up, 0 flat, -1 down
topscorer_amountintegerCHF amount credited to the team's Top Scorer jersey holder (non-zero for 14 players, one per team)
is_topscorerlogicalWears the team's PostFinance Top Scorer jersey (one per team)
nationalitycharacterNationality; unobserved: null or empty in every sampled row
birthcharacterDate of birth, YYYY-MM-DD
heightintegerHeight; unobserved: null or empty in every sampled row
weightintegerWeight; unobserved: null or empty in every sampled row
handcharacterShooting or catching hand; unobserved: null or empty in every sampled row
lcridintegerNot determined (small integer, 0-4 in 2026)
nocintegerNot determined (small integer, 0-2 in 2026)
gpintegerNumber of games played
gintegerNumber of goals scored
a1integerFirst (primary) assists credited
a2integerSecond (secondary) assists credited
penaltiesintegerPenalties taken (upstream fo: fo2 + fo5 + fo10 + gm + mp). Not faceoffs: see face_offs / fot.
pimintegerPenalty minutes
geqintegerEven-strength goals
gppintegerPower-play goals
gpkintegerShorthanded goals
gwgintegerGame-winning goals
psintegerShootout shots taken
pgintegerNot determined; 0 on every 2026 row
plintegerPlus count: on ice for an even-strength or shorthanded goal for
miintegerMinus count: on ice for a goal against
toiintegerTime on ice, seconds
toi_eqintegerEven-strength time on ice, seconds
toippintegerPower-play time on ice, seconds (lower-case pp, unlike the box score's toiPp)
toi_pkintegerShorthanded time on ice, seconds
sogintegerNumber of shots on goal
shmintegerShots that missed the net
shpintegerShots that hit the post
shbintegerOwn shots blocked by an opponent
bksintegerOpponent shots blocked
fowintegerNumber of faceoffs won
folintegerNumber of faceoffs lost
shiintegerNumber of shifts played
gwgkintegerNot determined; 0 on every 2026 row
gwintegerGoaltender wins (incl. overtime and shootout)
glintegerGoaltender losses (incl. overtime and shootout)
fkintegerGames started in goal (inferred: fk <= gp; 42 of 44 for the 2026 games-played leader)
gaintegerGoals against: number of goals conceded
saintegerShots on goal against
svsintegerNumber of saves made by the goaltender
sointegerNumber of shutouts (games without a goal conceded)
mipintegerGoaltender time played, hundredths of a minute (6000 = 60:00; = seconds / 0.6)
assistsintegerAssists (a1 + a2; verified on every 2026 row)
pointsintegerPoints (g + assists; verified)
goal_efficiencynumericShooting percentage, 100 * g / sog (verified); -1 with no shots
save_percentagenumericSave percentage, 0-100
face_offs_percentagenumericFaceoff win percentage, 0-100; -1 with no faceoffs
face_offsintegerFaceoffs taken (fow + fol; verified)
is_captainlogicalWhether the player is the team captain
first_goalkeeperlogicalTeam's first-choice goaltender
ga_per_gamenumericGoals against per game (ga / gp; verified)
points_per_gamenumericPoints per game
svs_per_gamenumericGoaltender saves per game played
bks_per_gamenumericBlocked shots per game
sog_per_gamenumericShots on goal per game
shm_per_gamenumericMissed shots per game
shp_per_gamenumericPost hits per game
fow_per_gamenumericFaceoffs won per game
fol_per_gamenumericFaceoffs lost per game
toi_eq_per_gamenumericEven-strength time on ice per game, seconds
toi_pp_per_gamenumericPower-play time on ice per game, seconds
toi_pk_per_gamenumericShorthanded time on ice per game, seconds
face_offs_per_game_percentagenumericNot determined; 0 on the sampled rows
toi_averagenumericTime on ice per game, seconds
plus_minusintegerPlus/minus (pl - mi; verified)
tgsintegerTeam's total game time, seconds (about 3600 per game incl. overtime)
sepintegerGoaltender time played, seconds
toi_percentagenumericShare of the team's game time in goal, 100 * sep / tgs (verified)
gwitintegerWins in regulation time (gw = gwit + overtime/shootout wins; verified)
glitintegerLosses in regulation time (gl = glit + overtime/shootout losses; verified)
sagintegerShots on goal against that were saved (= svs on every 2026 goaltender row)
sagointegerShots on goal against that went in (= ga on every 2026 goaltender row)
samintegerShots against that missed the net
sapintegerShots against that hit the post
sabintegerShots against that were blocked
saslotintegerSlot shots against
sagoslotintegerSlot shots against that went in
aeqintegerEven-strength assists
appintegerPower-play assists
apkintegerShorthanded assists
haintegerHat tricks (inferred; at most 2 in 2026)
fo2integerMinor (2-minute) penalties
fo5integerMajor (5-minute) penalties
fo10integer10-minute misconducts
gmintegerGame misconducts
mpintegerMatch penalties
pmintegerNot determined; 0 on every 2026 row
pwgintegerNot determined; 0 on every 2026 row
sgointegerNot determined. Equals gff + gfd on every team row; skater values are close to but not always g
fowozintegerOffensive-zone faceoffs won
fownzintegerNeutral-zone faceoffs won
fowdzintegerDefensive-zone faceoffs won
folozintegerOffensive-zone faceoffs lost
folnzintegerNeutral-zone faceoffs lost
foldzintegerDefensive-zone faceoffs lost
psgintegerGoals scored in shootouts
pssvsintegerSaves made in shootouts
gotintegerOvertime goals (a subset of g)
ot_rankintegerOvertime-scoring rank; 0 on the 2026 rows (filled in 2027)
ot_gintegerOvertime goals in the overtime table; 0 on every 2026 row
ot_a1integerOvertime first assists; 0 on every 2026 row
ot_a2integerOvertime second assists; 0 on every 2026 row
ot_toiintegerOvertime time on ice, seconds; 0 on every 2026 row
ot_aintegerOvertime assists; 0 on every 2026 row
ot_pintegerOvertime points; 0 on every 2026 row
psgwgintegerGame-deciding shootout goals; 0 on every 2026 row
sogslotintegerShots on goal from the slot
pswgintegerShootout winners (inferred)
toishinumericTime on ice per shift, seconds
shigpnumericShifts per game
saslotgpnumericSlot shots against per game
samgpnumericMissed shots against per game
sapgpnumericPost hits against per game
svs_pslotnumericSlot save percentage, 100 * (saslot - sagoslot) / saslot
sa_per_gamenumericShots on goal against per game
otwintegerGoaltender overtime or shootout wins
otlintegerGoaltender overtime or shootout losses
fopoznumericOffensive-zone faceoff win percentage, 0-100
fopnznumericNeutral-zone faceoff win percentage, 0-100
fopdznumericDefensive-zone faceoff win percentage, 0-100
fotintegerFaceoffs taken (fow + fol)
fogpnumericFaceoffs taken per game
psmintegerShootout misses (inferred; ps = psg + psm fails for 67 of 447 skaters)
ps_percentagenumericShootout success percentage, 0-100
gw_shutoutintegerNot determined; equals gw on goaltender rows
sogslot_per_gamenumericSlot shots on goal per game
psagintegerShootout goals against (equals ps on goaltender rows)
pssvs_percentagenumericShootout save percentage, 0-100; -1 with no shootout shots faced
show_ranklogicalApp flag: show the row's rank
chfintegerCHF credited for the player's points: 300 * points on every 2026 row (PostFinance youth-fund scheme; inferred)
team_statscharacterPer-team split for a player who changed teams; unobserved: null or empty in every sampled row

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

Example​

nl_player_stats(phase=4940, season=2026)

Last validated n/a.

nl_player_season​

One player's season stats.

Endpoint URL: GET https://www.nationalleague.ch/api/player/{player_id}

Valid URL: https://www.nationalleague.ch/api/player/305519?season=2026&phase=4940

API ParameterPythonPatternRequiredNullableDescription
player_idplayer_idYSIHF licence number (player_id in nl_player_stats; joins the sihf family's player_id), e.g. 305519.
seasonseasonYOmitted = the current season: /player/305519 without it answered 2027 (gp 7; 51 for season=2026). Season END year: 2026 = 2025/26. Diffing 2026 vs 2027 changes every list, and /player/{playerId} gp (51 vs 7), so it scopes. Lists are served for 2019-2027 (the app's season picker, /api/content/metadata seasons) and patchily before: 2012 and 2017 answered, 2010/2014/2015/2016/2018 answered [] (probed 2026-10-12).
phasephaseYSIHF phase id (see x-phase-ids). On /player, omitting it served the regular season (byte-identical to phase=4940); that default is assumed but unverified on this route. Phase ids change every season; whether the metadata ids apply to 2027 is unverified.

Returns​

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

col_nametypedescription
player_idintegerSIHF licence number (Int64; e.g. 305519 = Tobias Geisser). Joins the sihf family's player_id and every SIHF *LicenceNr.
first_namecharacterFirst (given) name of the player
last_namecharacterLast (family) name of the player
team_idintegerSIHF team id (Int64; e.g. 101151 = HC Davos). The same key space as the sihf family's team_id.
team_short_namecharacterTeam abbreviation
team_namecharacterTeam name as the league app displays it
numbercharacterSweater number, a string
positioncharactergoalkeeper, defender or forwarder (sic); one of 502 rows in the full 2026 body has the integer 0
topscorer_pointsintegerPostFinance Top Scorer game score (an app fantasy rating, not on-ice points)
topscorer_point_averagenumericPostFinance Top Scorer game score per game
topscorer_market_valueintegerPostFinance Top Scorer game market value
topscorer_market_value_trendintegerMarket-value trend: 1 up, 0 flat, -1 down
topscorer_amountintegerCHF amount credited to the team's Top Scorer jersey holder (non-zero for 14 players, one per team)
is_topscorerlogicalWears the team's PostFinance Top Scorer jersey (one per team)
nationalitycharacterNationality; unobserved: null or empty in every sampled row
birthcharacterDate of birth, YYYY-MM-DD
heightintegerHeight; unobserved: null or empty in every sampled row
weightintegerWeight; unobserved: null or empty in every sampled row
handcharacterShooting or catching hand; unobserved: null or empty in every sampled row
lcridintegerNot determined (small integer, 0-4 in 2026)
nocintegerNot determined (small integer, 0-2 in 2026)
gpintegerNumber of games played
gintegerNumber of goals scored
a1integerFirst (primary) assists credited
a2integerSecond (secondary) assists credited
penaltiesintegerPenalties taken (upstream fo: fo2 + fo5 + fo10 + gm + mp). Not faceoffs: see face_offs / fot.
pimintegerPenalty minutes
geqintegerEven-strength goals
gppintegerPower-play goals
gpkintegerShorthanded goals
gwgintegerGame-winning goals
psintegerShootout shots taken
pgintegerNot determined; 0 on every 2026 row
plintegerPlus count: on ice for an even-strength or shorthanded goal for
miintegerMinus count: on ice for a goal against
toiintegerTime on ice, seconds
toi_eqintegerEven-strength time on ice, seconds
toippintegerPower-play time on ice, seconds (lower-case pp, unlike the box score's toiPp)
toi_pkintegerShorthanded time on ice, seconds
sogintegerNumber of shots on goal
shmintegerShots that missed the net
shpintegerShots that hit the post
shbintegerOwn shots blocked by an opponent
bksintegerOpponent shots blocked
fowintegerNumber of faceoffs won
folintegerNumber of faceoffs lost
shiintegerNumber of shifts played
gwgkintegerNot determined; 0 on every 2026 row
gwintegerGoaltender wins (incl. overtime and shootout)
glintegerGoaltender losses (incl. overtime and shootout)
fkintegerGames started in goal (inferred: fk <= gp; 42 of 44 for the 2026 games-played leader)
gaintegerGoals against: number of goals conceded
saintegerShots on goal against
svsintegerNumber of saves made by the goaltender
sointegerNumber of shutouts (games without a goal conceded)
mipintegerGoaltender time played, hundredths of a minute (6000 = 60:00; = seconds / 0.6)
assistsintegerAssists (a1 + a2; verified on every 2026 row)
pointsintegerPoints (g + assists; verified)
goal_efficiencynumericShooting percentage, 100 * g / sog (verified); -1 with no shots
save_percentagenumericSave percentage, 0-100
face_offs_percentagenumericFaceoff win percentage, 0-100; -1 with no faceoffs
face_offsintegerFaceoffs taken (fow + fol; verified)
is_captainlogicalWhether the player is the team captain
first_goalkeeperlogicalTeam's first-choice goaltender
ga_per_gamenumericGoals against per game (ga / gp; verified)
points_per_gamenumericPoints per game
svs_per_gamenumericGoaltender saves per game played
bks_per_gamenumericBlocked shots per game
sog_per_gamenumericShots on goal per game
shm_per_gamenumericMissed shots per game
shp_per_gamenumericPost hits per game
fow_per_gamenumericFaceoffs won per game
fol_per_gamenumericFaceoffs lost per game
toi_eq_per_gamenumericEven-strength time on ice per game, seconds
toi_pp_per_gamenumericPower-play time on ice per game, seconds
toi_pk_per_gamenumericShorthanded time on ice per game, seconds
face_offs_per_game_percentagenumericNot determined; 0 on the sampled rows
toi_averagenumericTime on ice per game, seconds
plus_minusintegerPlus/minus (pl - mi; verified)
tgsintegerTeam's total game time, seconds (about 3600 per game incl. overtime)
sepintegerGoaltender time played, seconds
toi_percentagenumericShare of the team's game time in goal, 100 * sep / tgs (verified)
gwitintegerWins in regulation time (gw = gwit + overtime/shootout wins; verified)
glitintegerLosses in regulation time (gl = glit + overtime/shootout losses; verified)
sagintegerShots on goal against that were saved (= svs on every 2026 goaltender row)
sagointegerShots on goal against that went in (= ga on every 2026 goaltender row)
samintegerShots against that missed the net
sapintegerShots against that hit the post
sabintegerShots against that were blocked
saslotintegerSlot shots against
sagoslotintegerSlot shots against that went in
aeqintegerEven-strength assists
appintegerPower-play assists
apkintegerShorthanded assists
haintegerHat tricks (inferred; at most 2 in 2026)
fo2integerMinor (2-minute) penalties
fo5integerMajor (5-minute) penalties
fo10integer10-minute misconducts
gmintegerGame misconducts
mpintegerMatch penalties
pmintegerNot determined; 0 on every 2026 row
pwgintegerNot determined; 0 on every 2026 row
sgointegerNot determined. Equals gff + gfd on every team row; skater values are close to but not always g
fowozintegerOffensive-zone faceoffs won
fownzintegerNeutral-zone faceoffs won
fowdzintegerDefensive-zone faceoffs won
folozintegerOffensive-zone faceoffs lost
folnzintegerNeutral-zone faceoffs lost
foldzintegerDefensive-zone faceoffs lost
psgintegerGoals scored in shootouts
pssvsintegerSaves made in shootouts
gotintegerOvertime goals (a subset of g)
ot_rankintegerOvertime-scoring rank; 0 on the 2026 rows (filled in 2027)
ot_gintegerOvertime goals in the overtime table; 0 on every 2026 row
ot_a1integerOvertime first assists; 0 on every 2026 row
ot_a2integerOvertime second assists; 0 on every 2026 row
ot_toiintegerOvertime time on ice, seconds; 0 on every 2026 row
ot_aintegerOvertime assists; 0 on every 2026 row
ot_pintegerOvertime points; 0 on every 2026 row
psgwgintegerGame-deciding shootout goals; 0 on every 2026 row
sogslotintegerShots on goal from the slot
pswgintegerShootout winners (inferred)
toishinumericTime on ice per shift, seconds
shigpnumericShifts per game
saslotgpnumericSlot shots against per game
samgpnumericMissed shots against per game
sapgpnumericPost hits against per game
svs_pslotnumericSlot save percentage, 100 * (saslot - sagoslot) / saslot
sa_per_gamenumericShots on goal against per game
otwintegerGoaltender overtime or shootout wins
otlintegerGoaltender overtime or shootout losses
fopoznumericOffensive-zone faceoff win percentage, 0-100
fopnznumericNeutral-zone faceoff win percentage, 0-100
fopdznumericDefensive-zone faceoff win percentage, 0-100
fotintegerFaceoffs taken (fow + fol)
fogpnumericFaceoffs taken per game
psmintegerShootout misses (inferred; ps = psg + psm fails for 67 of 447 skaters)
ps_percentagenumericShootout success percentage, 0-100
gw_shutoutintegerNot determined; equals gw on goaltender rows
sogslot_per_gamenumericSlot shots on goal per game
psagintegerShootout goals against (equals ps on goaltender rows)
pssvs_percentagenumericShootout save percentage, 0-100; -1 with no shootout shots faced
show_ranklogicalApp flag: show the row's rank
chfintegerCHF credited for the player's points: 300 * points on every 2026 row (PostFinance youth-fund scheme; inferred)
team_statscharacterPer-team split for a player who changed teams; unobserved: null or empty in every sampled row

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

Example​

nl_player_season(phase=4940, player_id=305519, season=2026)

Last validated n/a.