get_prop_backtest
25 creditsBacktestsPOST /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
marketenum: player_points | player_rebounds | player_assists | player_threes | player_points_rebounds_assists | player_blocks | player_steals | player_points_rebounds | player_points_assists | player_rebounds_assists | player_double_double | player_triple_doublerequired- The market, e.g. player_points.
sideenum: over | underoptional- over (default) or under. Yes/no markets are graded on the yes price: over only.
from_datestringoptional- First game date, YYYY-MM-DD. Default all held.
to_datestringoptional- Last game date, YYYY-MM-DD. Default all held.
player_idstringoptional- One player's id (e.g. 3945274, from search_players).
teamstringoptional- The player's team, e.g. BOS.
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 to include.
line_maxnumberoptional- Highest median closing line to include.
fair_minnumberoptional- Lowest fair probability of this side to include, 0 to 1.
fair_maxnumberoptional- Highest fair probability of this side to include, 0 to 1.
leagueenum: nba | wnba | ncaamoptional- League. Defaults to nba. One of: nba, wnba, ncaam.
Notes
- Over MCP, ask for it in plain English and the client calls
get_prop_backtestitself. Point any MCP client athttps://mcp.dunkapi.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.dunkapi.com/v1/get_prop_backtest \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"market": "player_points",
"side": "over",
"home_away": "away",
"team_role": "underdog",
"from_date": "2024-10-01"
}'Response
json
{
"market": "player_points",
"label": "points",
"side": "over",
"filters": {
"from_date": "2024-10-01",
"home_away": "away",
"team_role": "underdog"
},
"results": 12372,
"hits": 6017,
"misses": 6355,
"pushes": 0,
"hit_rate": 0.486,
"avg_implied_prob": 0.531,
"avg_fair_prob": 0.498,
"no_result": 337,
"no_price": 0,
"games": 1651,
"players": 529,
"avg_books": 5,
"avg_line": 12.6,
"avg_actual": 12.8,
"hit_rate_minus_implied": -0.045,
"hit_rate_minus_fair": -0.012,
"hit_rate_interval_95": [
0.478,
0.495
],
"market_inside_interval": false,
"by_season": [
{
"season": 2025,
"results": 5913,
"hits": 2895,
"misses": 3018,
"pushes": 0,
"hit_rate": 0.49,
"avg_implied_prob": 0.531,
"avg_fair_prob": 0.498
},
{
"season": 2026,
"results": 5880,
"hits": 2840,
"misses": 3040,
"pushes": 0,
"hit_rate": 0.483,
"avg_implied_prob": 0.531,
"avg_fair_prob": 0.498
},
{
"season": 2027,
"results": 579,
"hits": 282,
"misses": 297,
"pushes": 0,
"hit_rate": 0.487,
"avg_implied_prob": 0.531,
"avg_fair_prob": 0.499
}
],
"method": "One result per player per game: the closing line is the median across books, the market's probability comes from the books at that line, and a push counts in neither the hits nor the rate. no_result counts players with no result for the game (not played, or no stat line of ours), no_price those with no price on this side. team_role is by the books' closing moneylines. avg_implied_prob averages each book's implied probability, margin included. fair_prob takes the margin out of each book's two prices for the same line, proportionally, then averages. Only identical lines are combined.",
"caution": "A past result is not a forecast. Trying many filters will turn up some that beat the market by luck, so check by_season and the interval. Not a recommendation."
}Response fields
marketstringlabelstringsidestringfiltersobjectfilters.from_datestringfilters.home_awaystringfilters.team_rolestringresultsnumberhitsnumbermissesnumberpushesnumberhit_ratenumberavg_implied_probnumberavg_fair_probnumberno_resultnumberno_pricenumbergamesnumberplayersnumberavg_booksnumberavg_linenumberavg_actualnumberhit_rate_minus_impliednumberhit_rate_minus_fairnumberhit_rate_interval_95[]array- List of number
market_inside_intervalbooleanby_season[]array- List of objects
by_season[].seasonnumberby_season[].resultsnumberby_season[].hitsnumberby_season[].missesnumberby_season[].pushesnumberby_season[].hit_ratenumberby_season[].avg_implied_probnumberby_season[].avg_fair_probnumbermethodstringcautionstring
Related endpoints
list_teams1 cr
Returns the team this one takes.
Team ids, abbreviations and colours for a season
search_players1 cr
Returns the player_id this one takes.
Find players by name
list_games2 cr
Returns the team this one takes.
Games with scores by season, date, range or team
get_player5 cr
Returns the player_id this one takes.
Profile, per-season averages and shooting splits, last 10 games
Try it
500 free credits every month: 20 calls to get_prop_backtest, and no card.