get_plays
Play-by-play with EPA, win probability, situation filters, and optional FTN charting
When to use it
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 | no | Game id, e.g. 2025_01_KC_BUF |
| season | string | number | no | Season year (required when game_id is not set) |
| week | integer | no | Week |
| posteam | string | no | Offense team code |
| defteam | string | no | Defense team code |
| play_type | enum: pass | run | punt | kickoff | field_goal | extra_point | qb_kneel | qb_spike | no_play | no | Play type |
| down | integer | no | Down |
| quarter | integer | no | Quarter (5+ = overtime) |
| passer_id | string | no | GSIS id of the passer |
| rusher_id | string | no | GSIS id of the rusher |
| receiver_id | string | no | GSIS id of the receiver |
| min_wp | number | no | Minimum pre-play win probability for the offense |
| max_wp | number | no | Maximum pre-play win probability |
| red_zone | boolean | no | Only plays inside the 20 |
| third_down | boolean | no | Only third downs |
| include_charting | boolean | no | Attach FTN manual charting to each play (2022+): alignment, motion, play action, screens, RPO, blitzers, drops |
| is_play_action | boolean | no | Charting filter: play action (2022+) |
| is_motion | boolean | no | Charting filter: pre-snap motion (2022+) |
| is_rpo | boolean | no | Charting filter: run-pass option (2022+) |
| is_screen_pass | boolean | no | Charting filter: screen pass (2022+) |
| is_no_huddle | boolean | no | Charting filter: no huddle (2022+) |
| is_trick_play | boolean | no | Charting filter: trick play (2022+) |
| is_qb_out_of_pocket | boolean | no | Charting filter: quarterback out of the pocket (2022+) |
| is_drop | boolean | no | Charting filter: charted drop (2022+) |
| min_blitzers | integer | no | 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 | no | Max plays (default 200) |
| offset | integer | no | Pagination offset |
Request
curl -X POST https://football-mcp-production.up.railway.app/v1/get_plays \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"season": 2025,
"posteam": "KC",
"is_play_action": true,
"include_charting": true,
"limit": 5
}'Over MCP, ask for it in plain English and the client calls get_plays itself. Point any MCP client at https://football-mcp-production.up.railway.app/mcp?key=YOUR_API_KEY.
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 |
Related endpoints
Takes the player_id this one returns.
Weekly and season stat lines for one player: passing, rushing, receiving, defense, kicking, fantasy
Takes the game_id this one returns.
Full game detail with team stats, starting QBs, odds, weather, and officials
Takes the game_id this one returns.
Odds by game with bookmaker filters
Returns the game_id this one takes.
Upcoming games by week or for the next N days
Try it
500 credits free on signup — 50 calls to get_plays — and no card.