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_timeitself. Point any MCP client athttps://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
{
"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
Returns the game_id this one takes.
Upcoming games for the next N days. Defaults to 7 days.
Returns the game_id this one takes.
Query games by date range, team, season, game state, or type.
Filters by the same game_id.
Play-by-play events with rink coordinates, strength state, and the players involved.
Filters by the same game_id.
Every shot attempt with rink coordinates, shot type, shooter and goalie.
Try it
500 free credits every month: 50 calls to get_situation_time, and no card.