Ice Hockey


Sports API Hub imports ice hockey data automatically – scores, standings, play-by-play and, in the leagues that send them, box scores and player stats. The NHL gets full box scores. The KHL, SHL, Liiga and four more competitions get basic player stats. 150+ other leagues get scores, standings and play-by-play. This page shows what each league gives you and walks through setting up a hockey site.

NHL game page with a Final/OT status, an OT column in the linescore, the Three Stars and the Forwards box score table

🏒 What You Get, League by League

What you can show depends on the league, because the sports API doesn’t send the same data for every competition.

Checked on 2026-10-09, on two finished 2025/26 games per league. Coverage is set by the sports API, not by the plugin, and it can change from one season to the next.

What you getLeaguesPlayer stats
Full box scoresNHLSkaters: goals, assists, points, +/-, penalty minutes, shots, hits, blocks, faceoffs, time on ice, power play and short-handed splits. Goalies: shots against, saves, goals against, save %, decision
Basic player statsKHL, SHL, Liiga, Czech Extraliga, Slovak Tipsport Liga (regular season only), Champions Hockey League, OlympicsSkaters: goals, assists, points, +/-, penalty minutes, shots. Goalies: saves. No time on ice, hits or faceoffs
Basic skater stats, no goalie statsIIHF World ChampionshipSkaters: goals, assists, points, +/-, penalty minutes, shots. The API sends no goalie saves, so goalie sections stay hidden
Rosters, scores, standings and play-by-playDEL, Swiss National LeagueNone – the API sends the team rosters, but with no stats in them
Scores, standings and play-by-playEverything else: AHL, ECHL, PWHL, OHL, WHL, QMJHL, NCAA, Swiss League, Polish Hokej Liga, the European second divisions (HockeyAllsvenskan, DEL2, Mestis, VHL and more), ICE Hockey League, Ligue Magnus, UK Elite League and othersNone

Every league in the table gets scores, standings, the play-by-play timeline and live scores. Team game stats (shots, power play, penalty minutes and so on) appear where the league sends them, and the NHL sends the most.

We also tried every other route the API offers for player stats in the leagues that don’t have them. For current seasons there isn’t one: its European season totals stop at 2022/23.

Check a League Before You Import It

On API & Import > Import, the Player Stats icon in each season’s Data column tells you what you’ll get: green = Full, amber = Basic, grey = No (or “No (rosters only)” for leagues like the DEL). Hover over the icons to see the details.

Import page with three hockey seasons: NHL with a green Player Stats icon, KHL with an amber one for basic stats and DEL with a grey one for rosters only

🚀 Setting Up Your Site

  1. Install and activate Sports API Hub – see the Installation guide.
  2. Add your API key and tick Ice Hockey in API & Import > API Config – see the API Setup guide. Ice hockey comes through the AllSportsAPI2 provider.
  3. Import a league. From Discover, pick a league (NHL, KHL, SHL…) and a season, then run the import tasks in order – see the First Import guide.
  4. Add a shortcode or use a permalink page to show games, standings or a team – see Shortcodes. Hockey pages live under /ice-hockey/ by default.

A full NHL regular season is 1,312 games, plus the playoffs, so it’s one of the bigger imports. You don’t need to touch it again after that – the plugin keeps scores, box scores and standings current on its own.

Updating from an earlier version? Version 1.3.8 adds the two hockey stats tables and default layouts for hockey game, player, team and season pages by itself.

What’s on the Pages

Game pages

  • Box score split into Forwards, Defense and Goalies, with the Three Stars above it in the NHL. It only shows the columns the league fills, so a KHL box score reads G, A, P, +/-, PIM and SOG for skaters and SV, GA, SV% and decision for goalies, instead of a row of zeroes.
  • Linescore with OT and SO columns, and the status reads Final/OT or Final/SO.
  • Timeline with penalties, their length and infraction (“2 min Tripping”), short-handed and empty-net goal badges, and the shootout paired into rounds with a running tally.
  • Team stats: shots, power play goals and chances, power play % and penalty kill %, faceoff %, hits, blocks, penalty minutes, takeaways and giveaways (where the league sends them).
  • Key Players, Leaders and Stats Comparison all have a hockey version.
  • Odds: moneyline and total goals.
Game timeline with a 2 min Tripping penalty, a power play goal badge and the shootout paired into rounds with a running tally

