Product release
New: a free tier, and game-day injury changes for Pro
Quick answer: GridIron Data now has a free plan: 50 requests a month, no credit card, every endpoint but one. The one it doesn't include is new: a Pro injury changes feed, GET /injuries/changes?since=, which returns only the players whose status flipped since your last call, updated after every game-day injury refresh.
Update, September 28, 2026: the free plan is now 50 requests a month (it launched at 100 a day). See the changelog.
Update, October 22, 2026: the free plan now covers player lookups (name, position, team, injury status and jersey number) and projections for the current NFL week only. Stats, snaps, deviations, matchups, news, other weeks and past seasons need Basic ($5/month); a free key calling them gets HTTP 403 with "reason": "basic_required". The example below now needs Basic. See the changelog and pricing.
Update, October 26, 2026: Pro ($29/month or $249/year) is now also the betting plan. It adds player prop probabilities with fair prices (/props), defense vs position (/defense), betting lines on /schedule games (spread, total, moneylines, implied team points) and per-stat projections on /projections/{week}, alongside injury status changes within minutes (/injuries/changes and webhooks). Free and Basic keys get HTTP 403 with "reason": "pro_required" for /props and /defense, and Basic responses leave out odds and projected_stats. Since October 23, injury statuses are checked against ESPN every 2 minutes from 8:00 am to 1:00 am ET (every 10 minutes overnight), and Pro keys can get changes pushed to a webhook. See pricing.
- Free
- $0 · 50/mo
- Basic
- $5 · 5,000/mo
- Pro
- $29 · 50,000/mo
- Injury checks
- Every 2 min, 8 am–1 am ET
Why a free plan now?
Because you shouldn't need a credit card to find out whether our numbers are any good. Fantasy developers build on weekends, in the gap between the waiver run and kickoff. A key you can grab in two minutes and a hard, honest monthly cap beat a trial clock every time.
The free plan isn't a demo. It's the same API, the same JSON and the same player ids as the paid plans: PPR projections, 2020–2026 actuals, deviations, snap share, matchup history and impact-tagged news.
Which plan is right for you?
| Plan | Built for | Limits |
|---|---|---|
| Free ($0) | Kicking the tires: a notebook, a class project, a first start/sit script before you commit. | 50 requests/month, 10/minute. Resets on the 1st, 00:00 UTC. |
| Basic ($5/mo) | A personal bot or dashboard that runs all week, or a draft tool that loads the full player pool. | 5,000 requests/month, 30/minute. |
| Pro ($29/mo) | League-wide Discord or Slack bots, public tools that have to react to inactives on Sunday, and prop models. | 50,000 requests/month, 100/minute, plus the injury changes feed and webhooks, /props, /defense, schedule betting lines and per-stat projections. |
Rule of thumb: a weekly lineup check for one roster is 4 to 6 requests. If you're serving one person, start free. If you're serving a league, you want Basic. If your users will yell at you when a Sunday inactive slips past, you want Pro.
What can I do with a free key in one call?
Here's one request that earns its keep: snap share with a trend. Rome Odunze played 48% of Chicago's snaps in Week 1 and 84% in Week 2. His points barely moved (7.2, then 7.3). His role moved a lot, and role shows up before production.
import requests
r = requests.get(
"https://api.gridirondata.com/api/v1/snaps/Rome%20Odunze%23WR",
headers={"x-api-key": "YOUR_FREE_KEY"},
params={"trend": 1}, # compare the latest week with his season average
)
d = r.json()
print(d["season_snap_pct_avg"], d["recent_snap_pct_avg"], d["trend_delta"])
# 66.0 84.0 18.0
That's one request. Loop it over your roster and you have a role-change alert for about 15 requests a week. Snap share is a Basic endpoint since October 22, 2026, so this runs on Basic ($5/month, 5,000 requests a month).
What does the Pro injury changes feed return?
Most injury endpoints hand you the whole league and let you work out what changed. This one does the diff for you. Pass the next_since value from your last response and you get only the players whose status moved since then, with the old and new status:
curl -H "x-api-key: YOUR_PRO_KEY" \
"https://api.gridirondata.com/api/v1/injuries/changes?since=2026-09-27T16:00:00Z"
{
"count": 1,
"changes": [
{ "player_id": "Josh Allen#QB", "team": "BUF",
"previous_status": "Questionable", "status": "Out",
"detected_at": "2026-09-27T16:55:12Z" }
],
"next_since": "2026-09-27T16:55:12Z",
"truncated": false
}
The example is illustrative. The feed tracks around 680 players, and on Saturday, September 26 our table had 33 Questionable, 2 Doubtful, 18 Out and 30 on IR. Sunday is when those flip.
When does injury status update?
Since October 23, 2026: GridIron checks ESPN's league-wide injury report every 2 minutes from 8:00 am to 1:00 am ET (every 10 minutes overnight), so a status change reaches the feed within a few minutes of ESPN posting it. The full refreshes below still run, and Sleeper is cross-checked daily around 12:30 pm ET.
Status refreshes on a schedule timed to when NFL teams actually publish news. Inactives come out about 90 minutes before kickoff, so the Sunday runs sit after the announcements and before the games:
| When | Refresh | Changes recorded | Catches |
|---|---|---|---|
| Every day | 11:00 am | 11:12 am | Practice reports and overnight moves |
| Sunday | 12:45 pm | 12:55 pm | Inactives for the 1:00 pm games |
| Sunday | 3:50 pm | 4:00 pm | Inactives for the 4:05 and 4:25 pm games |
| Sunday | 7:45 pm | 7:55 pm | Sunday Night Football inactives |
| Thursday and Monday | 7:15 pm | 7:25 pm | Final statuses before the night game |
Times follow Eastern time through the November 1 clock change. The game-day polling guide shows how to line your own poller up with these windows.
What doesn't it do?
- No live in-game stats. Box-score stats land the day after games (Monday night games on Tuesday).
- Webhooks are optional. You can poll the feed, or (since October 22, 2026) register a webhook and have Pro push each batch of changes to your URL, signed with HMAC-SHA256. See webhooks in the docs.
- A 14-day lookback. Older
sincevalues are clamped to 14 days, and the response says so.
Frequently asked questions
Is the free plan really free?
Yes. It costs $0 and needs no credit card: 50 requests a month at 10 a minute. Since October 22, 2026 it covers player lookups (profile only) and the current week's projections; stats, snaps, news, matchups, other weeks and past seasons need Basic at $5 a month.
Which plan gets the injury changes feed?
Pro ($29/month) and Enterprise. A Free or Basic key gets HTTP 403 with "reason": "pro_required" and a link to pricing.
Is the injury feed real-time?
Not live, but close: since October 23, 2026 GridIron checks ESPN's injury report every 2 minutes from 8:00 am to 1:00 am ET (every 10 minutes overnight), so a change appears in the feed within a few minutes of ESPN posting it. Full refreshes still run daily at 11:00 am ET and after inactives on game days.
Do I keep my key when I upgrade?
Yes. Upgrading from Free to Basic or Pro raises the limits on the key you already have, so your code doesn't change.