get_prop_backtest
25 creditsMulti-tablePOST /v1/get_prop_backtest
How often a kind of player prop hit against what the market implied, by your filters, since 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_pass_yds | player_pass_tds | player_pass_completions | player_pass_attempts | player_pass_interceptions | player_rush_yds | player_rush_attempts | player_receptions | player_reception_yds | player_anytime_td | player_tds_overrequired- The market, e.g. player_reception_yds.
sideenum: over | underoptional- over (default) or under. Yes/no markets such as player_anytime_td have only over.
from_seasonintegeroptional- First season, 2023 or later. Default all held.
to_seasonintegeroptional- Last season. Default all held.
game_typeenum: regular | postseasonoptional- Default both.
week_minintegeroptional- First week of the season.
week_maxintegeroptional- Last week of the season.
player_idstringoptional- One player's GSIS id (from search_players).
teamstringoptional- The player's team, e.g. KC.
opponentstringoptional- The team he played, e.g. BUF.
positionstringoptional- The player's position, e.g. QB, RB, WR, TE.
home_awayenum: home | awayoptional- Whether his team was at home.
team_roleenum: favorite | underdogoptional- Whether his team was favored, by the consensus closing spread.
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.
Notes
- Over MCP, ask for it in plain English and the client calls
get_prop_backtestitself. Point any MCP client athttps://mcp.endzoneapi.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.endzoneapi.com/v1/get_prop_backtest \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"market": "player_reception_yds",
"side": "over",
"position": "TE",
"home_away": "home",
"team_role": "underdog",
"from_season": 2023
}'Response
json
{
"market": "player_reception_yds",
"label": "receiving yards",
"side": "over",
"filters": {
"from_season": 2023,
"position": "TE",
"home_away": "home",
"team_role": "underdog"
},
"results": 538,
"hits": 272,
"misses": 266,
"pushes": 0,
"hit_rate": 0.506,
"avg_implied_prob": 0.533,
"avg_fair_prob": 0.501,
"no_result": 0,
"no_price": 0,
"games": 375,
"players": 93,
"avg_books": 3.8,
"avg_line": 26.5,
"avg_actual": 30.6,
"hit_rate_minus_implied": -0.027,
"hit_rate_minus_fair": 0.005,
"hit_rate_interval_95": [
0.463,
0.548
],
"market_inside_interval": true,
"by_season": [
{
"season": 2023,
"results": 131,
"hits": 74,
"misses": 57,
"pushes": 0,
"hit_rate": 0.565,
"avg_implied_prob": 0.533,
"avg_fair_prob": 0.5
},
{
"season": 2024,
"results": 145,
"hits": 78,
"misses": 67,
"pushes": 0,
"hit_rate": 0.538,
"avg_implied_prob": 0.534,
"avg_fair_prob": 0.501
},
{
"season": 2025,
"results": 194,
"hits": 89,
"misses": 105,
"pushes": 0,
"hit_rate": 0.459,
"avg_implied_prob": 0.533,
"avg_fair_prob": 0.502
}
],
"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 stat line for the game, no_price those with no price on this side. 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_seasonnumberfilters.positionstringfilters.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.
All 32 teams with conference, division, colours, and logos
search_players2 cr
Returns the player_id this one takes.
Find players by name, team, or position
get_injuries2 cr
Returns the player_id this one takes.
Injury report by team and week with practice and game status
get_team_stats5 cr
Returns the team this one takes.
Team totals and per-week lines with EPA, success rate, and situational splits
Try it
500 free credits every month: 20 calls to get_prop_backtest, and no card.