Player pages

  • Skaters and goalies each get their own stats. Goalies get W-L-OTL, SV%, GAA and shutouts.
  • The columns follow what the league tracks. A player with NHL and KHL seasons sees the full set, with “-” on their KHL rows in the columns the KHL doesn’t send, rather than a 0 that would read as real.
  • In the basic-stats leagues, goalie goals against is worked out from the final score, so SV% carries a short note there and GAA isn’t shown.
Goalie Career Stats table for a KHL goalie with two seasons and a career row, showing only the columns the league sends, with the SV% note below

Team and season pages

  • Records read W-L-OTL everywhere, NHL style with the zero shown (5-2-0). An overtime loss in the playoffs counts as a plain L, as it does in official NHL playoff records.
  • An OT or SO loss shows as a neutral OT dot in Recent Form, not a red L.
  • In standings, L means regulation losses. The RW, OTW, SOW and SOL columns appear where the league sends them (the KHL does, the NHL doesn’t).
  • Goalie rate leaders and rankings only count goalies who’ve played at least half as many games as the busiest goalie in the season. That stops a goalie with a 1.000 save % over 3 games from topping the list early on. Skater leaders leave goalies out.
  • KHL and IIHF World Championship seasons get Regular Season / Playoffs buttons. The KHL doesn’t tag its playoff games, so the plugin works it out from the playoff series data.
  • Team shooting % only appears where the API splits goals by strength, which today means the NHL.
KHL season standings with GP, W, L, OTL and points plus the RW, OTW, SOW and SOL columns

AI Writer

Game reviews and previews written by the AI Writer get the hockey context: team and player stats (skaters and goalies), key players, W-L-OTL records, penalties with their infraction, shootout attempts, and each goal’s type (power play, short-handed, empty net) with its assists.

Note

Hockey odds are moneyline and total goals. There’s no puck line, because the sports API didn’t offer one on any of the 6 NHL games we checked. Odds come per game only – the bulk odds fetch isn’t available for hockey.

Live Scores on Game Day

Once a season is imported, game pages and the calendar and scoreboard shortcodes update while games are in progress, without reloading the page:

  • The status shows the period and the clock (“P2 15:00”).
  • Overtime gets its own clock – five minutes in the regular season, twenty in the playoffs.
  • Between periods it reads Intermission, and during a shootout SO.
  • Box scores update during the game in the leagues that send player stats.

See Live Scores for how this works and how to tune the polling interval.

Overtime and shootout finals take a little longer to settle. Right after the final horn, the sports API sometimes still reports a tied score for a game that went to overtime or a shootout, and in one case the winning goal arrived 48 minutes later. So the plugin waits for the score to settle before it stores the result, and fetches every overtime and shootout game once more 6 to 30 hours after the start. That last pass also picks up box score numbers the API fills in late.

🆘 Troubleshooting

A DEL or Swiss National League game shows scores, standings and the timeline but no box score. Expected. Those leagues send team rosters with no stats in them, so the box score, leaders and Key Players blocks stay hidden.

An AHL, ECHL, PWHL, OHL, WHL, QMJHL or NCAA game has no player stats. Also expected – the API doesn’t send player stats for these leagues. Scores, standings and play-by-play work.

A KHL (or SHL, Liiga…) box score has fewer columns than the NHL one. Those leagues send goals, assists, points, +/-, penalty minutes, shots and goalie saves only. There’s no time on ice, hits or faceoffs to show, so those columns are left out.

A KHL goalie has no GAA, and SV% has a note next to it. GAA needs time on ice, which the basic-stats leagues don’t send. SV% is still shown, but goals against is worked out from the final score, which is what the note says.

IIHF World Championship pages have no goalie section. The API sends no goalie saves for that competition, so goalie tables and goalie leaders stay hidden. Skater stats still show.

The L column in standings is lower than the API’s loss count. That’s on purpose. The API’s loss count includes overtime and shootout losses, which already sit in the OTL column. L here is regulation losses only, so no game is counted twice.

A game that just went to overtime or a shootout still shows a tied score, or isn’t final yet. Give it a little time. The plugin waits for the API to settle the score, and checks every overtime and shootout game once more 6 to 30 hours after the start.

A DEL goal has no clock time in the timeline. The DEL only sends the minute a goal was scored in, not the exact second. The timeline leaves the clock blank rather than make one up, and the flow chart places the goal at the start of that minute.

📚 Related