Skip to content

get_situation_time

10 creditsMulti-tablePOST /v1/get_situation_time

Exact seconds each team spent at 5v5, 5v4, 4v5, 6v5 and every other on-ice state in an NHL game, from the shift charts, with a completeness check.

Use it when you need exposure, not events: rates per 60 at 5v5, power-play time, time with the goalie pulled, or a pipeline that pulls every game of a night. One game by game_id, or every game on a date (10 credits per game). NHL games from 2010-11 on.

Parameters

game_idstringoptional
NHL game ID, 10 digits
datestringoptional
Every game on this date, YYYY-MM-DD (instead of game_id)
include_playersbooleanoptional
Add each skater's seconds by strength

Notes

  • Over MCP, ask for it in plain English and the client calls get_situation_time 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_situation_time \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
  "game_id": "2026020084"
}'

Response

json
{
  "games": [
    {
      "game_id": "2026020084",
      "game_date": "2026-10-11",
      "game_type": "regular",
      "home_team": "WSH",
      "away_team": "SEA",
      "teams": [
        {
          "team": "WSH",
          "home_away": "home",
          "states": [
            {
              "strength": "5v5",
              "skaters": 5,
              "opponent_skaters": 5,
              "goalie_in": true,
              "opponent_goalie_in": true,
              "regulation_seconds": 2994,
              "overtime_seconds": 0
            },
            {
              "strength": "4v5",
              "skaters": 4,
              "opponent_skaters": 5,
              "goalie_in": true,
              "opponent_goalie_in": true,
              "regulation_seconds": 240,
              "overtime_seconds": 0
            },
            {
              "strength": "5v4",
              "skaters": 5,
              "opponent_skaters": 4,
              "goalie_in": true,
              "opponent_goalie_in": true,
              "regulation_seconds": 216,
              "overtime_seconds": 0
            }
          ],
          "even_seconds": 3132,
          "power_play_seconds": 228,
          "shorthanded_seconds": 240,
          "goalie_pulled_seconds": 138,
          "opponent_goalie_pulled_seconds": 0
        },
        {
          "team": "SEA",
          "home_away": "away",
          "states": [
            {
              "strength": "5v5",
              "skaters": 5,
              "opponent_skaters": 5,
              "goalie_in": true,
              "opponent_goalie_in": true,
              "regulation_seconds": 2994,
              "overtime_seconds": 0
            },
            {
              "strength": "5v4",
              "skaters": 5,
              "opponent_skaters": 4,
              "goalie_in": true,
              "opponent_goalie_in": true,
              "regulation_seconds": 240,
              "overtime_seconds": 0
            },
            {
              "strength": "4v5",
              "skaters": 4,
              "opponent_skaters": 5,
              "goalie_in": true,
              "opponent_goalie_in": true,
              "regulation_seconds": 216,
              "overtime_seconds": 0
            }
          ],
          "even_seconds": 3132,
          "power_play_seconds": 240,
          "shorthanded_seconds": 228,
          "goalie_pulled_seconds": 0,
          "opponent_goalie_pulled_seconds": 138
        }
      ],
      "periods": [
        {
          "period": 1,
          "length_seconds": 1200,
          "unresolved_seconds": 0
        },
        {
          "period": 2,
          "length_seconds": 1200,
          "unresolved_seconds": 0
        },
        {
          "period": 3,
          "length_seconds": 1200,
          "unresolved_seconds": 0
        }
      ],
      "completeness": {
        "unresolved_seconds": 0,
        "dropped_shifts": 0,
        "regulation_periods_full": true,
        "events_compared": 341,
        "events_agreeing": 341,
        "complete": true
      }
    }
  ],
  "count": 1
}

Response fields

games[].teams[].states[].strengthstring
Skaters v opponent skaters from this team's side, e.g. 5v4, 6v5
games[].teams[].states[].goalie_inboolean
This team's goalie in net (false = pulled)
games[].teams[].states[].opponent_goalie_inboolean
The opponent's goalie in net
games[].teams[].states[].regulation_secondsinteger
Seconds in this state in periods 1 to 3
games[].teams[].states[].overtime_secondsinteger
Seconds in this state in overtime (shootouts excluded)
games[].teams[].even_secondsinteger
Even strength, a pulled goalie's extra attacker counted as even
games[].teams[].power_play_secondsinteger
More skaters than the opponent, extra attackers aside
games[].teams[].shorthanded_secondsinteger
Fewer skaters than the opponent, extra attackers aside
games[].teams[].goalie_pulled_secondsinteger
Seconds with this team's net empty
games[].periods[].length_secondsinteger
How long the period ran, from the shifts
games[].completeness.unresolved_secondsinteger
Seconds the chart shows an impossible state (a missing or mistimed shift); counted in no strength
games[].completeness.events_comparedinteger
Play-by-play events checked against the shifts
games[].completeness.events_agreeinginteger
Events whose recorded strength matches the shifts
games[].completeness.completeboolean
Nothing unresolved, regulation periods 20:00, no dropped shift, 99% or more of events agree
games[].players[].by_strengthobject
With include_players: a skater's seconds by strength

Related endpoints

Try it

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