How often does an NHL goalie go over his saves line?
One row per start with a goalie's saves line, the price, his saves and whether he went over. Connor Hellebuyck went over in 21 of 39 lined starts last season.
Code verified October 19, 2026. One call to get_prop_history, 10 credits.
The call
player_id comes from search_players with position G. Books post saves lines for the expected starter, so a goalie's history covers the games he was lined for.
import requests
import pandas as pd
API_KEY = "YOUR_API_KEY"
resp = requests.post(
"https://mcp.puckapi.com/v1/get_prop_history",
headers={"x-api-key": API_KEY},
json={
"player_id": 8476945,
"market": "player_total_saves",
"from_date": "2025-10-01",
"to_date": "2026-04-20",
"limit": 100,
},
timeout=60,
)
resp.raise_for_status()
data = resp.json()["data"]
games = pd.DataFrame(data["games"])
s = data["summary"]
print(data["player_name"], data["stat"], "|", s["overs"], "overs,", s["unders"], "unders, over rate", s["over_rate"])
print("average line", s["avg_line"], "average actual", s["avg_actual"])
print(games[["game_date", "open_line", "line", "actual", "result"]].tail(6).to_string(index=False))
# Overs and unders at each line the books set: a high line is not always a harder one.
print(games.groupby("line")["result"].value_counts().unstack(fill_value=0))
Replace YOUR_API_KEY with a key from your dashboard. Python needs requests and pandas (pip install requests pandas). JavaScript runs on Node 18 or newer, or in the browser.
Or use the official client: pip install puckapi
What comes back
The data object of the response, trimmed to the first rows. Every field is real output from the run above.
{
"player_id": 8476945,
"player_name": "Connor Hellebuyck",
"market": "player_total_saves",
"stat": "saves",
"bookmaker": null,
"games": [
{
"game_id": "2025020022",
"game_date": "2025-10-11",
"line": 23.5,
"open_line": 23.5,
"over_odds": -123,
"under_odds": -110,
"books": 3,
"actual": 30,
"result": "over",
"margin": 6.5
},
{
"game_id": "2025020084",
"game_date": "2025-10-18",
"line": 23.5,
"open_line": 23.5,
"over_odds": -103,
"under_odds": -130,
"books": 6,
"actual": 30,
"result": "over",
"margin": 6.5
},
{
"game_id": "2025020120",
"game_date": "2025-10-23",
"line": 21.5,
"open_line": 21.5,
"over_odds": -142,
"under_odds": 110,
"books": 6,
"actual": 25,
"result": "over",
"margin": 3.5
},
{
"game_id": "2025020143",
"game_date": "2025-10-26",
"line": 24.5,
"open_line": 24.5,
"over_odds": -110,
"under_odds": -120,
"books": 6,
"actual": 29,
"result": "over",
"margin": 4.5
}
],
"count": 39,
"summary": {
"games": 39,
"graded": 39,
"overs": 21,
"unders": 18,
"pushes": 0,
"over_rate": 0.538,
"avg_line": 23.7,
"avg_actual": 24.5
},
"truncated": false,
"next_from_date": null
}The example player is Connor Hellebuyck. The record against the line, market by market, is on the Connor Hellebuyck prop history page.
What to do next
- get_player_props (10 credits). Every sportsbook's saves line for tonight's starter.
- get_goalie_stats (5 credits). Save percentage and goals saved above expected for the season.
More guides
The same guide for other sports
The latest lines from every book are on the odds board. Today's props, with the best price on each side, are on the player props board. Rather ask Claude? 28 free Claude skills call these endpoints for you.
Start with 500 free credits every month
No card. REST or MCP.