Skip to content

get_prop_backtest

25 creditsTime-seriesPOST /v1/get_prop_backtest

How often a kind of player prop hit against what the market implied, by your filters, since May 2023

Use it when you want to test an idea about props before building anything: how often a kind of prop hit against what the market implied, by season, with the sample size and interval.

Parameters

marketstringrequired
player_points, player_goals, player_assists, player_shots_on_goal, player_blocked_shots, player_total_saves, player_power_play_points or player_goal_scorer_anytime
sideenum: over | underoptional
over (default) or under; anytime goal scorer is over only
from_datestringoptional
First game date, YYYY-MM-DD
to_datestringoptional
Last game date, YYYY-MM-DD
player_idintegeroptional
One player
teamstringoptional
The player's team, e.g. TOR
opponentstringoptional
The team he played
home_awayenum: home | awayoptional
Whether his team was at home
team_roleenum: favorite | underdogoptional
Whether his team was favored, by the books' closing moneylines
line_minnumberoptional
Lowest median closing line
line_maxnumberoptional
Highest median closing line
fair_minnumberoptional
Lowest fair probability of the side, 0 to 1
fair_maxnumberoptional
Highest fair probability of the side, 0 to 1

Notes

  • Over MCP, ask for it in plain English and the client calls get_prop_backtest itself. Point any MCP client at https://mcp.puckapi.com/mcp?key=YOUR_API_KEY.
  • Each call costs 25 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_prop_backtest \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
  "market": "player_shots_on_goal"
}'

Response

json
{
  "market": "player_shots_on_goal",
  "label": "shots on goal",
  "side": "over",
  "filters": {},
  "results": 66642,
  "hits": 32609,
  "misses": 34033,
  "pushes": 0,
  "hit_rate": 0.489,
  "avg_implied_prob": 0.543,
  "avg_fair_prob": 0.507,
  "no_result": 605,
  "no_price": 1,
  "games": 4492,
  "players": 702,
  "avg_line": 2.1,
  "avg_actual": 2.3,
  "hit_rate_minus_implied": -0.054,
  "hit_rate_minus_fair": -0.019,
  "hit_rate_interval_95": [
    0.486,
    0.493
  ],
  "market_inside_interval": false,
  "by_season": [
    {
      "season": "20242025",
      "results": 19866,
      "hit_rate": 0.485
    },
    {
      "season": "20252026",
      "results": 21039,
      "hit_rate": 0.502
    }
  ]
}

Response fields

hit_ratenumber | null
Hits over hits plus misses; a push counts in neither
avg_implied_probnumber | null
The side's average implied probability, margin included
avg_fair_probnumber | null
The side's average fair probability; null when fewer than 90% of results have one
hit_rate_interval_95[number, number] | null
The Wilson 95% interval of the hit rate
market_inside_intervalboolean | null
Whether the market's probability sits inside that interval
by_season[]array
The same counts season by season
cautionstring
What a past result can and cannot tell you

Related endpoints

Try it

500 free credits every month: 20 calls to get_prop_backtest, and no card.