Skip to content

Guides

How often does an NFL quarterback go over his passing yards line?

One row per game with a quarterback's closing and opening yards line, the price, what he threw for and whether he went over. Josh Allen went over in 10 of 18.

Code verified October 12, 2026. One call to get_prop_history, 10 credits.

The call

player_id is a GSIS id from search_players. Pass bookmaker for one book's close instead of the median across books. Other markets include passing touchdowns, completions, rushing and receiving yards, receptions and anytime touchdown.

import requests
import pandas as pd

API_KEY = "YOUR_API_KEY"

resp = requests.post(
    "https://mcp.endzoneapi.com/v1/get_prop_history",
    headers={"x-api-key": API_KEY},
    json={
        "player_id": "00-0034857",
        "market": "player_pass_yds",
        "from_date": "2025-09-01",
        "to_date": "2026-02-28",
    },
    timeout=60,
)
resp.raise_for_status()
data = resp.json()["data"]

games = pd.DataFrame(data["games"])
games["line_move"] = games["line"] - games["open_line"]
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))
print("mean miss vs open:", round((games["actual"] - games["open_line"]).abs().mean(), 1))
print("mean miss vs close:", round((games["actual"] - games["line"]).abs().mean(), 1))
print(games.groupby(games["line_move"].apply(lambda m: "up" if m > 0 else "down" if m < 0 else "flat"))["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.

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": "00-0034857",
  "player_name": "Josh Allen",
  "market": "player_pass_yds",
  "stat": "passing yards",
  "bookmaker": null,
  "games": [
    {
      "game_id": "2025_01_BAL_BUF",
      "game_date": "2025-09-07",
      "line": 229.5,
      "open_line": 230.5,
      "over_odds": -114,
      "under_odds": -114,
      "books": 7,
      "actual": 394,
      "result": "over",
      "margin": 164.5
    },
    {
      "game_id": "2025_02_BUF_NYJ",
      "game_date": "2025-09-14",
      "line": 234.5,
      "open_line": 233.5,
      "over_odds": -115,
      "under_odds": -112,
      "books": 7,
      "actual": 148,
      "result": "under",
      "margin": -86.5
    },
    {
      "game_id": "2025_03_MIA_BUF",
      "game_date": "2025-09-18",
      "line": 238.5,
      "open_line": 234.5,
      "over_odds": -112,
      "under_odds": -112,
      "books": 7,
      "actual": 213,
      "result": "under",
      "margin": -25.5
    },
    "...15 more"
  ],
  "count": 18,
  "summary": {
    "games": 18,
    "graded": 18,
    "overs": 10,
    "unders": 8,
    "pushes": 0,
    "over_rate": 0.556,
    "avg_line": 225,
    "avg_actual": 234.7
  },
  "truncated": false,
  "next_from_date": null
}

What to do next

  • get_player_props (10 credits). Every sportsbook's line and prices for the same player in one game.
  • get_player_stats (5 credits). The player's weekly stats behind the numbers the line was set against.

More guides

Start with 500 free credits every month

No card. REST or MCP.