Guide

Set up a class with free Basic API keys

Quick answer: The instructor emails aaron@gridirondata.com and gets a student link with a class code, plus a private seat page. Students open the link, sign up without a card, and find a Basic key on the dashboard: 5,000 requests a month until the class's last day. This guide covers both sides and a first request in curl and Python. Program terms are on the Classroom program page.

Cost
$0
Student plan
Basic
Setup time
~15 minutes
Default last day
Feb 15, 2027
Watch it: a class set up end to end, from the student link to a first request, with a demo seat page (1:34, with captions). Also on YouTube.

For instructors

1. Request a class

Send one email to aaron@gridirondata.com. Something like this is enough:

Subject: Classroom program

Course: Intro to Sports Analytics
School: Your University
Students: about 40
Last day students need access: December 18, 2026
Limit signups to: yourschool.edu (optional)

The last day can be up to about 13 months out. If you leave it off, the default this season is February 15, 2027. The domain line is optional; with it, only addresses at that domain can join.

2. Share the student link

You get back a class code, such as IOWA-7K2QXM, and a student link built from it:

https://www.gridirondata.com/pages/signup.html?class=IOWA-7K2QXM

Post it on your course page, in the syllabus or in an assignment. Students who already have a free GridIron account can use the same link; they log in instead of signing up.

3. Check seats

You also get a private link to your seat page:

https://www.gridirondata.com/pages/classroom.html?code=IOWA-7K2QXM&t=TOKEN

It shows seats used out of the total, the class's last day, and a row per student with a masked email (j***@uiowa.edu), the date they joined and a status: active, upgraded or ended. It never shows full emails or API keys. Keep the link private. If the class fills up, email Aaron to add seats.

For students

1. Sign up from the class link

Open the link your instructor posted. Enter your name, email and a password, then type the code we email you to verify the address. There is no card. If your class is limited to a school domain, use your school email.

Already have a free GridIron account? Open the class link and log in. The dashboard applies the class to the key you already have, so it moves to Basic without changing.

2. Find your key

Your API key is on the dashboard. Treat the key like a password: don't commit it to a public repository. A common pattern is an environment variable:

export GRIDIRON_API_KEY="YOUR_KEY"

3. Make a first request

Send the key in the x-api-key header. This asks for Week 8 quarterback projections:

curl -H "x-api-key: YOUR_KEY" \
  "https://api.gridirondata.com/api/v1/projections/8?position=QB"

The same call in Python with requests:

import os
import requests

API = "https://api.gridirondata.com/api/v1"
H = {"x-api-key": os.environ["GRIDIRON_API_KEY"]}

r = requests.get(f"{API}/projections/8", headers=H, params={"position": "QB"})
r.raise_for_status()
rows = r.json()["projections"]

for row in sorted(rows, key=lambda x: x["projected_points"], reverse=True)[:10]:
    print(f'{row["player_name"]:24} {row["team"]:4} {row["projected_points"]:6.1f}')

Each row has player_id, player_name, position, team, projected_points (PPR by default; add scoring=half or scoring=standard) and the player's injury_status. Player IDs look like Josh Allen#QB; URL-encode the space and # when you put one in a path:

curl -H "x-api-key: YOUR_KEY" \
  "https://api.gridirondata.com/api/v1/stats/Josh%20Allen%23QB/2025"

That returns game-by-game actuals for a season. Basic covers 2020 through 2026, plus deviations, snap share, matchup history and news. The API reference lists every endpoint, and the guides have full projects to adapt for assignments, such as the projection backtest.

4. Stay inside the limits

Basic allows 5,000 requests a month at 30 a minute. Save responses to a file while you develop instead of calling the API on every run; projections and stats refresh about once a day. A request over a limit gets HTTP 429 with a reason field. The betting data and the injury changes feed are on Pro and are not part of the class plan; those calls return 403 pro_required.

What happens at the end of the term?

  • 14 days before the last day, each student gets one email saying when class access ends, that the key keeps working on the Free plan afterward, and that keeping Basic costs $45 a year (about $3.75 a month) or $5 a month with the same key.
  • The day after the last day, the key moves to the Free plan: 50 requests a month, player lookups and the current week's projections. The student gets one email saying so. The key itself doesn't change, and nothing is deleted.
  • Students who buy Basic or Pro keep the same key and aren't affected by the class ending.

For the full rules (seat caps, one class per account, revoked classes), see the Classroom program page.