Skip to content

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_backtest itself. Point any MCP client at https://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

marketstring
labelstring
sidestring
filtersobject
filters.from_seasonnumber
filters.positionstring
filters.home_awaystring
filters.team_rolestring
resultsnumber
hitsnumber
missesnumber
pushesnumber
hit_ratenumber
avg_implied_probnumber
avg_fair_probnumber
no_resultnumber
no_pricenumber
gamesnumber
playersnumber
avg_booksnumber
avg_linenumber
avg_actualnumber
hit_rate_minus_impliednumber
hit_rate_minus_fairnumber
hit_rate_interval_95[]array
List of number
market_inside_intervalboolean
by_season[]array
List of objects
by_season[].seasonnumber
by_season[].resultsnumber
by_season[].hitsnumber
by_season[].missesnumber
by_season[].pushesnumber
by_season[].hit_ratenumber
by_season[].avg_implied_probnumber
by_season[].avg_fair_probnumber
methodstring
cautionstring

Related endpoints

Try it

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