Documentation
Everything you need to connect and query 17 football data endpoints.
Getting started
Authentication
Every request requires an API key. Pass it via header or query parameter:
x-api-key: YOUR_API_KEY
# or
Authorization: Bearer YOUR_API_KEY
# or (MCP only)
?key=YOUR_API_KEYVerify your email, then create an API key from the dashboard. Free accounts get 500 credits.
Base URL
https://football-mcp-production.up.railway.appREST API — POST /v1/{tool} with JSON body. Works with cURL, Python, any HTTP client.
MCP — POST /mcp via Streamable HTTP. Works with Claude Desktop, Claude Code, Cursor, and any MCP client.
Rate limits
| Credit balance | Rate limit |
|---|---|
| 100 credits or more | 60 req/min |
| Under 100 credits | 10 req/min |
The limit is the same on every plan. It is burst protection, not the spend boundary; credits are that, and they are enforced per request. Running low slows you down so you notice before the balance reaches zero.
Error handling
| Code | Meaning | What to do |
|---|---|---|
| 400 | Invalid parameters | Check required fields and value types |
| 401 | Invalid or missing API key | Check your x-api-key header |
| 402 | Insufficient credits | Top up your wallet or upgrade your plan |
| 429 | Rate limit exceeded | Wait and retry (see limits above) |
| 500 | Server error | Retry with idempotency key. Credits auto-refund on server errors. |
Pass x-idempotency-key or x-request-id headers to make retries duplicate-safe.
Data coverage
| Data | Status | Coverage | Volume |
|---|---|---|---|
Games and schedules Scores, kickoff (UTC), venue, surface, weather, rest days, starting QBs, coaches, referee, and the consensus closing spread, total, and moneylines. | Available | 1999 to current | 7,500+ games |
Standings Computed from final scores: record, points, home/away/division/conference splits, streak, division rank, and conference playoff seed. Ranks apply the NFL tiebreaking procedure and report which step decided each position; conference_rank is the playoff seed, so division winners hold seeds 1-4. Net touchdowns and the coin toss, the ladder's last two steps, are not applied. | Available | 1999 to current | 32 rows per season |
Weekly player stats 150 nflverse columns per player-week: passing, rushing, receiving, defense, kicking, punting, returns, fantasy points. | Available | 1999 to current | 470,000+ stat lines |
Weekly team stats The same stat set aggregated per team and game, plus EPA and success. | Available | 1999 to current | 14,000+ team-weeks |
Play-by-play 160 nflfastR columns per play: situation, result, EPA, WPA, win probability, CPOE, xPass, players involved, drive context. | Available | 1999 to current | 1,200,000+ plays |
Injury reports Official weekly report: game status and practice participation with the injury named. | Available | 2009 to current | 5,000+ rows per season |
Depth charts Weekly depth chart per team, formation, position, and rank. 2025 onwards is a daily source; the last snapshot before each week's kickoff is kept. | Available | 2001 to current | 32,000+ rows per season |
Snap counts Offensive, defensive, and special-teams snaps and shares per player per game. Keyed by PFR player id. | Available | 2012 to current | 23,000+ rows per season |
Odds and line movement Moneyline, spread, and total per bookmaker with opening, closing, and hourly history. Per-bookmaker history begins with the 2026 season. | Partial | Consensus closing lines 1999 to current; per-book snapshots from 2026 | Hourly snapshots in-season |
Next Gen Stats and PFR advanced Tracking and charting metrics the box score does not carry: time to throw, air yards, completion percentage above expectation, separation, cushion, rush yards over expected, plus pressures, hurries, blitzes, drops, bad throws, missed tackles, and coverage yards allowed. NGS rows key on GSIS player id, PFR rows on PFR id; week 0 on an NGS row is that season's aggregate. | Available | NGS 2016 to current, PFR 2018 to current | 149,000+ player-weeks |
FTN charting Manual play charting on top of play-by-play: starting hash, quarterback alignment, backfield and box counts, pre-snap motion, play action, screens, run-pass options, blitzer and pass-rusher counts, throwaways, contested balls, and drops. Reached through get_plays with include_charting, or by filtering on a charting flag. Non-scrimmage plays are charted as 0 rather than left empty. | Available | 2022 to current | 187,000+ charted plays |
Coverage describes the datasets EndzoneAPI supports. Freshness and operational health are tracked separately.
Odds snapshot definitions
opening — Game-day morning lines, captured at ~12:00 UTC (~7-8am ET). Represents the odds available on the morning of the game.
closing — Final pre-game lines, captured at ~23:00 UTC. For evening games, this is the last available line before or shortly after puck drop.
Odds coverage currently documents DraftKings, FanDuel, BetMGM, Caesars, ESPN BET. Per-bookmaker snapshots start with the 2026 season; earlier games carry the consensus closing line only. Games before the 2019-20 season return no odds data.
Response format
REST API
All successful REST responses wrap the result in a data key:
{ "data": { "teams": [...], "count": 32 } }Error responses return:
{ "error": "Insufficient credits", "message": "This tool costs 5 credits, you have 2" }MCP Protocol
MCP responses follow the standard MCP tool result format. The data is returned directly (no data wrapper). Both access methods return identical data, just different envelopes.
Conventions
Seasons — 4-digit season year, the year the regular season starts (2025 for the 2025-26 season). Example: 2025.
Game IDs — season_week_away_home, e.g. 2025_01_KC_BUF (season_week_away_home). Get them from get_games or get_schedule.
Team abbreviations — Standard codes (KC, BUF, PHI, SF). Use list_teams if unsure.
Pagination — Endpoints use a limit parameter. No cursor or offset. Narrow your filters to get different slices of data.
Credits — Deducted before the request executes. Automatically refunded on server errors. Monthly credits are used first, then wallet balance.
Setup
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"endzoneapi": {
"url": "https://football-mcp-production.up.railway.app/mcp?key=YOUR_API_KEY"
}
}
}Claude Code
One command:
claude mcp add endzoneapi https://football-mcp-production.up.railway.app/mcp?key=YOUR_API_KEY --transport streamable-httpREST / cURL
POST to /v1/{tool_name} with your params as JSON body. No MCP client needed:
curl -X POST https://football-mcp-production.up.railway.app/v1/list_teams \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY"With parameters:
curl -X POST https://football-mcp-production.up.railway.app/v1/get_standings \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"season": "20242025"}'Which endpoint should I use?
Start from what you want to do, not the API path.
Endpoint reference
17 endpoints grouped by credit cost. Each includes parameters, example requests in three formats, and documented response fields.
Static reference
1 credit/calllist_teams
1 creditAll 32 teams with conference, division, colours, and logos
When to use: You need team codes for other endpoints, or conference/division groupings, colours and logo URLs for a UI.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| conference | enum: AFC | NFC | optional | Filter by conference |
| division | string | optional | Filter by division, e.g. 'AFC East' or 'NFC West' |
Example request
{
"tool": "list_teams",
"arguments": {
"division": "AFC West"
}
}Example response
{
"teams": [
{
"abbrev": "DEN",
"name": "Denver Broncos",
"nick": "Broncos",
"conference": "AFC",
"division": "AFC West",
"color": "#002244",
"color2": "#FB4F14",
"logo": "https://a.espncdn.com/i/teamlogos/nfl/500/den.png",
"wordmark": "https://github.com/nflverse/nflverse-pbp/raw/master/wordmarks/DEN.png"
},
{
"abbrev": "KC",
"name": "Kansas City Chiefs",
"nick": "Chiefs",
"conference": "AFC",
"division": "AFC West",
"color": "#E31837",
"color2": "#FFB612",
"logo": "https://a.espncdn.com/i/teamlogos/nfl/500/kc.png",
"wordmark": "https://github.com/nflverse/nflverse-pbp/raw/master/wordmarks/KC.png"
},
{
"abbrev": "LV",
"name": "Las Vegas Raiders",
"nick": "Raiders",
"conference": "AFC",
"division": "AFC West",
"color": "#000000",
"color2": "#A5ACAF",
"logo": "https://a.espncdn.com/i/teamlogos/nfl/500/lv.png",
"wordmark": "https://github.com/nflverse/nflverse-pbp/raw/master/wordmarks/LV.png"
}
],
"count": 4
}Response fields
| Field | Type | Description |
|---|---|---|
| teams[] | array | List of objects |
| teams[].abbrev | string | |
| teams[].name | string | |
| teams[].nick | string | |
| teams[].conference | string | |
| teams[].division | string | |
| teams[].color | string | |
| teams[].color2 | string | |
| teams[].logo | string | |
| teams[].wordmark | string | |
| count | number |
Basic lookup
2 credits/callget_standings
2 creditsStandings and playoff seeding by the NFL tiebreaking procedure, with the step that decided each rank
When to use: You want records, points for/against, streaks, and division or conference rank for a season. Computed from final scores, so it is current the moment a game goes final.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| season | string | number | optional | Season year the regular season starts (e.g. 2025). Defaults to current. |
| conference | enum: AFC | NFC | optional | Filter by conference |
| division | string | optional | Filter by division, e.g. 'NFC North' |
Example request
{
"tool": "get_standings",
"arguments": {
"season": 2025,
"division": "AFC West"
}
}Example response
{
"season": 2025,
"standings": [
{
"team": "DEN",
"name": "Denver Broncos",
"conference": "AFC",
"division": "AFC West",
"division_rank": 1,
"conference_rank": 1,
"division_tiebreaker": "record",
"conference_tiebreaker": "common games",
"wins": 14,
"losses": 3,
"ties": 0,
"win_pct": 0.8235294,
"games_played": 17,
"points_for": 401,
"points_against": 311,
"point_diff": 90,
"home": "8-1",
"away": "6-2",
"division_record": "5-1",
"conference_record": "9-3",
"streak": "W2",
"updated_at": "2026-09-17T23:13:47.596Z"
},
{
"team": "LAC",
"name": "Los Angeles Chargers",
"conference": "AFC",
"division": "AFC West",
"division_rank": 2,
"conference_rank": 7,
"division_tiebreaker": "record",
"conference_tiebreaker": "record",
"wins": 11,
"losses": 6,
"ties": 0,
"win_pct": 0.64705884,
"games_played": 17,
"points_for": 368,
"points_against": 340,
"point_diff": 28,
"home": "6-3",
"away": "5-3",
"division_record": "5-1",
"conference_record": "8-4",
"streak": "L2",
"updated_at": "2026-09-17T23:13:47.596Z"
},
{
"team": "KC",
"name": "Kansas City Chiefs",
"conference": "AFC",
"division": "AFC West",
"division_rank": 3,
"conference_rank": 12,
"division_tiebreaker": "record",
"conference_tiebreaker": "record",
"wins": 6,
"losses": 11,
"ties": 0,
"win_pct": 0.3529412,
"games_played": 17,
"points_for": 362,
"points_against": 328,
"point_diff": 34,
"home": "5-4",
"away": "1-7",
"division_record": "1-5",
"conference_record": "3-9",
"streak": "L6",
"updated_at": "2026-09-17T23:13:47.596Z"
}
],
"count": 4,
"note": "Ranks apply the NFL tiebreaking procedure: head-to-head, division record, common games, conference record, strength of victory, strength of schedule, the points rankings, then net points. conference_rank is the playoff seed, so the four division winners hold seeds 1-4 regardless of record. division_tiebreaker and conference_tiebreaker name the step that decided each position, or 'record' when the club was never tied. The published ladder's last two steps, net touchdowns and a coin toss, are not applied; anything still tied after net points is ordered by team code."
}Response fields
| Field | Type | Description |
|---|---|---|
| season | number | |
| standings[] | array | List of objects |
| standings[].team | string | |
| standings[].name | string | |
| standings[].conference | string | |
| standings[].division | string | |
| standings[].division_rank | number | |
| standings[].conference_rank | number | |
| standings[].division_tiebreaker | string | |
| standings[].conference_tiebreaker | string | |
| standings[].wins | number | |
| standings[].losses | number | |
| standings[].ties | number | |
| standings[].win_pct | number | |
| standings[].games_played | number | |
| standings[].points_for | number | |
| standings[].points_against | number | |
| standings[].point_diff | number | |
| standings[].home | string | |
| standings[].away | string | |
| standings[].division_record | string | |
| standings[].conference_record | string | |
| standings[].streak | string | |
| standings[].updated_at | string | |
| count | number | |
| note | string |
get_schedule
2 creditsUpcoming games by week or for the next N days
When to use: You want what is coming up this week, with kickoff times in UTC and posted lines.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| team | string | optional | Team code to filter |
| week | integer | optional | A specific week of the current season (returns all games that week, played or not) |
| days | integer | optional | Days ahead to look when week is not set (default 7) |
Example request
{
"tool": "get_schedule",
"arguments": {
"team": "BUF",
"days": 7
}
}Example response
{
"season": 2026,
"week": null,
"days": 7,
"upcoming_games": [
{
"game_id": "2026_02_DET_BUF",
"season": 2026,
"game_type": "REG",
"week": 2,
"gameday": "2026-09-17",
"weekday": "Thursday",
"kickoff": "2026-09-18T00:15:00.000Z",
"away_team": "DET",
"home_team": "BUF",
"away_score": null,
"home_score": null,
"result": null,
"total": null,
"overtime": null,
"status": "FUT",
"location": "Home",
"stadium": "Highmark Stadium",
"roof": "outdoors",
"surface": "a_turf",
"temp": null,
"wind": null,
"div_game": false,
"away_rest": 4,
"home_rest": 4,
"spread_line": 5.5,
"total_line": 54.5,
"away_moneyline": 200,
"home_moneyline": -245,
"away_qb_name": "Jared Goff",
"home_qb_name": "Josh Allen",
"away_qb_id": "00-0033106",
"home_qb_id": "00-0034857",
"away_coach": "Dan Campbell",
"home_coach": "Sean McDermott",
"referee": null,
"espn_id": "401872932",
"pfr_id": "202609170buf"
}
],
"count": 1
}Response fields
| Field | Type | Description |
|---|---|---|
| season | number | |
| week | null | |
| days | number | |
| upcoming_games[] | array | List of objects |
| upcoming_games[].game_id | string | |
| upcoming_games[].season | number | |
| upcoming_games[].game_type | string | |
| upcoming_games[].week | number | |
| upcoming_games[].gameday | string | |
| upcoming_games[].weekday | string | |
| upcoming_games[].kickoff | string | |
| upcoming_games[].away_team | string | |
| upcoming_games[].home_team | string | |
| upcoming_games[].away_score | null | |
| upcoming_games[].home_score | null | |
| upcoming_games[].result | null | |
| upcoming_games[].total | null | |
| upcoming_games[].overtime | null | |
| upcoming_games[].status | string | |
| upcoming_games[].location | string | |
| upcoming_games[].stadium | string | |
| upcoming_games[].roof | string | |
| upcoming_games[].surface | string | |
| upcoming_games[].temp | null | |
| upcoming_games[].wind | null | |
| upcoming_games[].div_game | boolean | |
| upcoming_games[].away_rest | number | |
| upcoming_games[].home_rest | number | |
| upcoming_games[].spread_line | number | |
| upcoming_games[].total_line | number | |
| upcoming_games[].away_moneyline | number | |
| upcoming_games[].home_moneyline | number | |
| upcoming_games[].away_qb_name | string | |
| upcoming_games[].home_qb_name | string | |
| upcoming_games[].away_qb_id | string | |
| upcoming_games[].home_qb_id | string | |
| upcoming_games[].away_coach | string | |
| upcoming_games[].home_coach | string | |
| upcoming_games[].referee | null | |
| upcoming_games[].espn_id | string |
search_players
2 creditsFind players by name, team, or position
When to use: You have a name and need the GSIS id (and PFR/ESPN ids) to call the stat endpoints.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| query | string | required | Player name or part of it |
| team | string | optional | Filter by current team code |
| position | string | optional | Filter by position (e.g. QB, RB, WR, TE, OL, DL, LB, DB) |
| active | boolean | optional | Default true, but an active-only search that finds nobody automatically falls back to all players and says so. Set false to search everyone outright. |
| limit | integer | optional | Max results (default 10) |
Example request
{
"tool": "search_players",
"arguments": {
"query": "Mahomes"
}
}Example response
{
"players": [
{
"player_id": "00-0033873",
"name": "Patrick Mahomes",
"position": "QB",
"position_group": "QB",
"team": "KC",
"jersey_number": "15",
"status": "ACT",
"active": true,
"rookie_season": 2017,
"last_season": 2026,
"college": "Texas Tech",
"headshot": "https://static.www.nfl.com/image/upload/f_auto,q_auto/league/wdckwtob1lybvkmxnf7p",
"pfr_id": "MahoPa00",
"espn_id": "3139477"
}
],
"count": 1,
"included_inactive": false
}Response fields
| Field | Type | Description |
|---|---|---|
| players[] | array | List of objects |
| players[].player_id | string | |
| players[].name | string | |
| players[].position | string | |
| players[].position_group | string | |
| players[].team | string | |
| players[].jersey_number | string | |
| players[].status | string | |
| players[].active | boolean | |
| players[].rookie_season | number | |
| players[].last_season | number | |
| players[].college | string | |
| players[].headshot | string | |
| players[].pfr_id | string | |
| players[].espn_id | string | |
| count | number | |
| included_inactive | boolean |
get_injuries
2 creditsInjury report by team and week with practice and game status
When to use: You need the official injury report before a slate: game status and practice participation by team and week.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| team | string | optional | Team code |
| season | string | number | optional | Season year. Defaults to current. |
| week | integer | optional | Week. Defaults to the latest week with a report. |
| status | string | optional | Filter by game status: Out, Doubtful, Questionable |
Example request
{
"tool": "get_injuries",
"arguments": {
"team": "KC",
"season": 2025,
"week": 9
}
}Example response
{
"season": 2025,
"week": 9,
"injuries": [
{
"team": "KC",
"player_id": "00-0037197",
"name": "Isiah Pacheco",
"position": "RB",
"report_status": "Out",
"report_primary_injury": "Knee",
"report_secondary_injury": null,
"practice_status": "Did Not Participate In Practice",
"practice_primary_injury": "Knee",
"game_type": "REG"
},
{
"team": "KC",
"player_id": "00-0040116",
"name": "Josh Simmons",
"position": "T",
"report_status": "Out",
"report_primary_injury": "Not injury related - personal matter",
"report_secondary_injury": null,
"practice_status": "Did Not Participate In Practice",
"practice_primary_injury": "Not injury related - personal matter",
"game_type": "REG"
},
{
"team": "KC",
"player_id": "00-0036557",
"name": "Jaylon Moore",
"position": "T",
"report_status": "Questionable",
"report_primary_injury": "Illness",
"report_secondary_injury": null,
"practice_status": "Did Not Participate In Practice",
"practice_primary_injury": "Illness",
"game_type": "REG"
}
],
"count": 10
}Response fields
| Field | Type | Description |
|---|---|---|
| season | number | |
| week | number | |
| injuries[] | array | List of objects |
| injuries[].team | string | |
| injuries[].player_id | string | |
| injuries[].name | string | |
| injuries[].position | string | |
| injuries[].report_status | string | |
| injuries[].report_primary_injury | string | |
| injuries[].report_secondary_injury | null | |
| injuries[].practice_status | string | |
| injuries[].practice_primary_injury | string | |
| injuries[].game_type | string | |
| count | number |
get_depth_chart
2 creditsTeam depth chart by week
When to use: You need who starts where: formation, position, and depth rank for a team and week.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| team | string | required | Team code |
| season | string | number | optional | Season year. Defaults to current. |
| week | integer | optional | Week. Defaults to latest. |
| formation | string | optional | Filter by formation/unit, e.g. Offense, Defense, Special Teams |
Example request
{
"tool": "get_depth_chart",
"arguments": {
"team": "KC",
"season": 2025,
"week": 9,
"formation": "Offense"
}
}Example response
{
"team": "KC",
"season": 2025,
"week": 9,
"depth_chart": [],
"count": 0
}Response fields
| Field | Type | Description |
|---|---|---|
| team | string | |
| season | number | |
| week | number | |
| depth_chart[] | array | List |
| count | number |
Stats + aggregation
5 credits/callget_team_stats
5 creditsTeam totals and per-week lines with EPA, success rate, and situational splits
When to use: You are profiling one team: season totals across every phase, EPA per play, and the weekly lines to chart trends.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| team | string | required | Team code (e.g. KC, BUF, PHI) |
| season | string | number | optional | Season year (e.g. 2025). Defaults to current. |
| season_type | enum: REG | POST | optional | Regular season (default) or postseason |
Example request
{
"tool": "get_team_stats",
"arguments": {
"team": "KC",
"season": 2025
}
}Example response
{
"team": {
"abbrev": "KC",
"name": "Kansas City Chiefs",
"nick": "Chiefs",
"conference": "AFC",
"division": "AFC West",
"teamId": "2310",
"color": "#E31837",
"color2": "#FFB612",
"color3": "#000000",
"color4": "#e31837",
"logoEspn": "https://a.espncdn.com/i/teamlogos/nfl/500/kc.png",
"logoWikipedia": "https://upload.wikimedia.org/wikipedia/en/thumb/e/e1/Kansas_City_Chiefs_logo.svg/100px-Kansas_City_Chiefs_logo.svg.png",
"logoSquared": "https://github.com/nflverse/nflverse-pbp/raw/master/squared_logos/KC.png",
"wordmark": "https://github.com/nflverse/nflverse-pbp/raw/master/wordmarks/KC.png",
"active": true,
"relocatedTo": null
},
"season": 2025,
"season_type": "REG",
"record": {
"season": 2025,
"team": "KC",
"wins": 6,
"losses": 11,
"ties": 0,
"winPct": 0.3529412,
"pointsFor": 362,
"pointsAgainst": 328,
"pointDiff": 34,
"homeWins": 5,
"homeLosses": 4,
"homeTies": 0,
"awayWins": 1,
"awayLosses": 7,
"awayTies": 0,
"divWins": 1,
"divLosses": 5,
"divTies": 0,
"confWins": 3,
"confLosses": 9,
"confTies": 0,
"streak": "L6",
"gamesPlayed": 17,
"divisionRank": 3,
"conferenceRank": 12,
"divisionTiebreaker": "record",
"conferenceTiebreaker": "record",
"updatedAt": "2026-09-17T23:13:47.596Z"
},
"totals": {
"games": 17,
"completions": 363,
"attempts": 584,
"passing_yards": 3947,
"passing_tds": 23,
"passing_interceptions": 12,
"sacks_suffered": 47,
"sack_yards_lost": -308,
"passing_air_yards": 4533,
"passing_yards_after_catch": 2110,
"passing_first_downs": 189,
"passing_epa": 24.884,
"carries": 430,
"rushing_yards": 1812,
"rushing_tds": 15,
"rushing_fumbles_lost": 2,
"rushing_first_downs": 122,
"rushing_epa": 8.47,
"receptions": 363,
"targets": 549,
"receiving_yards": 3947,
"receiving_tds": 23,
"receiving_epa": 109.251,
"def_tackles_solo": 608,
"def_tackles_with_assist": 18,
"def_tackles_for_loss": 74,
"def_fumbles_forced": 8,
"def_sacks": 33,
"def_qb_hits": 103,
"def_interceptions": 10,
"def_pass_defended": 60,
"def_tds": 0,
"penalties": 119,
"penalty_yards": 951,
"fumbles_total": 17,
"fumbles_lost_total": 3,
"fg_made": 33,
"fg_att": 38,
"pat_made": 31,
"pat_att": 35,
"punt_returns": 32,
"punt_return_yards": 259,
"kickoff_returns": 66,
"kickoff_return_yards": 1727,
"passing_epa_per_play": 0.039,
"rushing_epa_per_play": 0.02,
"yards_per_attempt": 6.76,
"yards_per_carry": 4.21
},
"weeks": [
{
"season": 2025,
"week": 1,
"team": "KC",
"seasonType": "REG",
"gameId": "2025_01_KC_LAC",
"opponentTeam": "LAC",
"completions": 24,
"attempts": 39,
"passingYards": 258,
"passingTds": 1,
"passingInterceptions": 0,
"sacksSuffered": 2,
"sackYardsLost": -9,
"sackFumbles": 0,
"sackFumblesLost": 0,
"passingAirYards": 271,
"passingYardsAfterCatch": 116,
"passingFirstDowns": 9,
"passingEpa": 3.4485526,
"passingCpoe": -5.9927764,
"passing2ptConversions": 0,
"passing10": 9,
"passing16": 4,
"passing20": 3,
"passing40": 1,
"carries": 17,
"rushingYards": 98,
"rushingTds": 1,
"rushingFumbles": 0,
"rushingFumblesLost": 0,
"rushingFirstDowns": 8,
"rushingEpa": 8.906441,
"rushing2ptConversions": 0,
"rushing10": 5,
"rushing12": 1,
"rushing20": 0,
"rushing40": 0,
"receptions": 24,
"targets": 38,
"receivingYards": 258,
"receivingTds": 1,
"receivingFumbles": 0,
"receivingFumblesLost": 0,
"receivingAirYards": 271,
"receivingYardsAfterCatch": 116,
"receivingFirstDowns": 9,
"receivingEpa": 5.5701094,
"receiving2ptConversions": 0,
"receiving10": 9,
"receiving16": 4,
"receiving20": 3,
"receiving40": 1,
"specialTeamsTds": 0,
"defTacklesSolo": 40,
"defTacklesWithAssist": 2,
"defTackleAssists": 18,
"defTacklesForLoss": 6,
"defTacklesForLossYards": 17,
"defFumblesForced": 1,
"defSacks": 3,
"defSackYards": 14,
"defQbHits": 4,
"defInterceptions": 0,
"defInterceptionYards": 0,
"defPassDefended": 2,
"defTds": 0,
"defFumbles": 0,
"defSafeties": 0,
"defPuntBlocks": 0,
"defPatBlocks": 0,
"defFgBlocks": 0,
"def2ptAtts": 0,
"def2ptMade": 0,
"miscYards": 0,
"fumbleRecoveryOwn": 1,
"fumbleRecoveryYardsOwn": 0,
"fumbleRecoveryOpp": 0,
"fumbleRecoveryYardsOpp": 0,
"fumbleRecoveryTds": 0,
"penalties": 10,
"penaltyYards": 71,
"fumblesForcedByOpp": 0,
"fumblesNotForced": 1,
"fumblesOutOfBounds": 0,
"fumblesTotal": 1,
"fumblesLostTotal": 0,
"puntReturns": 2,
"puntReturnYards": 7,
"kickoffReturns": 5,
"kickoffReturnYards": 147,
"fgMade": 3,
"fgAtt": 3,
"fgMissed": 0,
"fgBlocked": 0,
"fgLong": 59,
"fgPct": 1,
"fgMade019": 0,
"fgMade2029": 1,
"fgMade3039": 1,
"fgMade4049": 0,
"fgMade5059": 1,
"fgMade60": 0,
"fgMissed019": 0,
"fgMissed2029": 0,
"fgMissed3039": 0,
"fgMissed4049": 0,
"fgMissed5059": 0,
"fgMissed60": 0,
"fgMadeList": "35;59;27",
"fgMissedList": null,
"fgBlockedList": null,
"fgMadeDistance": 121,
"fgMissedDistance": 0,
"fgBlockedDistance": 0,
"patMade": 0,
"patAtt": 1,
"patMissed": 1,
"patBlocked": 0,
"patPct": 0,
"gwfgMade": 0,
"gwfgAtt": 0,
"gwfgMissed": 0,
"gwfgBlocked": 0,
"gwfgDistance": 0,
"ptAtt": 3,
"ptBlocked": 0,
"ptLong": 40,
"ptYards": 116,
"ptInside20": 1,
"ptOutOfBounds": 1,
"ptDowned": 1,
"ptTouchback": 0,
"ptFairCaught": 1,
"ptReturned": 0,
"ptReturnYards": 0,
"ptReturnTds": 0,
"ptNetYards": 116,
"timeouts": 6
},
{
"season": 2025,
"week": 2,
"team": "KC",
"seasonType": "REG",
"gameId": "2025_02_PHI_KC",
"opponentTeam": "PHI",
"completions": 16,
"attempts": 29,
"passingYards": 187,
"passingTds": 1,
"passingInterceptions": 1,
"sacksSuffered": 2,
"sackYardsLost": -14,
"sackFumbles": 0,
"sackFumblesLost": 0,
"passingAirYards": 309,
"passingYardsAfterCatch": 68,
"passingFirstDowns": 7,
"passingEpa": -7.1535654,
"passingCpoe": -5.841068,
"passing2ptConversions": 0,
"passing10": 8,
"passing16": 5,
"passing20": 3,
"passing40": 1,
"carries": 26,
"rushingYards": 121,
"rushingTds": 1,
"rushingFumbles": 1,
"rushingFumblesLost": 0,
"rushingFirstDowns": 9,
"rushingEpa": -0.5581932,
"rushing2ptConversions": 0,
"rushing10": 4,
"rushing12": 2,
"rushing20": 1,
"rushing40": 0,
"receptions": 16,
"targets": 29,
"receivingYards": 187,
"receivingTds": 1,
"receivingFumbles": 0,
"receivingFumblesLost": 0,
"receivingAirYards": 309,
"receivingYardsAfterCatch": 68,
"receivingFirstDowns": 7,
"receivingEpa": -3.5375352,
"receiving2ptConversions": 0,
"receiving10": 8,
"receiving16": 5,
"receiving20": 3,
"receiving40": 1,
"specialTeamsTds": 0,
"defTacklesSolo": 37,
"defTacklesWithAssist": 0,
"defTackleAssists": 30,
"defTacklesForLoss": 5,
"defTacklesForLossYards": 11,
"defFumblesForced": 0,
"defSacks": 1,
"defSackYards": 4,
"defQbHits": 3,
"defInterceptions": 0,
"defInterceptionYards": 0,
"defPassDefended": 4,
"defTds": 0,
"defFumbles": 0,
"defSafeties": 0,
"defPuntBlocks": 0,
"defPatBlocks": 0,
"defFgBlocks": 0,
"def2ptAtts": 0,
"def2ptMade": 0,
"miscYards": 0,
"fumbleRecoveryOwn": 1,
"fumbleRecoveryYardsOwn": 0,
"fumbleRecoveryOpp": 0,
"fumbleRecoveryYardsOpp": 0,
"fumbleRecoveryTds": 0,
"penalties": 6,
"penaltyYards": 45,
"fumblesForcedByOpp": 1,
"fumblesNotForced": 0,
"fumblesOutOfBounds": 0,
"fumblesTotal": 1,
"fumblesLostTotal": 0,
"puntReturns": 2,
"puntReturnYards": 42,
"kickoffReturns": 4,
"kickoffReturnYards": 95,
"fgMade": 1,
"fgAtt": 2,
"fgMissed": 1,
"fgBlocked": 0,
"fgLong": 56,
"fgPct": 0.5,
"fgMade019": 0,
"fgMade2029": 0,
"fgMade3039": 0,
"fgMade4049": 0,
"fgMade5059": 1,
"fgMade60": 0,
"fgMissed019": 0,
"fgMissed2029": 0,
"fgMissed3039": 0,
"fgMissed4049": 0,
"fgMissed5059": 1,
"fgMissed60": 0,
"fgMadeList": "56",
"fgMissedList": "58",
"fgBlockedList": null,
"fgMadeDistance": 56,
"fgMissedDistance": 58,
"fgBlockedDistance": 0,
"patMade": 2,
"patAtt": 2,
"patMissed": 0,
"patBlocked": 0,
"patPct": 1,
"gwfgMade": 0,
"gwfgAtt": 0,
"gwfgMissed": 0,
"gwfgBlocked": 0,
"gwfgDistance": 0,
"ptAtt": 3,
"ptBlocked": 0,
"ptLong": 69,
"ptYards": 178,
"ptInside20": 2,
"ptOutOfBounds": 0,
"ptDowned": 0,
"ptTouchback": 0,
"ptFairCaught": 2,
"ptReturned": 1,
"ptReturnYards": 14,
"ptReturnTds": 0,
"ptNetYards": 164,
"timeouts": 4
},
{
"season": 2025,
"week": 3,
"team": "KC",
"seasonType": "REG",
"gameId": "2025_03_KC_NYG",
"opponentTeam": "NYG",
"completions": 22,
"attempts": 37,
"passingYards": 224,
"passingTds": 1,
"passingInterceptions": 0,
"sacksSuffered": 2,
"sackYardsLost": -23,
"sackFumbles": 2,
"sackFumblesLost": 0,
"passingAirYards": 319,
"passingYardsAfterCatch": 112,
"passingFirstDowns": 13,
"passingEpa": 8.230807,
"passingCpoe": -1.4937389,
"passing2ptConversions": 0,
"passing10": 10,
"passing16": 5,
"passing20": 3,
"passing40": 0,
"carries": 28,
"rushingYards": 105,
"rushingTds": 1,
"rushingFumbles": 0,
"rushingFumblesLost": 0,
"rushingFirstDowns": 6,
"rushingEpa": 0.2622928,
"rushing2ptConversions": 0,
"rushing10": 2,
"rushing12": 0,
"rushing20": 0,
"rushing40": 0,
"receptions": 22,
"targets": 35,
"receivingYards": 224,
"receivingTds": 1,
"receivingFumbles": 0,
"receivingFumblesLost": 0,
"receivingAirYards": 319,
"receivingYardsAfterCatch": 112,
"receivingFirstDowns": 13,
"receivingEpa": 10.824478,
"receiving2ptConversions": 0,
"receiving10": 10,
"receiving16": 5,
"receiving20": 3,
"receiving40": 0,
"specialTeamsTds": 0,
"defTacklesSolo": 34,
"defTacklesWithAssist": 3,
"defTackleAssists": 35,
"defTacklesForLoss": 6,
"defTacklesForLossYards": 14,
"defFumblesForced": 0,
"defSacks": 2,
"defSackYards": 9,
"defQbHits": 9,
"defInterceptions": 2,
"defInterceptionYards": 23,
"defPassDefended": 6,
"defTds": 0,
"defFumbles": 0,
"defSafeties": 0,
"defPuntBlocks": 0,
"defPatBlocks": 1,
"defFgBlocks": 0,
"def2ptAtts": 0,
"def2ptMade": 0,
"miscYards": 0,
"fumbleRecoveryOwn": 2,
"fumbleRecoveryYardsOwn": 0,
"fumbleRecoveryOpp": 0,
"fumbleRecoveryYardsOpp": 0,
"fumbleRecoveryTds": 0,
"penalties": 8,
"penaltyYards": 85,
"fumblesForcedByOpp": 1,
"fumblesNotForced": 1,
"fumblesOutOfBounds": 0,
"fumblesTotal": 2,
"fumblesLostTotal": 0,
"puntReturns": 1,
"puntReturnYards": 4,
"kickoffReturns": 3,
"kickoffReturnYards": 63,
"fgMade": 3,
"fgAtt": 4,
"fgMissed": 1,
"fgBlocked": 0,
"fgLong": 54,
"fgPct": 0.75,
"fgMade019": 0,
"fgMade2029": 1,
"fgMade3039": 0,
"fgMade4049": 1,
"fgMade5059": 1,
"fgMade60": 0,
"fgMissed019": 0,
"fgMissed2029": 0,
"fgMissed3039": 0,
"fgMissed4049": 1,
"fgMissed5059": 0,
"fgMissed60": 0,
"fgMadeList": "54;48;28",
"fgMissedList": "40",
"fgBlockedList": null,
"fgMadeDistance": 130,
"fgMissedDistance": 40,
"fgBlockedDistance": 0,
"patMade": 1,
"patAtt": 2,
"patMissed": 1,
"patBlocked": 0,
"patPct": 0.5,
"gwfgMade": 0,
"gwfgAtt": 0,
"gwfgMissed": 0,
"gwfgBlocked": 0,
"gwfgDistance": 0,
"ptAtt": 3,
"ptBlocked": 0,
"ptLong": 53,
"ptYards": 139,
"ptInside20": 0,
"ptOutOfBounds": 0,
"ptDowned": 1,
"ptTouchback": 0,
"ptFairCaught": 0,
"ptReturned": 2,
"ptReturnYards": 17,
"ptReturnTds": 0,
"ptNetYards": 122,
"timeouts": 3
}
],
"count": 17
}Response fields
| Field | Type | Description |
|---|---|---|
| team | object | |
| team.abbrev | string | |
| team.name | string | |
| team.nick | string | |
| team.conference | string | |
| team.division | string | |
| team.teamId | string | |
| team.color | string | |
| team.color2 | string | |
| team.color3 | string | |
| team.color4 | string | |
| team.logoEspn | string | |
| team.logoWikipedia | string | |
| team.logoSquared | string | |
| team.wordmark | string | |
| team.active | boolean | |
| team.relocatedTo | null | |
| season | number | |
| season_type | string | |
| record | object | |
| record.season | number | |
| record.team | string | |
| record.wins | number | |
| record.losses | number | |
| record.ties | number | |
| record.winPct | number | |
| record.pointsFor | number | |
| record.pointsAgainst | number | |
| record.pointDiff | number | |
| record.homeWins | number | |
| record.homeLosses | number | |
| record.homeTies | number | |
| record.awayWins | number | |
| record.awayLosses | number | |
| record.awayTies | number | |
| record.divWins | number | |
| record.divLosses | number | |
| record.divTies | number | |
| record.confWins | number | |
| record.confLosses | number |
get_games
5 creditsQuery games by season, week, team, date, type, or status, with closing lines
When to use: You need games with scores and closing lines for a season, week, team, or date range. The consensus closing spread and total are on every game since 1999, which makes this the backtest table.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| season | string | number | optional | Season year (e.g. 2025) |
| week | integer | optional | Week number (1-18 regular season; 19+ postseason) |
| team | string | optional | Team code (home or away) |
| date_from | string | optional | Start date YYYY-MM-DD |
| date_to | string | optional | End date YYYY-MM-DD |
| game_type | enum: REG | WC | DIV | CON | SB | POST | optional | REG, WC, DIV, CON, SB, or POST for any playoff game |
| status | enum: FUT | LIVE | FINAL | optional | Game status |
| limit | integer | optional | Max results (default 100) |
Example request
{
"tool": "get_games",
"arguments": {
"season": 2025,
"week": 1,
"team": "KC"
}
}Example response
{
"games": [
{
"game_id": "2025_01_KC_LAC",
"season": 2025,
"game_type": "REG",
"week": 1,
"gameday": "2025-09-05",
"weekday": "Friday",
"kickoff": "2025-09-06T00:00:00.000Z",
"away_team": "KC",
"home_team": "LAC",
"away_score": 21,
"home_score": 27,
"result": 6,
"total": 48,
"overtime": 0,
"status": "FINAL",
"location": "Neutral",
"stadium": "SoFi Stadium",
"roof": "dome",
"surface": null,
"temp": null,
"wind": null,
"div_game": true,
"away_rest": 7,
"home_rest": 7,
"spread_line": -3,
"total_line": 47.5,
"away_moneyline": -175,
"home_moneyline": 145,
"away_qb_name": "Patrick Mahomes",
"home_qb_name": "Justin Herbert",
"away_qb_id": "00-0033873",
"home_qb_id": "00-0036355",
"away_coach": "Andy Reid",
"home_coach": "Jim Harbaugh",
"referee": "Carl Cheffers",
"espn_id": "401772714",
"pfr_id": "202509050sdg"
}
],
"count": 1,
"filters": {
"season": 2025,
"week": 1,
"team": "KC"
}
}Response fields
| Field | Type | Description |
|---|---|---|
| games[] | array | List of objects |
| games[].game_id | string | |
| games[].season | number | |
| games[].game_type | string | |
| games[].week | number | |
| games[].gameday | string | |
| games[].weekday | string | |
| games[].kickoff | string | |
| games[].away_team | string | |
| games[].home_team | string | |
| games[].away_score | number | |
| games[].home_score | number | |
| games[].result | number | |
| games[].total | number | |
| games[].overtime | number | |
| games[].status | string | |
| games[].location | string | |
| games[].stadium | string | |
| games[].roof | string | |
| games[].surface | null | |
| games[].temp | null | |
| games[].wind | null | |
| games[].div_game | boolean | |
| games[].away_rest | number | |
| games[].home_rest | number | |
| games[].spread_line | number | |
| games[].total_line | number | |
| games[].away_moneyline | number | |
| games[].home_moneyline | number | |
| games[].away_qb_name | string | |
| games[].home_qb_name | string | |
| games[].away_qb_id | string | |
| games[].home_qb_id | string | |
| games[].away_coach | string | |
| games[].home_coach | string | |
| games[].referee | string | |
| games[].espn_id | string | |
| games[].pfr_id | string | |
| count | number | |
| filters | object |
get_player_stats
5 creditsWeekly and season stat lines for one player: passing, rushing, receiving, defense, kicking, fantasy
When to use: You are building a player page or projection input: bio, season totals, and every weekly line in one call.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| player_id | string | required | GSIS player id from search_players (e.g. 00-0033873) |
| season | string | number | optional | Season year. Defaults to the player's latest season. |
| season_type | enum: REG | POST | optional | Regular season (default) or postseason |
Example request
{
"tool": "get_player_stats",
"arguments": {
"player_id": "00-0033873",
"season": 2025
}
}Example response
{
"player": {
"gsisId": "00-0033873",
"displayName": "Patrick Mahomes",
"firstName": "Patrick",
"lastName": "Mahomes",
"footballName": "Patrick",
"suffix": null,
"position": "QB",
"positionGroup": "QB",
"ngsPosition": "QB",
"height": 74,
"weight": 225,
"birthDate": "1995-09-17",
"college": "Texas Tech",
"collegeConference": "Big Twelve Conference",
"jerseyNumber": "15",
"rookieSeason": 2017,
"lastSeason": 2026,
"latestTeam": "KC",
"status": "ACT",
"yearsOfExperience": 10,
"draftYear": 2017,
"draftRound": 1,
"draftPick": 10,
"draftTeam": "KC",
"headshot": "https://static.www.nfl.com/image/upload/f_auto,q_auto/league/wdckwtob1lybvkmxnf7p",
"esbId": "MAH401939",
"nflId": "44822",
"pfrId": "MahoPa00",
"pffId": "11765",
"otcId": "5594",
"espnId": "3139477",
"smartId": "32004d41-4840-1939-e4c1-bb89191b4e71",
"sleeperId": null,
"active": true,
"team_name": "Kansas City Chiefs"
},
"season": 2025,
"season_type": "REG",
"season_totals": {
"games": 14,
"completions": 315,
"attempts": 502,
"passing_yards": 3587,
"passing_tds": 22,
"passing_interceptions": 11,
"sacks_suffered": 34,
"sack_yards_lost": -193,
"sack_fumbles": 3,
"passing_air_yards": 4050,
"passing_yards_after_catch": 1895,
"passing_first_downs": 173,
"passing_epa": 68.247,
"passing_2pt_conversions": 2,
"passing_10": 146,
"passing_16": 72,
"passing_20": 49,
"passing_40": 8,
"carries": 64,
"rushing_yards": 422,
"rushing_tds": 5,
"rushing_first_downs": 27,
"rushing_epa": 29.164,
"rushing_10": 18,
"rushing_12": 10,
"rushing_20": 1,
"receptions": 1,
"targets": 1,
"receiving_yards": -10,
"receiving_air_yards": -8,
"receiving_yards_after_catch": -2,
"receiving_epa": -2.539,
"def_tackles_solo": 1,
"fumble_recovery_own": 3,
"penalties": 3,
"penalty_yards": 25,
"fumbles_forced_by_opp": 2,
"fumbles_not_forced": 1,
"fumbles_total": 3,
"fantasy_points": 284.68,
"fantasy_points_ppr": 285.68
},
"weeks": [
{
"position": "QB",
"positionGroup": "QB",
"season": 2025,
"week": 1,
"seasonType": "REG",
"gameId": "2025_01_KC_LAC",
"team": "KC",
"opponentTeam": "LAC",
"completions": 24,
"attempts": 39,
"passingYards": 258,
"passingTds": 1,
"passingInterceptions": 0,
"sacksSuffered": 2,
"sackYardsLost": -9,
"sackFumbles": 0,
"sackFumblesLost": 0,
"passingAirYards": 271,
"passingYardsAfterCatch": 116,
"passingFirstDowns": 9,
"passingEpa": 3.4485526,
"passingCpoe": -5.9927764,
"passing2ptConversions": 0,
"passing10": 9,
"passing16": 4,
"passing20": 3,
"passing40": 1,
"carries": 6,
"rushingYards": 57,
"rushingTds": 1,
"rushingFumbles": 0,
"rushingFumblesLost": 0,
"rushingFirstDowns": 5,
"rushingEpa": 7.2114673,
"rushing2ptConversions": 0,
"rushing10": 4,
"rushing12": 1,
"rushing20": 0,
"rushing40": 0,
"receptions": 0,
"targets": 0,
"receivingYards": 0,
"receivingTds": 0,
"receivingFumbles": 0,
"receivingFumblesLost": 0,
"receivingAirYards": 0,
"receivingYardsAfterCatch": 0,
"receivingFirstDowns": 0,
"receivingEpa": null,
"receiving2ptConversions": 0,
"receiving10": 0,
"receiving16": 0,
"receiving20": 0,
"receiving40": 0,
"specialTeamsTds": 0,
"defTacklesSolo": 0,
"defTacklesWithAssist": 0,
"defTackleAssists": 0,
"defTacklesForLoss": 0,
"defTacklesForLossYards": 0,
"defFumblesForced": 0,
"defSacks": 0,
"defSackYards": 0,
"defQbHits": 0,
"defInterceptions": 0,
"defInterceptionYards": 0,
"defPassDefended": 0,
"defTds": 0,
"defFumbles": 0,
"defSafeties": 0,
"defPuntBlocks": 0,
"defPatBlocks": 0,
"defFgBlocks": 0,
"def2ptAtts": 0,
"def2ptMade": 0,
"miscYards": 0,
"fumbleRecoveryOwn": 1,
"fumbleRecoveryYardsOwn": 0,
"fumbleRecoveryOpp": 0,
"fumbleRecoveryYardsOpp": 0,
"fumbleRecoveryTds": 0,
"penalties": 0,
"penaltyYards": 0,
"fumblesForcedByOpp": 0,
"fumblesNotForced": 0,
"fumblesOutOfBounds": 0,
"fumblesTotal": 0,
"fumblesLostTotal": 0,
"puntReturns": 0,
"puntReturnYards": 0,
"kickoffReturns": 0,
"kickoffReturnYards": 0,
"fgMade": 0,
"fgAtt": 0,
"fgMissed": 0,
"fgBlocked": 0,
"fgLong": null,
"fgPct": null,
"fgMade019": 0,
"fgMade2029": 0,
"fgMade3039": 0,
"fgMade4049": 0,
"fgMade5059": 0,
"fgMade60": 0,
"fgMissed019": 0,
"fgMissed2029": 0,
"fgMissed3039": 0,
"fgMissed4049": 0,
"fgMissed5059": 0,
"fgMissed60": 0,
"fgMadeList": null,
"fgMissedList": null,
"fgBlockedList": null,
"fgMadeDistance": 0,
"fgMissedDistance": 0,
"fgBlockedDistance": 0,
"patMade": 0,
"patAtt": 0,
"patMissed": 0,
"patBlocked": 0,
"patPct": null,
"gwfgMade": 0,
"gwfgAtt": 0,
"gwfgMissed": 0,
"gwfgBlocked": 0,
"gwfgDistance": 0,
"ptAtt": 0,
"ptBlocked": 0,
"ptLong": null,
"ptYards": 0,
"ptInside20": 0,
"ptOutOfBounds": 0,
"ptDowned": 0,
"ptTouchback": 0,
"ptFairCaught": 0,
"ptReturned": 0,
"ptReturnYards": 0,
"ptReturnTds": 0,
"ptNetYards": 0,
"pacr": 0.9520295,
"racr": null,
"targetShare": 0,
"airYardsShare": 0,
"wopr": 0,
"fantasyPoints": 26.02,
"fantasyPointsPpr": 26.02
},
{
"position": "QB",
"positionGroup": "QB",
"season": 2025,
"week": 2,
"seasonType": "REG",
"gameId": "2025_02_PHI_KC",
"team": "KC",
"opponentTeam": "PHI",
"completions": 16,
"attempts": 29,
"passingYards": 187,
"passingTds": 1,
"passingInterceptions": 1,
"sacksSuffered": 2,
"sackYardsLost": -14,
"sackFumbles": 0,
"sackFumblesLost": 0,
"passingAirYards": 309,
"passingYardsAfterCatch": 68,
"passingFirstDowns": 7,
"passingEpa": -7.1535654,
"passingCpoe": -5.841068,
"passing2ptConversions": 0,
"passing10": 8,
"passing16": 5,
"passing20": 3,
"passing40": 1,
"carries": 7,
"rushingYards": 66,
"rushingTds": 1,
"rushingFumbles": 0,
"rushingFumblesLost": 0,
"rushingFirstDowns": 5,
"rushingEpa": 6.408957,
"rushing2ptConversions": 0,
"rushing10": 3,
"rushing12": 2,
"rushing20": 1,
"rushing40": 0,
"receptions": 0,
"targets": 0,
"receivingYards": 0,
"receivingTds": 0,
"receivingFumbles": 0,
"receivingFumblesLost": 0,
"receivingAirYards": 0,
"receivingYardsAfterCatch": 0,
"receivingFirstDowns": 0,
"receivingEpa": null,
"receiving2ptConversions": 0,
"receiving10": 0,
"receiving16": 0,
"receiving20": 0,
"receiving40": 0,
"specialTeamsTds": 0,
"defTacklesSolo": 0,
"defTacklesWithAssist": 0,
"defTackleAssists": 0,
"defTacklesForLoss": 0,
"defTacklesForLossYards": 0,
"defFumblesForced": 0,
"defSacks": 0,
"defSackYards": 0,
"defQbHits": 0,
"defInterceptions": 0,
"defInterceptionYards": 0,
"defPassDefended": 0,
"defTds": 0,
"defFumbles": 0,
"defSafeties": 0,
"defPuntBlocks": 0,
"defPatBlocks": 0,
"defFgBlocks": 0,
"def2ptAtts": 0,
"def2ptMade": 0,
"miscYards": 0,
"fumbleRecoveryOwn": 0,
"fumbleRecoveryYardsOwn": 0,
"fumbleRecoveryOpp": 0,
"fumbleRecoveryYardsOpp": 0,
"fumbleRecoveryTds": 0,
"penalties": 0,
"penaltyYards": 0,
"fumblesForcedByOpp": 0,
"fumblesNotForced": 0,
"fumblesOutOfBounds": 0,
"fumblesTotal": 0,
"fumblesLostTotal": 0,
"puntReturns": 0,
"puntReturnYards": 0,
"kickoffReturns": 0,
"kickoffReturnYards": 0,
"fgMade": 0,
"fgAtt": 0,
"fgMissed": 0,
"fgBlocked": 0,
"fgLong": null,
"fgPct": null,
"fgMade019": 0,
"fgMade2029": 0,
"fgMade3039": 0,
"fgMade4049": 0,
"fgMade5059": 0,
"fgMade60": 0,
"fgMissed019": 0,
"fgMissed2029": 0,
"fgMissed3039": 0,
"fgMissed4049": 0,
"fgMissed5059": 0,
"fgMissed60": 0,
"fgMadeList": null,
"fgMissedList": null,
"fgBlockedList": null,
"fgMadeDistance": 0,
"fgMissedDistance": 0,
"fgBlockedDistance": 0,
"patMade": 0,
"patAtt": 0,
"patMissed": 0,
"patBlocked": 0,
"patPct": null,
"gwfgMade": 0,
"gwfgAtt": 0,
"gwfgMissed": 0,
"gwfgBlocked": 0,
"gwfgDistance": 0,
"ptAtt": 0,
"ptBlocked": 0,
"ptLong": null,
"ptYards": 0,
"ptInside20": 0,
"ptOutOfBounds": 0,
"ptDowned": 0,
"ptTouchback": 0,
"ptFairCaught": 0,
"ptReturned": 0,
"ptReturnYards": 0,
"ptReturnTds": 0,
"ptNetYards": 0,
"pacr": 0.605178,
"racr": null,
"targetShare": 0,
"airYardsShare": 0,
"wopr": 0,
"fantasyPoints": 22.08,
"fantasyPointsPpr": 22.08
},
{
"position": "QB",
"positionGroup": "QB",
"season": 2025,
"week": 3,
"seasonType": "REG",
"gameId": "2025_03_KC_NYG",
"team": "KC",
"opponentTeam": "NYG",
"completions": 22,
"attempts": 37,
"passingYards": 224,
"passingTds": 1,
"passingInterceptions": 0,
"sacksSuffered": 2,
"sackYardsLost": -23,
"sackFumbles": 2,
"sackFumblesLost": 0,
"passingAirYards": 319,
"passingYardsAfterCatch": 112,
"passingFirstDowns": 13,
"passingEpa": 8.230807,
"passingCpoe": -1.4937389,
"passing2ptConversions": 0,
"passing10": 10,
"passing16": 5,
"passing20": 3,
"passing40": 0,
"carries": 5,
"rushingYards": 2,
"rushingTds": 0,
"rushingFumbles": 0,
"rushingFumblesLost": 0,
"rushingFirstDowns": 0,
"rushingEpa": -1.5214161,
"rushing2ptConversions": 0,
"rushing10": 0,
"rushing12": 0,
"rushing20": 0,
"rushing40": 0,
"receptions": 0,
"targets": 0,
"receivingYards": 0,
"receivingTds": 0,
"receivingFumbles": 0,
"receivingFumblesLost": 0,
"receivingAirYards": 0,
"receivingYardsAfterCatch": 0,
"receivingFirstDowns": 0,
"receivingEpa": null,
"receiving2ptConversions": 0,
"receiving10": 0,
"receiving16": 0,
"receiving20": 0,
"receiving40": 0,
"specialTeamsTds": 0,
"defTacklesSolo": 0,
"defTacklesWithAssist": 0,
"defTackleAssists": 0,
"defTacklesForLoss": 0,
"defTacklesForLossYards": 0,
"defFumblesForced": 0,
"defSacks": 0,
"defSackYards": 0,
"defQbHits": 0,
"defInterceptions": 0,
"defInterceptionYards": 0,
"defPassDefended": 0,
"defTds": 0,
"defFumbles": 0,
"defSafeties": 0,
"defPuntBlocks": 0,
"defPatBlocks": 0,
"defFgBlocks": 0,
"def2ptAtts": 0,
"def2ptMade": 0,
"miscYards": 0,
"fumbleRecoveryOwn": 1,
"fumbleRecoveryYardsOwn": 0,
"fumbleRecoveryOpp": 0,
"fumbleRecoveryYardsOpp": 0,
"fumbleRecoveryTds": 0,
"penalties": 0,
"penaltyYards": 0,
"fumblesForcedByOpp": 1,
"fumblesNotForced": 1,
"fumblesOutOfBounds": 0,
"fumblesTotal": 2,
"fumblesLostTotal": 0,
"puntReturns": 0,
"puntReturnYards": 0,
"kickoffReturns": 0,
"kickoffReturnYards": 0,
"fgMade": 0,
"fgAtt": 0,
"fgMissed": 0,
"fgBlocked": 0,
"fgLong": null,
"fgPct": null,
"fgMade019": 0,
"fgMade2029": 0,
"fgMade3039": 0,
"fgMade4049": 0,
"fgMade5059": 0,
"fgMade60": 0,
"fgMissed019": 0,
"fgMissed2029": 0,
"fgMissed3039": 0,
"fgMissed4049": 0,
"fgMissed5059": 0,
"fgMissed60": 0,
"fgMadeList": null,
"fgMissedList": null,
"fgBlockedList": null,
"fgMadeDistance": 0,
"fgMissedDistance": 0,
"fgBlockedDistance": 0,
"patMade": 0,
"patAtt": 0,
"patMissed": 0,
"patBlocked": 0,
"patPct": null,
"gwfgMade": 0,
"gwfgAtt": 0,
"gwfgMissed": 0,
"gwfgBlocked": 0,
"gwfgDistance": 0,
"ptAtt": 0,
"ptBlocked": 0,
"ptLong": null,
"ptYards": 0,
"ptInside20": 0,
"ptOutOfBounds": 0,
"ptDowned": 0,
"ptTouchback": 0,
"ptFairCaught": 0,
"ptReturned": 0,
"ptReturnYards": 0,
"ptReturnTds": 0,
"ptNetYards": 0,
"pacr": 0.70219433,
"racr": null,
"targetShare": 0,
"airYardsShare": 0,
"wopr": 0,
"fantasyPoints": 13.16,
"fantasyPointsPpr": 13.16
}
],
"seasons": [
{
"season": 2026,
"games": 1,
"team": "KC"
},
{
"season": 2025,
"games": 14,
"team": "KC"
},
{
"season": 2024,
"games": 16,
"team": "KC"
}
],
"count": 14
}Response fields
| Field | Type | Description |
|---|---|---|
| player | object | |
| player.gsisId | string | |
| player.displayName | string | |
| player.firstName | string | |
| player.lastName | string | |
| player.footballName | string | |
| player.suffix | null | |
| player.position | string | |
| player.positionGroup | string | |
| player.ngsPosition | string | |
| player.height | number | |
| player.weight | number | |
| player.birthDate | string | |
| player.college | string | |
| player.collegeConference | string | |
| player.jerseyNumber | string | |
| player.rookieSeason | number | |
| player.lastSeason | number | |
| player.latestTeam | string | |
| player.status | string | |
| player.yearsOfExperience | number | |
| player.draftYear | number | |
| player.draftRound | number | |
| player.draftPick | number | |
| player.draftTeam | string | |
| player.headshot | string | |
| player.esbId | string | |
| player.nflId | string | |
| player.pfrId | string | |
| player.pffId | string | |
| player.otcId | string | |
| player.espnId | string | |
| player.smartId | string | |
| player.sleeperId | null | |
| player.active | boolean | |
| player.team_name | string | |
| season | number | |
| season_type | string | |
| season_totals | object | |
| season_totals.games | number |
get_player_leaders
5 creditsLeaderboard for any stat, filtered by position, team, and season
When to use: You want a leaderboard on any stat, including EPA and fantasy points, with position and games filters.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| stat | string | required | Weekly stat column to rank by (e.g. passing_yards, receiving_epa, def_sacks) |
| season | string | number | optional | Season year. Defaults to current. |
| season_type | enum: REG | POST | optional | Regular season (default) or postseason |
| position | string | optional | Position filter, e.g. QB, RB, WR, TE |
| team | string | optional | Team code filter |
| min_games | integer | optional | Minimum games with a stat line (default 1) |
| limit | integer | optional | Max results (default 20) |
Example request
{
"tool": "get_player_leaders",
"arguments": {
"stat": "passing_epa",
"season": 2025,
"position": "QB",
"limit": 5
}
}Example response
{
"stat": "passing_epa",
"aggregation": "sum",
"season": 2025,
"season_type": "REG",
"leaders": [
{
"rank": 1,
"player_id": "00-0039851",
"name": "Drake Maye",
"position": "QB",
"team": "NE",
"games": 17,
"value": 166.215
},
{
"rank": 2,
"player_id": "00-0026498",
"name": "Matthew Stafford",
"position": "QB",
"team": "LA",
"games": 17,
"value": 150.454
},
{
"rank": 3,
"player_id": "00-0033077",
"name": "Dak Prescott",
"position": "QB",
"team": "DAL",
"games": 17,
"value": 114.349
}
],
"count": 5
}Response fields
| Field | Type | Description |
|---|---|---|
| stat | string | |
| aggregation | string | |
| season | number | |
| season_type | string | |
| leaders[] | array | List of objects |
| leaders[].rank | number | |
| leaders[].player_id | string | |
| leaders[].name | string | |
| leaders[].position | string | |
| leaders[].team | string | |
| leaders[].games | number | |
| leaders[].value | number | |
| count | number |
get_snap_counts
5 creditsOffensive, defensive, and special-teams snaps and shares by game or player
When to use: You are measuring playing time or usage: snaps and snap share per game by phase.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| game_id | string | optional | Game id, e.g. 2025_01_KC_BUF |
| player_id | string | optional | PFR player id (from search_players pfr_id) |
| team | string | optional | Team code |
| season | string | number | optional | Season year (with team or player) |
| week | integer | optional | Week filter |
| limit | integer | optional | Max rows (default 200) |
Example request
{
"tool": "get_snap_counts",
"arguments": {
"game_id": "2025_01_KC_LAC",
"limit": 5
}
}Example response
{
"filters": {
"game_id": "2025_01_KC_LAC",
"player_id": null,
"team": null,
"season": null,
"week": null
},
"snap_counts": [
{
"game_id": "2025_01_KC_LAC",
"season": 2025,
"week": 1,
"team": "KC",
"opponent": "LAC",
"player": "Trey Smith",
"pfr_player_id": "SmitTr05",
"position": "G",
"offense_snaps": 61,
"offense_pct": 1,
"defense_snaps": 0,
"defense_pct": 0,
"st_snaps": 4,
"st_pct": 0.16
},
{
"game_id": "2025_01_KC_LAC",
"season": 2025,
"week": 1,
"team": "KC",
"opponent": "LAC",
"player": "Creed Humphrey",
"pfr_player_id": "HumpCr00",
"position": "C",
"offense_snaps": 61,
"offense_pct": 1,
"defense_snaps": 0,
"defense_pct": 0,
"st_snaps": 4,
"st_pct": 0.16
},
{
"game_id": "2025_01_KC_LAC",
"season": 2025,
"week": 1,
"team": "KC",
"opponent": "LAC",
"player": "Patrick Mahomes",
"pfr_player_id": "MahoPa00",
"position": "QB",
"offense_snaps": 61,
"offense_pct": 1,
"defense_snaps": 0,
"defense_pct": 0,
"st_snaps": 0,
"st_pct": 0
}
],
"count": 5,
"note": "Snap counts are keyed by PFR player id (see pfr_id on search_players)."
}Response fields
| Field | Type | Description |
|---|---|---|
| filters | object | |
| filters.game_id | string | |
| filters.player_id | null | |
| filters.team | null | |
| filters.season | null | |
| filters.week | null | |
| snap_counts[] | array | List of objects |
| snap_counts[].game_id | string | |
| snap_counts[].season | number | |
| snap_counts[].week | number | |
| snap_counts[].team | string | |
| snap_counts[].opponent | string | |
| snap_counts[].player | string | |
| snap_counts[].pfr_player_id | string | |
| snap_counts[].position | string | |
| snap_counts[].offense_snaps | number | |
| snap_counts[].offense_pct | number | |
| snap_counts[].defense_snaps | number | |
| snap_counts[].defense_pct | number | |
| snap_counts[].st_snaps | number | |
| snap_counts[].st_pct | number | |
| count | number | |
| note | string |
get_advanced_stats
5 creditsNext Gen Stats tracking metrics and Pro Football Reference advanced stats
When to use: The box score says a receiver had 80 yards; this says how open he was getting and how far downfield the ball travelled. Next Gen Stats for tracking (separation, cushion, time to throw, completion percentage above expectation, rush yards over expected) and Pro Football Reference for charting (pressures, hurries, blitzes, drops, bad throws, missed tackles, coverage allowed).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| source | enum: ngs_passing | ngs_rushing | ngs_receiving | pfr_passing | pfr_rushing | pfr_receiving | pfr_defense | required | Which dataset: ngs_passing, ngs_rushing, ngs_receiving, pfr_passing, pfr_rushing, pfr_receiving, pfr_defense |
| season | string | number | optional | Season year. Defaults to current. NGS from 2016, PFR from 2018. |
| week | integer | optional | Week. NGS also publishes week 0 as the season aggregate. |
| player_id | string | optional | GSIS id for an ngs_* source, PFR id for a pfr_* source; both are on search_players |
| team | string | optional | Team code |
| limit | integer | optional | Max rows (default 50) |
Example request
{
"tool": "get_advanced_stats",
"arguments": {
"source": "ngs_passing",
"season": 2025,
"week": 1,
"limit": 3
}
}Example response
{
"source": "ngs_passing",
"season": 2025,
"player_id_kind": "gsis (see search_players player_id)",
"metric_keys": [
"aggressiveness",
"attempts",
"avg_air_distance"
],
"stats": [
{
"season": 2025,
"season_type": "REG",
"week": 1,
"player_id": "00-0023459",
"name": "Aaron Rodgers",
"position": "QB",
"team": "PIT",
"metrics": {
"attempts": 30,
"pass_yards": 244,
"completions": 22,
"interceptions": 0,
"passer_rating": 136.66666666666666,
"aggressiveness": 20,
"pass_touchdowns": 4,
"avg_air_distance": 17.15366205115652,
"max_air_distance": 36.97500912778792,
"avg_time_to_throw": 2.4343999999999997,
"completion_percentage": 73.33333333333333,
"avg_intended_air_yards": 4.31,
"avg_air_yards_to_sticks": -5.034827586206897,
"avg_completed_air_yards": 2.8531818181818185,
"avg_air_yards_differential": -1.4568181818181811,
"max_completed_air_distance": 36.39469329449006,
"expected_completion_percentage": 68.06099999999999,
"completion_percentage_above_expectation": 5.272333333333336
}
},
{
"season": 2025,
"season_type": "REG",
"week": 1,
"player_id": "00-0034855",
"name": "Baker Mayfield",
"position": "QB",
"team": "TB",
"metrics": {
"attempts": 32,
"pass_yards": 167,
"completions": 17,
"interceptions": 0,
"passer_rating": 99.34895833333334,
"aggressiveness": 18.75,
"pass_touchdowns": 3,
"avg_air_distance": 22.25247455358224,
"max_air_distance": 44.36180564404474,
"avg_time_to_throw": 2.949468749999999,
"completion_percentage": 53.125,
"avg_intended_air_yards": 10.207,
"avg_air_yards_to_sticks": 2.5403333333333338,
"avg_completed_air_yards": 7.114705882352942,
"avg_air_yards_differential": -3.092294117647059,
"max_completed_air_distance": 38.369322381298325,
"expected_completion_percentage": 56.45343750000001,
"completion_percentage_above_expectation": -3.328437500000007
}
},
{
"season": 2025,
"season_type": "REG",
"week": 1,
"player_id": "00-0039732",
"name": "Bo Nix",
"position": "QB",
"team": "DEN",
"metrics": {
"attempts": 40,
"pass_yards": 176,
"completions": 25,
"interceptions": 2,
"passer_rating": 60,
"aggressiveness": 10,
"pass_touchdowns": 1,
"avg_air_distance": 18.761301472222446,
"max_air_distance": 44.05219631301032,
"avg_time_to_throw": 2.82785,
"completion_percentage": 62.5,
"avg_intended_air_yards": 6.033783783783784,
"avg_air_yards_to_sticks": -3.1824324324324316,
"avg_completed_air_yards": 3.0336000000000003,
"avg_air_yards_differential": -3.000183783783784,
"max_completed_air_distance": 36.07339324211128,
"expected_completion_percentage": 62.95599999999999,
"completion_percentage_above_expectation": -0.45599999999998886
}
}
],
"count": 3
}Response fields
| Field | Type | Description |
|---|---|---|
| source | string | |
| season | number | |
| player_id_kind | string | |
| metric_keys[] | array | List of string |
| stats[] | array | List of objects |
| stats[].season | number | |
| stats[].season_type | string | |
| stats[].week | number | |
| stats[].player_id | string | |
| stats[].name | string | |
| stats[].position | string | |
| stats[].team | string | |
| stats[].metrics | object | |
| stats[].metrics.attempts | number | |
| stats[].metrics.pass_yards | number | |
| stats[].metrics.completions | number | |
| stats[].metrics.interceptions | number | |
| stats[].metrics.passer_rating | number | |
| stats[].metrics.aggressiveness | number | |
| stats[].metrics.pass_touchdowns | number | |
| stats[].metrics.avg_air_distance | number | |
| stats[].metrics.max_air_distance | number | |
| stats[].metrics.avg_time_to_throw | number | |
| stats[].metrics.completion_percentage | number | |
| stats[].metrics.avg_intended_air_yards | number | |
| stats[].metrics.avg_air_yards_to_sticks | number | |
| stats[].metrics.avg_completed_air_yards | number | |
| stats[].metrics.avg_air_yards_differential | number | |
| stats[].metrics.max_completed_air_distance | number | |
| stats[].metrics.expected_completion_percentage | number | |
| stats[].metrics.completion_percentage_above_expectation | number | |
| count | number |
Multi-table
10 credits/callget_game_detail
10 creditsFull game detail with team stats, starting QBs, odds, weather, and officials
When to use: You need everything about one game on one call: box score for both teams, per-book odds, officials, weather, surface.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| game_id | string | required | Game id, e.g. 2025_01_KC_BUF |
Example request
{
"tool": "get_game_detail",
"arguments": {
"game_id": "2025_01_KC_LAC"
}
}Example response
{
"game": {
"game_id": "2025_01_KC_LAC",
"season": 2025,
"game_type": "REG",
"week": 1,
"gameday": "2025-09-05",
"weekday": "Friday",
"kickoff": "2025-09-06T00:00:00.000Z",
"away_team": "KC",
"home_team": "LAC",
"away_score": 21,
"home_score": 27,
"result": 6,
"total": 48,
"overtime": 0,
"status": "FINAL",
"location": "Neutral",
"stadium": "SoFi Stadium",
"roof": "dome",
"surface": null,
"temp": null,
"wind": null,
"div_game": true,
"away_rest": 7,
"home_rest": 7,
"spread_line": -3,
"total_line": 47.5,
"away_moneyline": -175,
"home_moneyline": 145,
"away_qb_name": "Patrick Mahomes",
"home_qb_name": "Justin Herbert",
"away_qb_id": "00-0033873",
"home_qb_id": "00-0036355",
"away_coach": "Andy Reid",
"home_coach": "Jim Harbaugh",
"referee": "Carl Cheffers",
"espn_id": "401772714",
"pfr_id": "202509050sdg"
},
"home_team": {
"abbrev": "LAC",
"name": "Los Angeles Chargers",
"nick": "Chargers",
"conference": "AFC",
"division": "AFC West",
"teamId": "4400",
"color": "#007BC7",
"color2": "#ffc20e",
"color3": "#ffb612",
"color4": "#001532",
"logoEspn": "https://a.espncdn.com/i/teamlogos/nfl/500/lac.png",
"logoWikipedia": "https://upload.wikimedia.org/wikipedia/en/thumb/7/72/NFL_Chargers_logo.svg/100px-NFL_Chargers_logo.svg.png",
"logoSquared": "https://github.com/nflverse/nflverse-pbp/raw/master/squared_logos/LAC.png",
"wordmark": "https://github.com/nflverse/nflverse-pbp/raw/master/wordmarks/LAC.png",
"active": true,
"relocatedTo": null
},
"away_team": {
"abbrev": "KC",
"name": "Kansas City Chiefs",
"nick": "Chiefs",
"conference": "AFC",
"division": "AFC West",
"teamId": "2310",
"color": "#E31837",
"color2": "#FFB612",
"color3": "#000000",
"color4": "#e31837",
"logoEspn": "https://a.espncdn.com/i/teamlogos/nfl/500/kc.png",
"logoWikipedia": "https://upload.wikimedia.org/wikipedia/en/thumb/e/e1/Kansas_City_Chiefs_logo.svg/100px-Kansas_City_Chiefs_logo.svg.png",
"logoSquared": "https://github.com/nflverse/nflverse-pbp/raw/master/squared_logos/KC.png",
"wordmark": "https://github.com/nflverse/nflverse-pbp/raw/master/wordmarks/KC.png",
"active": true,
"relocatedTo": null
},
"consensus_closing": {
"spread_line": -3,
"total_line": 47.5,
"home_moneyline": 145,
"away_moneyline": -175
},
"team_stats": {
"home": {
"id": 18,
"season": 2025,
"week": 1,
"team": "LAC",
"seasonType": "REG",
"gameId": "2025_01_KC_LAC",
"opponentTeam": "KC",
"completions": 25,
"attempts": 34,
"passingYards": 318,
"passingTds": 3,
"passingInterceptions": 0,
"sacksSuffered": 3,
"sackYardsLost": -14,
"sackFumbles": 0,
"sackFumblesLost": 0,
"passingAirYards": 342,
"passingYardsAfterCatch": 134,
"passingFirstDowns": 16,
"passingEpa": 17.567263,
"passingCpoe": 5.788768,
"passing2ptConversions": 0,
"passing10": 12,
"passing16": 7,
"passing20": 4,
"passing40": 0,
"carries": 25,
"rushingYards": 90,
"rushingTds": 0,
"rushingFumbles": 0,
"rushingFumblesLost": 0,
"rushingFirstDowns": 6,
"rushingEpa": -0.23139648,
"rushing2ptConversions": 0,
"rushing10": 2,
"rushing12": 1,
"rushing20": 0,
"rushing40": 0,
"receptions": 25,
"targets": 34,
"receivingYards": 318,
"receivingTds": 3,
"receivingFumbles": 1,
"receivingFumblesLost": 0,
"receivingAirYards": 342,
"receivingYardsAfterCatch": 134,
"receivingFirstDowns": 16,
"receivingEpa": 21.656591,
"receiving2ptConversions": 0,
"receiving10": 12,
"receiving16": 7,
"receiving20": 4,
"receiving40": 0,
"specialTeamsTds": 0,
"defTacklesSolo": 36,
"defTacklesWithAssist": 0,
"defTackleAssists": 24,
"defTacklesForLoss": 3,
"defTacklesForLossYards": 10,
"defFumblesForced": 0,
"defSacks": 2,
"defSackYards": 9,
"defQbHits": 8,
"defInterceptions": 0,
"defInterceptionYards": 0,
"defPassDefended": 4,
"defTds": 0,
"defFumbles": 0,
"defSafeties": 0,
"defPuntBlocks": 0,
"defPatBlocks": 0,
"defFgBlocks": 0,
"def2ptAtts": 0,
"def2ptMade": 0,
"miscYards": 0,
"fumbleRecoveryOwn": 0,
"fumbleRecoveryYardsOwn": 0,
"fumbleRecoveryOpp": 0,
"fumbleRecoveryYardsOpp": 0,
"fumbleRecoveryTds": 0,
"penalties": 6,
"penaltyYards": 49,
"fumblesForcedByOpp": 1,
"fumblesNotForced": 0,
"fumblesOutOfBounds": 1,
"fumblesTotal": 1,
"fumblesLostTotal": 0,
"puntReturns": 0,
"puntReturnYards": 0,
"kickoffReturns": 3,
"kickoffReturnYards": 67,
"fgMade": 2,
"fgAtt": 2,
"fgMissed": 0,
"fgBlocked": 0,
"fgLong": 39,
"fgPct": 1,
"fgMade019": 0,
"fgMade2029": 0,
"fgMade3039": 2,
"fgMade4049": 0,
"fgMade5059": 0,
"fgMade60": 0,
"fgMissed019": 0,
"fgMissed2029": 0,
"fgMissed3039": 0,
"fgMissed4049": 0,
"fgMissed5059": 0,
"fgMissed60": 0,
"fgMadeList": "39;36",
"fgMissedList": null,
"fgBlockedList": null,
"fgMadeDistance": 75,
"fgMissedDistance": 0,
"fgBlockedDistance": 0,
"patMade": 3,
"patAtt": 3,
"patMissed": 0,
"patBlocked": 0,
"patPct": 1,
"gwfgMade": 0,
"gwfgAtt": 0,
"gwfgMissed": 0,
"gwfgBlocked": 0,
"gwfgDistance": 0,
"ptAtt": 2,
"ptBlocked": 0,
"ptLong": 56,
"ptYards": 106,
"ptInside20": 0,
"ptOutOfBounds": 0,
"ptDowned": 0,
"ptTouchback": 0,
"ptFairCaught": 0,
"ptReturned": 2,
"ptReturnYards": 7,
"ptReturnTds": 0,
"ptNetYards": 99,
"timeouts": 1
},
"away": {
"id": 16,
"season": 2025,
"week": 1,
"team": "KC",
"seasonType": "REG",
"gameId": "2025_01_KC_LAC",
"opponentTeam": "LAC",
"completions": 24,
"attempts": 39,
"passingYards": 258,
"passingTds": 1,
"passingInterceptions": 0,
"sacksSuffered": 2,
"sackYardsLost": -9,
"sackFumbles": 0,
"sackFumblesLost": 0,
"passingAirYards": 271,
"passingYardsAfterCatch": 116,
"passingFirstDowns": 9,
"passingEpa": 3.4485526,
"passingCpoe": -5.9927764,
"passing2ptConversions": 0,
"passing10": 9,
"passing16": 4,
"passing20": 3,
"passing40": 1,
"carries": 17,
"rushingYards": 98,
"rushingTds": 1,
"rushingFumbles": 0,
"rushingFumblesLost": 0,
"rushingFirstDowns": 8,
"rushingEpa": 8.906441,
"rushing2ptConversions": 0,
"rushing10": 5,
"rushing12": 1,
"rushing20": 0,
"rushing40": 0,
"receptions": 24,
"targets": 38,
"receivingYards": 258,
"receivingTds": 1,
"receivingFumbles": 0,
"receivingFumblesLost": 0,
"receivingAirYards": 271,
"receivingYardsAfterCatch": 116,
"receivingFirstDowns": 9,
"receivingEpa": 5.5701094,
"receiving2ptConversions": 0,
"receiving10": 9,
"receiving16": 4,
"receiving20": 3,
"receiving40": 1,
"specialTeamsTds": 0,
"defTacklesSolo": 40,
"defTacklesWithAssist": 2,
"defTackleAssists": 18,
"defTacklesForLoss": 6,
"defTacklesForLossYards": 17,
"defFumblesForced": 1,
"defSacks": 3,
"defSackYards": 14,
"defQbHits": 4,
"defInterceptions": 0,
"defInterceptionYards": 0,
"defPassDefended": 2,
"defTds": 0,
"defFumbles": 0,
"defSafeties": 0,
"defPuntBlocks": 0,
"defPatBlocks": 0,
"defFgBlocks": 0,
"def2ptAtts": 0,
"def2ptMade": 0,
"miscYards": 0,
"fumbleRecoveryOwn": 1,
"fumbleRecoveryYardsOwn": 0,
"fumbleRecoveryOpp": 0,
"fumbleRecoveryYardsOpp": 0,
"fumbleRecoveryTds": 0,
"penalties": 10,
"penaltyYards": 71,
"fumblesForcedByOpp": 0,
"fumblesNotForced": 1,
"fumblesOutOfBounds": 0,
"fumblesTotal": 1,
"fumblesLostTotal": 0,
"puntReturns": 2,
"puntReturnYards": 7,
"kickoffReturns": 5,
"kickoffReturnYards": 147,
"fgMade": 3,
"fgAtt": 3,
"fgMissed": 0,
"fgBlocked": 0,
"fgLong": 59,
"fgPct": 1,
"fgMade019": 0,
"fgMade2029": 1,
"fgMade3039": 1,
"fgMade4049": 0,
"fgMade5059": 1,
"fgMade60": 0,
"fgMissed019": 0,
"fgMissed2029": 0,
"fgMissed3039": 0,
"fgMissed4049": 0,
"fgMissed5059": 0,
"fgMissed60": 0,
"fgMadeList": "35;59;27",
"fgMissedList": null,
"fgBlockedList": null,
"fgMadeDistance": 121,
"fgMissedDistance": 0,
"fgBlockedDistance": 0,
"patMade": 0,
"patAtt": 1,
"patMissed": 1,
"patBlocked": 0,
"patPct": 0,
"gwfgMade": 0,
"gwfgAtt": 0,
"gwfgMissed": 0,
"gwfgBlocked": 0,
"gwfgDistance": 0,
"ptAtt": 3,
"ptBlocked": 0,
"ptLong": 40,
"ptYards": 116,
"ptInside20": 1,
"ptOutOfBounds": 1,
"ptDowned": 1,
"ptTouchback": 0,
"ptFairCaught": 1,
"ptReturned": 0,
"ptReturnYards": 0,
"ptReturnTds": 0,
"ptNetYards": 116,
"timeouts": 6
}
},
"odds": {
"opening_closing": [],
"latest": []
},
"officials": []
}Response fields
| Field | Type | Description |
|---|---|---|
| game | object | |
| game.game_id | string | |
| game.season | number | |
| game.game_type | string | |
| game.week | number | |
| game.gameday | string | |
| game.weekday | string | |
| game.kickoff | string | |
| game.away_team | string | |
| game.home_team | string | |
| game.away_score | number | |
| game.home_score | number | |
| game.result | number | |
| game.total | number | |
| game.overtime | number | |
| game.status | string | |
| game.location | string | |
| game.stadium | string | |
| game.roof | string | |
| game.surface | null | |
| game.temp | null | |
| game.wind | null | |
| game.div_game | boolean | |
| game.away_rest | number | |
| game.home_rest | number | |
| game.spread_line | number | |
| game.total_line | number | |
| game.away_moneyline | number | |
| game.home_moneyline | number | |
| game.away_qb_name | string | |
| game.home_qb_name | string | |
| game.away_qb_id | string | |
| game.home_qb_id | string | |
| game.away_coach | string | |
| game.home_coach | string | |
| game.referee | string | |
| game.espn_id | string | |
| game.pfr_id | string | |
| home_team | object | |
| home_team.abbrev | string |
get_head_to_head
10 creditsMatchup history with win/loss records and margins
When to use: You are previewing a matchup and want the recent history between two teams with margins.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| team1 | string | required | First team code |
| team2 | string | required | Second team code |
| season | string | number | optional | Season year. Omit for all-time. |
| limit | integer | optional | Max games (default 20) |
Example request
{
"tool": "get_head_to_head",
"arguments": {
"team1": "KC",
"team2": "BUF",
"limit": 5
}
}Example response
{
"team1": "KC",
"team2": "BUF",
"record": {
"KC": 2,
"BUF": 3,
"ties": 0
},
"total_games": 5,
"avg_margin_team1": -2.6,
"games": [
{
"game_id": "2025_09_KC_BUF",
"season": 2025,
"game_type": "REG",
"week": 9,
"gameday": "2025-11-02",
"weekday": "Sunday",
"kickoff": "2025-11-02T21:25:00.000Z",
"away_team": "KC",
"home_team": "BUF",
"away_score": 21,
"home_score": 28,
"result": 7,
"total": 49,
"overtime": 0,
"status": "FINAL",
"location": "Home",
"stadium": "New Era Field",
"roof": "outdoors",
"surface": "a_turf",
"temp": 54,
"wind": 6,
"div_game": false,
"away_rest": 6,
"home_rest": 7,
"spread_line": -2.5,
"total_line": 53.5,
"away_moneyline": -135,
"home_moneyline": 114,
"away_qb_name": "Patrick Mahomes",
"home_qb_name": "Josh Allen",
"away_qb_id": "00-0033873",
"home_qb_id": "00-0034857",
"away_coach": "Andy Reid",
"home_coach": "Sean McDermott",
"referee": "Carl Cheffers",
"espn_id": "401772768",
"pfr_id": "202511020buf"
},
{
"game_id": "2024_21_BUF_KC",
"season": 2024,
"game_type": "CON",
"week": 21,
"gameday": "2025-01-26",
"weekday": "Sunday",
"kickoff": "2025-01-26T23:30:00.000Z",
"away_team": "BUF",
"home_team": "KC",
"away_score": 29,
"home_score": 32,
"result": 3,
"total": 61,
"overtime": 0,
"status": "FINAL",
"location": "Home",
"stadium": "GEHA Field at Arrowhead Stadium",
"roof": "outdoors",
"surface": "grass",
"temp": 31,
"wind": 8,
"div_game": false,
"away_rest": 7,
"home_rest": 8,
"spread_line": 1.5,
"total_line": 49.5,
"away_moneyline": -102,
"home_moneyline": -118,
"away_qb_name": "Josh Allen",
"home_qb_name": "Patrick Mahomes",
"away_qb_id": "00-0034857",
"home_qb_id": "00-0033873",
"away_coach": "Sean McDermott",
"home_coach": "Andy Reid",
"referee": "Clete Blakeman",
"espn_id": "401671887",
"pfr_id": "202501260kan"
},
{
"game_id": "2024_11_KC_BUF",
"season": 2024,
"game_type": "REG",
"week": 11,
"gameday": "2024-11-17",
"weekday": "Sunday",
"kickoff": "2024-11-17T21:25:00.000Z",
"away_team": "KC",
"home_team": "BUF",
"away_score": 21,
"home_score": 30,
"result": 9,
"total": 51,
"overtime": 0,
"status": "FINAL",
"location": "Home",
"stadium": "New Era Field",
"roof": "outdoors",
"surface": "a_turf",
"temp": 50,
"wind": 3,
"div_game": false,
"away_rest": 7,
"home_rest": 7,
"spread_line": 2.5,
"total_line": 46.5,
"away_moneyline": 120,
"home_moneyline": -142,
"away_qb_name": "Patrick Mahomes",
"home_qb_name": "Josh Allen",
"away_qb_id": "00-0033873",
"home_qb_id": "00-0034857",
"away_coach": "Andy Reid",
"home_coach": "Sean McDermott",
"referee": "Land Clark",
"espn_id": "401671665",
"pfr_id": "202411170buf"
}
],
"count": 5
}Response fields
| Field | Type | Description |
|---|---|---|
| team1 | string | |
| team2 | string | |
| record | object | |
| record.KC | number | |
| record.BUF | number | |
| record.ties | number | |
| total_games | number | |
| avg_margin_team1 | number | |
| games[] | array | List of objects |
| games[].game_id | string | |
| games[].season | number | |
| games[].game_type | string | |
| games[].week | number | |
| games[].gameday | string | |
| games[].weekday | string | |
| games[].kickoff | string | |
| games[].away_team | string | |
| games[].home_team | string | |
| games[].away_score | number | |
| games[].home_score | number | |
| games[].result | number | |
| games[].total | number | |
| games[].overtime | number | |
| games[].status | string | |
| games[].location | string | |
| games[].stadium | string | |
| games[].roof | string | |
| games[].surface | string | |
| games[].temp | number | |
| games[].wind | number | |
| games[].div_game | boolean | |
| games[].away_rest | number | |
| games[].home_rest | number | |
| games[].spread_line | number | |
| games[].total_line | number | |
| games[].away_moneyline | number | |
| games[].home_moneyline | number | |
| games[].away_qb_name | string | |
| games[].home_qb_name | string | |
| games[].away_qb_id | string |
get_plays
10 creditsPlay-by-play with EPA, win probability, situation filters, and optional FTN charting
When to use: You are doing play-level analysis: EPA, WPA, success rate, and situation filters (down, red zone, win-probability band) with pagination. Set include_charting for FTN's manual charting from 2022 on, or filter straight on it with is_play_action, is_motion, is_rpo, is_screen_pass, is_no_huddle, is_trick_play, is_qb_out_of_pocket, is_drop, and min_blitzers.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| game_id | string | optional | Game id, e.g. 2025_01_KC_BUF |
| season | string | number | optional | Season year (required when game_id is not set) |
| week | integer | optional | Week |
| posteam | string | optional | Offense team code |
| defteam | string | optional | Defense team code |
| play_type | enum: pass | run | punt | kickoff | field_goal | extra_point | qb_kneel | qb_spike | no_play | optional | Play type |
| down | integer | optional | Down |
| quarter | integer | optional | Quarter (5+ = overtime) |
| passer_id | string | optional | GSIS id of the passer |
| rusher_id | string | optional | GSIS id of the rusher |
| receiver_id | string | optional | GSIS id of the receiver |
| min_wp | number | optional | Minimum pre-play win probability for the offense |
| max_wp | number | optional | Maximum pre-play win probability |
| red_zone | boolean | optional | Only plays inside the 20 |
| third_down | boolean | optional | Only third downs |
| include_charting | boolean | optional | Attach FTN manual charting to each play (2022+): alignment, motion, play action, screens, RPO, blitzers, drops |
| is_play_action | boolean | optional | Charting filter: play action (2022+) |
| is_motion | boolean | optional | Charting filter: pre-snap motion (2022+) |
| is_rpo | boolean | optional | Charting filter: run-pass option (2022+) |
| is_screen_pass | boolean | optional | Charting filter: screen pass (2022+) |
| is_no_huddle | boolean | optional | Charting filter: no huddle (2022+) |
| is_trick_play | boolean | optional | Charting filter: trick play (2022+) |
| is_qb_out_of_pocket | boolean | optional | Charting filter: quarterback out of the pocket (2022+) |
| is_drop | boolean | optional | Charting filter: charted drop (2022+) |
| min_blitzers | integer | optional | Charting filter: at least this many blitzers (2022+). FTN counts rushers beyond the base rush, so this is typically 0-3; 5+ is almost never charted. |
| limit | integer | optional | Max plays (default 200) |
| offset | integer | optional | Pagination offset |
Example request
{
"tool": "get_plays",
"arguments": {
"season": 2025,
"posteam": "KC",
"is_play_action": true,
"include_charting": true,
"limit": 5
}
}Example response
{
"plays": [
{
"game_id": "2025_01_KC_LAC",
"play_id": 476,
"season": 2025,
"week": 1,
"posteam": "KC",
"defteam": "LAC",
"qtr": 1,
"time": "07:57",
"down": 2,
"ydstogo": 9,
"yardline_100": 53,
"yrdln": "KC 47",
"play_type": "pass",
"desc": "(7:57) (Shotgun) 15-P.Mahomes pass short left to 87-T.Kelce to LAC 43 for 10 yards (32-A.Gilman).",
"yards_gained": 10,
"epa": 1.121511,
"wpa": 0.019656122,
"wp": 0.25632313,
"vegas_wp": 0.4229564,
"success": 1,
"first_down": 1,
"touchdown": 0,
"interception": 0,
"fumble_lost": 0,
"sack": 0,
"penalty": 0,
"penalty_type": null,
"shotgun": 1,
"no_huddle": 0,
"pass_length": "short",
"pass_location": "left",
"air_yards": 10,
"yards_after_catch": 0,
"run_location": null,
"run_gap": null,
"cpoe": 33.012028,
"xpass": 0.70471954,
"passer_player_id": "00-0033873",
"passer_player_name": "P.Mahomes",
"rusher_player_id": null,
"rusher_player_name": null,
"receiver_player_id": "00-0030506",
"receiver_player_name": "T.Kelce",
"posteam_score": 0,
"defteam_score": 7,
"score_differential": -7,
"drive": 3,
"drive_result": "Punt",
"series_result": "First down",
"charting": {
"starting_hash": "M",
"qb_location": "S",
"n_offense_backfield": 1,
"n_defense_box": 6,
"n_blitzers": 0,
"n_pass_rushers": 4,
"is_no_huddle": false,
"is_motion": true,
"is_play_action": true,
"is_screen_pass": false,
"is_rpo": false,
"is_trick_play": false,
"is_qb_out_of_pocket": false,
"is_qb_sneak": false,
"is_qb_fault_sack": false,
"is_interception_worthy": false,
"is_throw_away": false,
"is_catchable_ball": true,
"is_contested_ball": false,
"is_created_reception": false,
"is_drop": false,
"read_thrown": "1"
}
},
{
"game_id": "2025_01_KC_LAC",
"play_id": 726,
"season": 2025,
"week": 1,
"posteam": "KC",
"defteam": "LAC",
"qtr": 1,
"time": "04:28",
"down": 1,
"ydstogo": 10,
"yardline_100": 58,
"yrdln": "KC 42",
"play_type": "pass",
"desc": "(4:28) (Shotgun) 15-P.Mahomes pass incomplete short left to 5-M.Brown.",
"yards_gained": 0,
"epa": -0.53228486,
"wpa": -0.015009612,
"wp": 0.26707566,
"vegas_wp": 0.4783187,
"success": 0,
"first_down": 0,
"touchdown": 0,
"interception": 0,
"fumble_lost": 0,
"sack": 0,
"penalty": 0,
"penalty_type": null,
"shotgun": 1,
"no_huddle": 0,
"pass_length": "short",
"pass_location": "left",
"air_yards": 11,
"yards_after_catch": null,
"run_location": null,
"run_gap": null,
"cpoe": -67.34852,
"xpass": 0.5162144,
"passer_player_id": "00-0033873",
"passer_player_name": "P.Mahomes",
"rusher_player_id": null,
"rusher_player_name": null,
"receiver_player_id": "00-0035662",
"receiver_player_name": "M.Brown",
"posteam_score": 0,
"defteam_score": 7,
"score_differential": -7,
"drive": 5,
"drive_result": "Punt",
"series_result": "Punt",
"charting": {
"starting_hash": "L",
"qb_location": "S",
"n_offense_backfield": 2,
"n_defense_box": 5,
"n_blitzers": 2,
"n_pass_rushers": 6,
"is_no_huddle": false,
"is_motion": false,
"is_play_action": true,
"is_screen_pass": false,
"is_rpo": false,
"is_trick_play": false,
"is_qb_out_of_pocket": false,
"is_qb_sneak": false,
"is_qb_fault_sack": false,
"is_interception_worthy": true,
"is_throw_away": false,
"is_catchable_ball": false,
"is_contested_ball": false,
"is_created_reception": false,
"is_drop": false,
"read_thrown": "1"
}
},
{
"game_id": "2025_01_KC_LAC",
"play_id": 1342,
"season": 2025,
"week": 1,
"posteam": "KC",
"defteam": "LAC",
"qtr": 2,
"time": "10:13",
"down": 1,
"ydstogo": 10,
"yardline_100": 41,
"yrdln": "LAC 41",
"play_type": "run",
"desc": "(10:13) 15-P.Mahomes scrambles left end ran ob at LAC 37 for 4 yards (3-D.James).",
"yards_gained": 4,
"epa": -0.19704096,
"wpa": 0.005089611,
"wp": 0.20828883,
"vegas_wp": 0.34518102,
"success": 0,
"first_down": 0,
"touchdown": 0,
"interception": 0,
"fumble_lost": 0,
"sack": 0,
"penalty": 0,
"penalty_type": null,
"shotgun": 0,
"no_huddle": 0,
"pass_length": null,
"pass_location": null,
"air_yards": null,
"yards_after_catch": null,
"run_location": "left",
"run_gap": "end",
"cpoe": null,
"xpass": 0.50771487,
"passer_player_id": null,
"passer_player_name": null,
"rusher_player_id": "00-0033873",
"rusher_player_name": "P.Mahomes",
"receiver_player_id": null,
"receiver_player_name": null,
"posteam_score": 0,
"defteam_score": 10,
"score_differential": -10,
"drive": 7,
"drive_result": "Field goal",
"series_result": "First down",
"charting": {
"starting_hash": "R",
"qb_location": "U",
"n_offense_backfield": 2,
"n_defense_box": 7,
"n_blitzers": 0,
"n_pass_rushers": 4,
"is_no_huddle": false,
"is_motion": true,
"is_play_action": true,
"is_screen_pass": false,
"is_rpo": false,
"is_trick_play": false,
"is_qb_out_of_pocket": true,
"is_qb_sneak": false,
"is_qb_fault_sack": false,
"is_interception_worthy": false,
"is_throw_away": false,
"is_catchable_ball": false,
"is_contested_ball": false,
"is_created_reception": false,
"is_drop": false,
"read_thrown": "SD"
}
}
],
"summary": {
"plays": 5,
"epa_total": 0.36,
"epa_per_play": 0.072,
"success_rate": 0.4
},
"count": 5,
"charted_plays": 5,
"next_offset": 5
}Response fields
| Field | Type | Description |
|---|---|---|
| plays[] | array | List of objects |
| plays[].game_id | string | |
| plays[].play_id | number | |
| plays[].season | number | |
| plays[].week | number | |
| plays[].posteam | string | |
| plays[].defteam | string | |
| plays[].qtr | number | |
| plays[].time | string | |
| plays[].down | number | |
| plays[].ydstogo | number | |
| plays[].yardline_100 | number | |
| plays[].yrdln | string | |
| plays[].play_type | string | |
| plays[].desc | string | |
| plays[].yards_gained | number | |
| plays[].epa | number | |
| plays[].wpa | number | |
| plays[].wp | number | |
| plays[].vegas_wp | number | |
| plays[].success | number | |
| plays[].first_down | number | |
| plays[].touchdown | number | |
| plays[].interception | number | |
| plays[].fumble_lost | number | |
| plays[].sack | number | |
| plays[].penalty | number | |
| plays[].penalty_type | null | |
| plays[].shotgun | number | |
| plays[].no_huddle | number | |
| plays[].pass_length | string | |
| plays[].pass_location | string | |
| plays[].air_yards | number | |
| plays[].yards_after_catch | number | |
| plays[].run_location | null | |
| plays[].run_gap | null | |
| plays[].cpoe | number | |
| plays[].xpass | number | |
| plays[].passer_player_id | string | |
| plays[].passer_player_name | string |
get_odds
10 creditsOdds by game with bookmaker filters
When to use: You need lines for one game: the consensus closing line for any game since 1999, plus per-book opening, closing, and latest snapshots for 2026 onwards.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| game_id | string | required | Game id, e.g. 2026_01_KC_BUF |
| bookmaker | string | optional | Bookmaker key (draftkings, fanduel, betmgm, caesars, espnbet) |
| snapshot_type | enum: opening | closing | latest | optional | Return only one snapshot type. Default returns opening, closing, and latest per book. |
Example request
{
"tool": "get_odds",
"arguments": {
"game_id": "2025_01_KC_LAC"
}
}Example response
{
"game_id": "2025_01_KC_LAC",
"home_team": "LAC",
"away_team": "KC",
"kickoff": "2025-09-06T00:00:00.000Z",
"consensus_closing": {
"spread_line": -3,
"total_line": 47.5,
"home_moneyline": 145,
"away_moneyline": -175
},
"books": [],
"bookmaker_count": 0,
"count": 0,
"note": "No per-bookmaker snapshots stored for this game (snapshots begin with the 2026 season). consensus_closing is the nflverse closing line."
}Response fields
| Field | Type | Description |
|---|---|---|
| game_id | string | |
| home_team | string | |
| away_team | string | |
| kickoff | string | |
| consensus_closing | object | |
| consensus_closing.spread_line | number | |
| consensus_closing.total_line | number | |
| consensus_closing.home_moneyline | number | |
| consensus_closing.away_moneyline | number | |
| books[] | array | List |
| bookmaker_count | number | |
| count | number | |
| note | string |
Time-series
25 credits/callget_line_movement
25 creditsTime-series odds grouped by bookmaker
When to use: You are studying how a line moved: every hourly snapshot per bookmaker from first post to kickoff.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| game_id | string | required | Game id |
| bookmaker | string | optional | Bookmaker key filter |
Example request
{
"tool": "get_line_movement",
"arguments": {
"game_id": "2026_02_DET_BUF"
}
}Example response
{
"game_id": "2026_02_DET_BUF",
"home_team": "BUF",
"away_team": "DET",
"kickoff": "2026-09-18T00:15:00.000Z",
"movement": {
"betmgm": [
{
"bookmaker": "betmgm",
"snapshot_type": "snapshot",
"ml_home": -235,
"ml_away": 190,
"ml_home_prob": 0.70149255,
"ml_away_prob": 0.3448276,
"spread_home": -5.5,
"spread_home_odds": -110,
"spread_away": 5.5,
"spread_away_odds": -108,
"total": 55,
"total_over_odds": -110,
"total_under_odds": -110,
"captured_at": "2026-09-17T15:04:00.530Z"
},
{
"bookmaker": "betmgm",
"snapshot_type": "snapshot",
"ml_home": -235,
"ml_away": 200,
"ml_home_prob": 0.70149255,
"ml_away_prob": 0.33333334,
"spread_home": -5.5,
"spread_home_odds": -110,
"spread_away": 5.5,
"spread_away_odds": -108,
"total": 55,
"total_over_odds": -108,
"total_under_odds": -110,
"captured_at": "2026-09-17T15:08:01.468Z"
},
{
"bookmaker": "betmgm",
"snapshot_type": "snapshot",
"ml_home": -235,
"ml_away": 200,
"ml_home_prob": 0.70149255,
"ml_away_prob": 0.33333334,
"spread_home": -5.5,
"spread_home_odds": -110,
"spread_away": 5.5,
"spread_away_odds": -108,
"total": 55,
"total_over_odds": -108,
"total_under_odds": -110,
"captured_at": "2026-09-17T15:08:35.622Z"
}
],
"draftkings": [
{
"bookmaker": "draftkings",
"snapshot_type": "snapshot",
"ml_home": -238,
"ml_away": 195,
"ml_home_prob": 0.70414203,
"ml_away_prob": 0.33898306,
"spread_home": -5.5,
"spread_home_odds": -105,
"spread_away": 5.5,
"spread_away_odds": -115,
"total": 54.5,
"total_over_odds": -120,
"total_under_odds": 100,
"captured_at": "2026-09-17T15:04:00.530Z"
},
{
"bookmaker": "draftkings",
"snapshot_type": "snapshot",
"ml_home": -238,
"ml_away": 195,
"ml_home_prob": 0.70414203,
"ml_away_prob": 0.33898306,
"spread_home": -5.5,
"spread_home_odds": -105,
"spread_away": 5.5,
"spread_away_odds": -115,
"total": 54.5,
"total_over_odds": -120,
"total_under_odds": 100,
"captured_at": "2026-09-17T15:08:01.468Z"
},
{
"bookmaker": "draftkings",
"snapshot_type": "snapshot",
"ml_home": -238,
"ml_away": 195,
"ml_home_prob": 0.70414203,
"ml_away_prob": 0.33898306,
"spread_home": -5.5,
"spread_home_odds": -105,
"spread_away": 5.5,
"spread_away_odds": -115,
"total": 54.5,
"total_over_odds": -120,
"total_under_odds": 100,
"captured_at": "2026-09-17T15:08:35.622Z"
}
],
"espnbet": [
{
"bookmaker": "espnbet",
"snapshot_type": "snapshot",
"ml_home": -260,
"ml_away": 215,
"ml_home_prob": 0.7222222,
"ml_away_prob": 0.31746033,
"spread_home": -6,
"spread_home_odds": -105,
"spread_away": 6,
"spread_away_odds": -115,
"total": 54.5,
"total_over_odds": -115,
"total_under_odds": -105,
"captured_at": "2026-09-17T15:04:00.530Z"
},
{
"bookmaker": "espnbet",
"snapshot_type": "snapshot",
"ml_home": -260,
"ml_away": 215,
"ml_home_prob": 0.7222222,
"ml_away_prob": 0.31746033,
"spread_home": -6,
"spread_home_odds": -105,
"spread_away": 6,
"spread_away_odds": -115,
"total": 54.5,
"total_over_odds": -115,
"total_under_odds": -105,
"captured_at": "2026-09-17T15:08:01.468Z"
},
{
"bookmaker": "espnbet",
"snapshot_type": "snapshot",
"ml_home": -260,
"ml_away": 215,
"ml_home_prob": 0.7222222,
"ml_away_prob": 0.31746033,
"spread_home": -6,
"spread_home_odds": -105,
"spread_away": 6,
"spread_away_odds": -115,
"total": 54.5,
"total_over_odds": -115,
"total_under_odds": -105,
"captured_at": "2026-09-17T15:08:35.622Z"
}
],
"fanduel": [
{
"bookmaker": "fanduel",
"snapshot_type": "snapshot",
"ml_home": -255,
"ml_away": 210,
"ml_home_prob": 0.7183099,
"ml_away_prob": 0.32258064,
"spread_home": -5.5,
"spread_home_odds": -112,
"spread_away": 5.5,
"spread_away_odds": -108,
"total": 54.5,
"total_over_odds": -114,
"total_under_odds": -106,
"captured_at": "2026-09-17T15:04:00.530Z"
},
{
"bookmaker": "fanduel",
"snapshot_type": "snapshot",
"ml_home": -255,
"ml_away": 210,
"ml_home_prob": 0.7183099,
"ml_away_prob": 0.32258064,
"spread_home": -5.5,
"spread_home_odds": -112,
"spread_away": 5.5,
"spread_away_odds": -108,
"total": 54.5,
"total_over_odds": -114,
"total_under_odds": -106,
"captured_at": "2026-09-17T15:08:01.468Z"
},
{
"bookmaker": "fanduel",
"snapshot_type": "snapshot",
"ml_home": -255,
"ml_away": 210,
"ml_home_prob": 0.7183099,
"ml_away_prob": 0.32258064,
"spread_home": -5.5,
"spread_home_odds": -112,
"spread_away": 5.5,
"spread_away_odds": -108,
"total": 54.5,
"total_over_odds": -114,
"total_under_odds": -106,
"captured_at": "2026-09-17T15:08:35.622Z"
}
]
},
"snapshots": 28
}Response fields
| Field | Type | Description |
|---|---|---|
| game_id | string | |
| home_team | string | |
| away_team | string | |
| kickoff | string | |
| movement | object | |
| movement.betmgm[] | array | List of objects |
| movement.betmgm[].bookmaker | string | |
| movement.betmgm[].snapshot_type | string | |
| movement.betmgm[].ml_home | number | |
| movement.betmgm[].ml_away | number | |
| movement.betmgm[].ml_home_prob | number | |
| movement.betmgm[].ml_away_prob | number | |
| movement.betmgm[].spread_home | number | |
| movement.betmgm[].spread_home_odds | number | |
| movement.betmgm[].spread_away | number | |
| movement.betmgm[].spread_away_odds | number | |
| movement.betmgm[].total | number | |
| movement.betmgm[].total_over_odds | number | |
| movement.betmgm[].total_under_odds | number | |
| movement.betmgm[].captured_at | string | |
| movement.draftkings[] | array | List of objects |
| movement.draftkings[].bookmaker | string | |
| movement.draftkings[].snapshot_type | string | |
| movement.draftkings[].ml_home | number | |
| movement.draftkings[].ml_away | number | |
| movement.draftkings[].ml_home_prob | number | |
| movement.draftkings[].ml_away_prob | number | |
| movement.draftkings[].spread_home | number | |
| movement.draftkings[].spread_home_odds | number | |
| movement.draftkings[].spread_away | number | |
| movement.draftkings[].spread_away_odds | number | |
| movement.draftkings[].total | number | |
| movement.draftkings[].total_over_odds | number | |
| movement.draftkings[].total_under_odds | number | |
| movement.draftkings[].captured_at | string | |
| movement.espnbet[] | array | List of objects |
| movement.espnbet[].bookmaker | string | |
| movement.espnbet[].snapshot_type | string | |
| movement.espnbet[].ml_home | number | |
| movement.espnbet[].ml_away | number |