GridIron Data API changelog
Quick answer: Everything that changed in the GridIron Data API, newest first. November 11, 2026 added DFS scoring fields to /stats box scores (two-point conversions, return touchdowns and a team defense line for DSTs) with 10 days of stat corrections, made name lookups forgiving (initials, suffixes, apostrophes) with "did you mean" suggestions, added game-day projection refreshes, a weekly projections report card and starters per slot on depth charts. November 9, 2026 let more AI assistants connect. November 7, 2026 added GridIron projections, our own weekly projections that Pro + Commercial customers may display. November 1, 2026 added depth charts and official inactives on Pro and GSIS/PFR id lookups. October 30, 2026 added Pro + Commercial, Pro plus a license to use the data in a commercial product, plus target and carry share (/usage) and box score lines on /stats. October 27, 2026 added offensive linemen on Pro, with injury status. October 26, 2026 put GridIron Data in ChatGPT, Claude, Claude Code and Cursor and made Pro the betting plan: prop probabilities, defense vs position, betting lines and per-stat projections need Pro. The same day opened the Classroom program (Basic free for a term for students) and the affiliate program. October 23, 2026 added that betting data and injury statuses that update within minutes. October 22, 2026 limited the free plan to player lookups and this week's projections; everything else starts at Basic. September 28, 2026 changed the free plan to 50 requests a month with no daily cap. September 26, 2026 added a free plan and the Pro injury changes feed, stopped keys expiring while subscribed, and fixed resubscribing, filtered /players pages, x-api-key casing and 404s.
What changed on ?
AddedDFS scoring fields on /stats box scores, with stat corrections
Each week's box_score on /stats now carries two_pt (two-point conversions), return_td (kickoff, punt and blocked-kick return touchdowns) and fumble_recovery_td, the pieces DraftKings-style scoring needs beyond the passing, rushing and receiving line. A DST's box_score is now its team defense line: sacks, interceptions, fumble_recoveries, def_td, return_td, safeties, blocked_kicks, two_pt_return and points_allowed. Box scores now load every morning, and stats are refreshed for 10 days after each game, so NFL stat corrections made in that window are reflected. Docs →
FixedName lookups find players with initials, suffixes and apostrophes
Lookups by name and position (on /stats, /snaps, /news, /deviations, /matchups and /players) used to need the name exactly as stored, so "DJ Moore", "Kenneth Walker" or "Devon Achane" found nobody. They now ignore capitalization, periods, apostrophes, hyphens, accents and Jr./Sr./II–V suffixes. A loose match is used only when it points to exactly one player at that position, so you never get the wrong player. An exact name still wins. /players/search matches the same way. When nothing matches, the 404 now lists up to three close names in did_you_mean. Docs →
FixedA per-player route without a player returns 400, not 500
Calling a per-player route with nothing after the slash (for example GET /api/v1/news/) returned a 500. It now returns a 400 that shows how to call the route.
ChangedGridIron projections v1.3: game-day refreshes
Projections now refresh on game day once inactives are announced (Sunday early and late windows, and before Thursday, Sunday and Monday night games): inactive players project 0 and their teammates pick up the work. Touchdown estimates also blend in pre-kickoff market prices. A game's projections freeze at kickoff, so what you displayed before the game is what gets graded. model_version is now gridiron-v1.3; fields are unchanged. Docs →
AddedA weekly report card for GridIron projections
Every Tuesday we publish how last week's GridIron projections did against actual results: the average miss against a simple last-four-games average, by position, the closest calls and the biggest misses. The first one is Week 9.
ChangedDepth charts: a starter for every slot, defensive groups and injury status
Each /depth-charts row now has depth (order within its formation slot) and starter, so starters=true returns the first player in every slot, for example three receivers in the base offense, not one. A new depth= filter returns each slot's backups (depth=2). position= accepts defensive groups (DE, DT, DL, LB, CB, S, DB, EDGE). Every row also carries injury_status and available. Docs →
What changed on ?
ChangedMore AI assistants can connect
Perplexity, Microsoft Copilot Studio and Gemini can now sign in to the GridIron Data MCP server, alongside ChatGPT, Claude, Claude Code and Cursor. Directories and clients can list the tools before signing in, and every tool carries full metadata. Each assistant has its own setup guide, linked from the MCP guide.
What changed on ?
ChangedGridIron projections v1.2: player props, snap share and a bias correction
The model now blends sportsbook player prop lines into each stat where books post them, uses each player's snap share (a jump or drop in the last game signals a role change before the averages catch it), and corrects, per position, any lean high or low it showed in earlier weeks. A Saturday morning refresh now runs every week with the final injury report and the newest lines. Walk-forward error over 14,152 player-weeks drops from 4.40 to 4.31 PPR points. model_version is now gridiron-v1.2; fields are unchanged. Docs →
AddedGridIron projections: weekly projections you can display
GridIron Data now publishes its own weekly projections for QB, RB, WR and TE, built from box scores, snap counts, game lines and player prop lines, injury reports, rosters and kickoff weather forecasts, and refit every Wednesday. Each /projections/{week} row has a gridiron_projection object, and ?source=gridiron lists ours alone; existing fields are unchanged. Pro keys also get the per-stat line and game context. Unlike projected_points, Pro + Commercial customers may show them to their users, credited "Data: GridIron Data". In a walk-forward backtest over 14,152 player-weeks the average miss was 4.31 PPR points, against 4.63 for a trailing four-game average. Guide → Docs →
What changed on ?
AddedDepth charts and official inactives (Pro)
GET /depth-charts returns every team's depth chart, refreshed daily, filterable by team, position and starters=true. GET /inactives returns the official game-day inactives by week and team. Inactives are published after the games, so they are for research and backtesting, not a pre-kickoff feed. Docs →
AddedLook up a player by GSIS or Pro Football Reference id
/players?gsis_id= and /players?pfr_id= find a player by those ids on every plan, like ?espn_id=, and each player now has an ids map (GSIS, PFR, PFF, NFL, ESPN, Sleeper) for joining other data. Docs →
ChangedFreshness on the injury changes feed
Each change on /injuries/changes now says where it came from (source), and a new team_freshness block gives, per team, when it was last checked and the newest report entry, so you can tell a quiet hour from a stalled feed.
What changed on ?
AddedPro + Commercial: a license for commercial products
Pro + Commercial is everything in Pro, plus a license to use GridIron data in a commercial product: run it in your app, train your own models, publish your own forecasts. It costs $49 a month or $490 a year and is for companies under $250,000 a year in revenue. The data access is exactly Pro's (same endpoints, 50,000 requests a month), and the key is a Pro key. Projections and prop probabilities stay benchmark-only, and displayed data carries a "Data: GridIron Data" credit. Commercial License →
AddedTarget share and carry share: GET /usage (Pro)
Weekly target_share_pct and carry_share_pct next to snap share, with season and trailing totals and a trend_delta, from 2025 on. Docs →
AddedPer-game box score lines on /stats
Each week on /stats from 2025 on carries a box_score with the passing, rushing and receiving line and targets. Docs →
What changed on ?
FixedOne player, one id
A few players appeared twice under a nickname and a formal name (Kenny and Kenneth Gainwell, Hollywood and Marquise Brown, Deebo Samuel and Deebo Samuel Sr.), with their stats split between the two. Each is now one player, and both ids and both names reach him.
What changed on ?
AddedOffensive linemen on Pro
Pro keys now get every NFL offensive lineman (C, G, OT) on a team's roster: name, team, jersey number and injury status, from ESPN's team rosters daily and ESPN's injury report every 2 minutes during the day, like every other player. Their status changes show up in /injuries/changes and injury webhooks (filter with position). Linemen have no stats, snaps or projections. Lists leave them out unless you ask for position=C, G or OT or set include_ol=true, so code that pages through every player is unchanged; a name search finds them. Below Pro, a name search leaves them out and says how many it left out, and asking for one directly answers 403 "reason": "pro_required". What Pro includes →
What changed on ?
AddedClassroom program: Basic free for a term
Instructors teaching sports analytics, fantasy football or data courses can get their students a Basic key free until the class's last day: 5,000 requests a month at 30 a minute and every standard endpoint (not Pro). The instructor emails aaron@gridirondata.com and gets a student link (signup.html?class=CODE) and a private seat page. Students sign up without a card; a student with a free account logs in and the same key moves to Basic. The day after the last day the key moves to the Free plan, with an email 14 days before and one on the day. Classroom program → Guide →
AddedAffiliate program and customer referrals
Affiliates earn 30% of what a referred customer pays in their first 12 months. ?ref=CODE works on any page and is kept in the browser for 60 days; an optional promotion code takes a percentage off a first payment. Commission is held 30 days, then paid to the affiliate's bank automatically through Stripe Connect on the 1st of each month ($25 minimum, less carries over); refunds and chargebacks take it back automatically. A private link shows clicks, signups, commission and payout setup. Basic and Pro subscribers get a "Refer a friend" link on the dashboard that earns the same 30% as account credit. Affiliate terms → Guide →
ChangedBetting data is on Pro
Pro ($29 a month or $249 a year) is now the betting plan. /props and /defense answer Free and Basic keys with HTTP 403 "reason": "pro_required", an upgrade_url and a pro_includes list (free keys used to reach the same Pro check from a different path; the answer is now identical for both). Below Pro, /schedule games leave out odds and /projections/{week} rows leave out projected_stats; a top-level odds or projected_stats note says they need Pro. The schedule, bye weeks, projected points and rest-of-season projections stay on Basic. Pro also keeps the /injuries/changes feed and webhooks. Upgrading keeps the same key. What Pro includes →
AddedGridIron Data in ChatGPT, Claude, Claude Code and Cursor
A hosted MCP server at https://api.gridirondata.com/mcp lets AI assistants look up players, stats, projections, injuries and news. You sign in with your GridIron account, and every call runs on your own key, so your plan and limits apply. Set it up →
What changed on ?
AddedSign in with Google
Sign up and sign in with your Google account on the login and signup pages. An existing account with the same verified email is linked, not duplicated.
What changed on ?
AddedProp probabilities and defense vs position
GET /props?player_id=&stat=&line= returns P(over), P(under) and fair no-vig American odds for a QB, RB, WR or TE stat line (up to 10 lines a call), with the projected mean and spread, recent games, the week's game and the model's walk-forward backtest. GET /defense?position=&last= shows what each defense allows per game by position, ranked, from ESPN box scores for every game since 2025. Pro plan. Prop probabilities are a model estimate, not betting advice. Walkthrough →
AddedBetting lines, per-stat projections and ESPN ids
/schedule games carry odds from the ESPN scoreboard: spread, total, moneylines and each team's implied points, refreshed daily until kickoff and kept afterwards. /projections/{week} rows carry projected_stats, the per-game stat line (pass yards, receptions, rush yards and the rest). Both are Pro since October 26. Every player has espn_player_id, and /players?espn_id= looks one up by ESPN athlete id.
ChangedStandard injury statuses; injured players project 0
injury_status is one of ACTIVE, QUESTIONABLE, DOUBTFUL, OUT, IR, PUP, SUSPENDED, RESERVE or UNKNOWN; the source spelling moves to injury_status_raw. For the current and upcoming weeks, players who can't play project 0 points with available: false, and projected_points_if_active keeps the number. Injury status in the docs →
ChangedInjury statuses update within minutes
GridIron now checks ESPN's league-wide injury report every 2 minutes from 8:00 am to 1:00 am ET (every 10 minutes overnight), instead of only at scheduled refreshes. A status change reaches injury_status, available in projections, the Pro /injuries/changes feed and webhooks within a few minutes of ESPN posting it. A daily 12:30 pm ET Sleeper cross-check catches players ruled out there first. ESPN's injury notes also appear in /news with source espn-injuries. How fast changes arrive →
ChangedFaster injury news for more players
News now covers the top 300 players, up from 150, so injury news for starters outside the top tier is no longer dropped, and injury and injured-reserve items arrive faster.
What changed on ?
AddedOfficial Python client
gridirondata wraps every data endpoint in a typed method, reads GRIDIRON_API_KEY, times out and retries server errors, and raises clear exceptions for a bad key (401), a plan that doesn't include the route (403, with the upgrade message) and limits (429, with when to retry). It isn't on PyPI yet: pip install "git+https://github.com/gridirondata/gridiron-data-python". Python client in the docs →
ChangedFree plan: player lookups and this week's projections
The free plan still costs $0 with no card, at 50 requests a month and 10 a minute. It now covers two things: player lookups (/players, /players/search and /players/{player_id}), which return the profile only for the current season (name, position, team, injury status and jersey number, with no weekly stats, snaps, projections or matchup history in the record), and /projections/{week} for the current NFL week of the current season. Everything else needs Basic ($5 a month or $45 a year, 5,000 requests a month): other weeks' projections, past seasons, /stats, /snaps, /deviations, /matchups and all /news endpoints. The 5-headline /news/latest preview for free keys is gone. A free key calling those gets HTTP 403 with "reason": "basic_required", an upgrade_url and a free_plan_includes list. Upgrading keeps the same key. Pro and the /injuries/changes feed are unchanged. Free plan in the docs →
AddedRest-of-season projections
GET /projections/ros returns each player's projected points over the weeks left in the current season, skipping his bye and weeks already played, with games_remaining. Weeks with a published weekly projection count it; the rest count his per-game rate, and "method": "per_game_rate" says so. Filter with ?position=, ?team= or ?player_id=. Basic and up. Rest-of-season projections in the docs →
AddedNFL schedule and bye weeks
GET /api/v1/schedule returns the regular-season schedule: week, home and away teams, kickoff time in UTC, and the final score once a game is played. Filter with ?season=, ?week= and ?team=. GET /api/v1/byes returns each team's bye week, worked out from the schedule. Both are on Basic and above. Schedule in the docs →
AddedPro: injury change webhooks
Pro keys can register one HTTPS URL and get each batch of game-day injury and status changes POSTed to it about ten minutes after the refresh, instead of polling /injuries/changes. Every request is signed with HMAC-SHA256 (X-GridIron-Signature) using a signing secret shown once, which you can regenerate. Set it up and send a test event from your dashboard, or with /webhooks. Free and Basic keys get 403 with "reason": "pro_required". Webhooks in the docs →
AddedOpenAPI 3.1 spec for the data API
/openapi.json describes every data endpoint: parameters, response schemas, the x-api-key header, the 401, 403 and 429 errors, and the plan each endpoint needs (x-plan: free, basic or pro). Import it into Postman or Insomnia, or generate a client from it. OpenAPI spec in the docs →
What changed on ?
FixedPlayers on bye project 0
A player whose team is on bye now gets projected_points: 0, on_bye: true and projection_source: "bye" on /projections/{week}. Some bye-week rows used to keep an early-week number.
What changed on ?
FixedMatchup history totals
Some 2025 records on /matchups claimed far more games than were played against that opponent (one showed 173), which threw off the averages. The API now rebuilds any such season from the weekly game logs, on /matchups and on the player vs_opponent map alike. The docs example also showed field names the API doesn't return; it now shows avg_actual and games_played. Docs →
What changed on ?
AddedAnnual billing: Basic $45 a year, Pro $249 a year
Both paid plans can now be billed once a year, with three months free compared with paying monthly. The limits are the same as the monthly plan, and so is the key. Choose Annual under Billing when you sign up, or switch an existing plan from your dashboard: Manage Subscription & Payment, then Update plan. Pricing →
AddedPause until next season
A paid plan can be paused from the dashboard instead of cancelled. You aren't billed while paused, and the plan turns back on by itself on August 1 with the same key. You can also resume early at any time. While paused, data requests answer 403 with "reason": "subscription_paused", the resume date and the steps to resume.
What changed on ?
ChangedFree plan: 50 requests a month, no daily cap
The free plan is now 50 requests a month at 10 a minute, with no daily limit. The count resets on the 1st of each month at 00:00 UTC. Request 51 in a month gets HTTP 429 with "reason": "free_monthly_quota" and an upgrade_url; the old free_daily_quota reason is gone. Fifty requests is enough to try every endpoint and build a prototype. Running something every week of the season is what Basic ($5 a month, 5,000 requests) is for, and upgrading keeps the same key. Free plan details →
Follow along in any feed reader: Atom or JSON Feed.
What changed on ?
AddedLeague-wide news feed: GET /news/latest
Every tracked player's news in one call, newest first, filterable by impact, position and team, with a since timestamp and cursor paging. It's built for free agency and the draft, when you want every signing and cut without polling player by player. Basic and above get 90 days of history; Free keys get the 5 newest headlines from the last 24 hours. The MCP server has a matching get_latest_news tool. Docs →
ChangedOne code per team in every response
The Rams, Washington and Jacksonville came back as both LA/LAR, WSH/WAS and JAC/JAX, depending on the source row, which split a player's history against the Rams into two half-sized samples. Responses now always use LAR, WAS and JAX, and alias histories are merged. Filters and paths still accept either spelling, and /projections gains a team filter. Details →
ChangedThe default season stays 2026 through the off-season
Calls without ?season= used to switch to the next year on March 1, before any of its data exists. The default now moves only when the new season's data is loaded. GET /health reports it as default_season.
AddedHistorical data docs and a backtest example
A new docs section maps the 2020–2026 history (actuals, snap share, matchups, deviations) for backtesting and dynasty research, with a runnable season-over-season example. Historical data →
What changed on ?
AddedFree plan: 100 requests a day, no credit card
Sign up, confirm your email and your key is on the dashboard. The free plan allows 100 requests a day at 10 a minute and resets at 00:00 UTC. Request 101 gets HTTP 429 with "reason": "free_daily_quota" and an upgrade_url. Upgrading keeps the same key. Free plan details →
AddedPro injury changes feed: GET /injuries/changes?since=
Returns only the players whose injury status changed since a timestamp, with previous_status, status and detected_at, plus a next_since cursor. Pro and Enterprise keys only; others get 403 pro_required. Lookback is 14 days. Game-day polling guide →
ChangedInjury status refreshes on game days
Status still refreshes daily at 11:00 am ET, and now also after inactives on Sunday (about 12:45, 3:50 and 7:45 pm ET) and before Thursday and Monday night games (about 7:15 pm ET). Schedule in the docs →
ChangedKeys never expire while you're subscribed
A key on a live subscription has no expiry date. After a cancellation the key stays on file for 90 days, then it's removed.
FixedYou can resubscribe after cancelling
Checkout used to reject any email that had ever had a key. Now it blocks only an email with a live subscription, and a returning customer gets their previous key back, reactivated.
FixedFiltered /players returns full pages
/players?position=WR used to return a handful of players plus a cursor, because the filter ran after each page was read. It now keeps reading until the page is full (or the table ends), so you make far fewer calls. A non-numeric limit now returns 400. API reference →
FixedThe x-api-key header works in any casing
Account routes (usage stats, key regeneration, billing) read the header case-sensitively, so a client sending X-Api-Key got a 401. Every route now accepts any casing, as data routes already did.
FixedReal 404s
Unknown URLs used to return the home page with HTTP 200. They now return a 404 page with a 404 status, and /docs and /pricing redirect (301) to their pages.
What changed on ?
AddedSnap share: /snaps, and snap_pct on /stats
Per-week offensive snap share for every fantasy-relevant player from 2020, with a season average and a trailing trend. Snap share release notes →
Frequently asked questions
How do I get notified of API changes?
Subscribe to the Atom feed at /feed.xml or the JSON Feed at /feed.json. Every changelog release is posted there.
Will a change break my code?
We don't remove or rename fields without notice here first. Most changes listed on this page are additive or fix wrong behaviour; plan changes, such as the October 22, 2026 free plan change, are listed here when they take effect.