NHL API – Coach's Challenge Support
We've added support for coach challenges in the NHL API.
Beginning this season, a challenge_info object is present when a challenge is initiated. It appears in the Game Play-by-Play endpoint on events with event_type="challenge". This object includes:
reason_description– Text description of the reason for a challenge (ex.Interference on goalie)outcome_description– Text description of the outcome of a challenge (ex.Goal overturned)outcome– Outcome of a challenge (ex.call_overturned)decision– Resulting decision of a challenge (ex.no_goal)name&idof the team initiating the challenge and receiving the challenge (underinitiated_byandagainst_teamrespectively)
All
challenge_infofields are string values, not enumerated types. There is no fixed set of valid values, so avoid hardcoding logic against specific strings — even fields that look machine-readable (such asoutcomeanddecision) are free-text and may change. Display them as provided rather than matching them against an expected list.
⭐ Benefit
Surface coach's challenges in your play-by-play, including who challenged, the reason, and how the original call was resolved.
📋 Recommended Actions
- Parse the
challenge_infoobject from thechallengeevent type in your Game Play-by-Play (and Push) integration. - Treat all
challenge_infofields as free-text strings — display them as provided rather than matching against a fixed set of expected values. - Use
initiated_byandagainst_teamto show which team challenged and which was challenged. - Handle the object's absence on events that do not involve a challenge.
☑️ Sample Requests:
Game Play-by-Play
curl --request GET \
--url https://api.sportradar.com/nhl/trial/v7/en/games/81fb1a0f-a8f8-427c-8bcb-35c9ef4874b9/pbp.json \
--header 'accept: application/json' \
--header 'x-api-key: YOUR_API_KEY'🔢 Products
| Sport | Product | Version(s) |
|---|---|---|
| Ice Hockey | NHL API | v7 |
🔁 Endpoints Affected
⚙️ Return Samples
<event id="9791736d-1dd3-4e4c-8c3a-a2c38eab3e5b" clock="3:22" official="true" updated="2026-07-22T17:14:58+00:00" wall_clock="2025-12-19T01:32:17+00:00" clock_decimal="3:22" sequence="1766107937895" home_points="1" away_points="1" event_type="challenge">
<description>Blackhawks challenge (Offside), call reversed</description>
<attribution id="4416272f-0f24-11e2-8525-18a905767e44" name="Blackhawks" market="Chicago" team_goal="right" sr_id="sr:team:3681" reference="16"/>
<challenge_info reason_description="Offside" outcome_description="Goal overturned" outcome="call_overturned" decision="no_goal">
<initiated_by id="4416272f-0f24-11e2-8525-18a905767e44" name="Blackhawks"/>
<against_team id="441713b7-0f24-11e2-8525-18a905767e44" name="Canadiens"/>
</challenge_info>
...{
"id": "9b43afd6-5a17-44c9-8afe-4abf91a7dc45",
"clock": "15:53",
"official": true,
"updated": "2026-07-22T17:14:18+00:00",
"wall_clock": "2025-12-19T00:12:32+00:00",
"description": "Canadiens challenge (Interference on goalie), call reversed",
"clock_decimal": "15:53",
"sequence": 1766103152703,
"home_points": 0,
"away_points": 0,
"event_type": "challenge",
"attribution": {
"id": "441713b7-0f24-11e2-8525-18a905767e44",
"name": "Canadiens",
"market": "Montreal",
"team_goal": "right",
"sr_id": "sr:team:3690",
"reference": "8"
},
"challenge_info": {
"reason_description": "Interference on goalie",
"outcome_description": "Goal overturned",
"outcome": "call_overturned",
"decision": "no_goal",
"initiated_by": {
"id": "441713b7-0f24-11e2-8525-18a905767e44",
"name": "Canadiens"
},
"against_team": {
"id": "4416272f-0f24-11e2-8525-18a905767e44",
"name": "Blackhawks"
}
},
...