Skip to content

get_shifts

10 creditsMulti-tablePOST /v1/get_shifts

Every player's shifts in one NHL game, to the second, with the official boxscore time on ice and plus/minus.

Use it when you need who was on the ice and when: line combinations, on-ice events for a player, your own time-on-ice splits, or the raw input to an exposure model. NHL games from 2010-11 on; a chart lands a day or so after the game.

Parameters

game_idstringrequired
NHL game ID, 10 digits (e.g. 2026020084)
teamstringoptional
Only this team's players, e.g. WSH
player_idnumberoptional
Only this player

Notes

  • Over MCP, ask for it in plain English and the client calls get_shifts itself. Point any MCP client at https://mcp.puckapi.com/mcp?key=YOUR_API_KEY.
  • Each call costs 10 credits, taken before it runs and refunded if the server errors.
  • Not the call you need? Find the right call by what you are trying to answer.

Request

curl -X POST https://mcp.puckapi.com/v1/get_shifts \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
  "game_id": "2026020084",
  "player_id": 8471214
}'

Response

json
{
  "game_id": "2026020084",
  "game_date": "2026-10-11",
  "home_team": "WSH",
  "away_team": "SEA",
  "players": [
    {
      "player_id": 8471214,
      "name": "Alex Ovechkin",
      "position": "LW",
      "team": "WSH",
      "home_away": "home",
      "goalie": false,
      "shift_count": 18,
      "shift_seconds": 1016,
      "official_toi_seconds": 1016,
      "plus_minus": 0,
      "shifts": [
        {
          "period": 1,
          "start": "00:57",
          "end": "02:39",
          "start_seconds": 57,
          "end_seconds": 159,
          "duration_seconds": 102
        },
        {
          "period": 1,
          "start": "03:47",
          "end": "04:40",
          "start_seconds": 227,
          "end_seconds": 280,
          "duration_seconds": 53
        }
      ]
    }
  ],
  "count": 1,
  "dropped_shifts": 0
}

Response fields

players[].player_idinteger
NHL player ID
players[].teamstring
Team abbreviation
players[].goalieboolean
True for a goalie (not counted as a skater in any strength)
players[].shift_countinteger
Shifts after merging overlaps
players[].shift_secondsinteger
Seconds on ice by these shifts
players[].official_toi_secondsinteger
The NHL boxscore's time on ice, seconds
players[].plus_minusinteger
The NHL boxscore's plus/minus; null for goalies
players[].shifts[].periodinteger
Period, 4 and up is overtime
players[].shifts[].startstring
Period clock when the shift began, mm:ss elapsed
players[].shifts[].endstring
Period clock when it ended
players[].shifts[].start_secondsinteger
Seconds from the opening faceoff, (period - 1) * 1200 + clock
players[].shifts[].end_secondsinteger
Seconds from the opening faceoff; the shift covers start up to, not including, end
players[].shifts[].duration_secondsinteger
end_seconds - start_seconds
dropped_shiftsinteger
Shifts the NHL listed with no usable start or end, left out

Related endpoints

Try it

500 free credits every month: 50 calls to get_shifts, and no card.