> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://statpad.dev/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://statpad.dev/docs/_mcp/server.

# Coverage by league

> The leagues Statpad covers, which endpoints and fields each one fills, what isn't filled yet, and how much history there is.

Every league uses the same endpoints and the same JSON. Change `nfl` to `epl` in the path and your parser keeps working. What differs is which fields a sport fills and which endpoints have data yet, and that's what this page lists.

Anything listed under [Not filled yet](#not-filled-yet) already has its endpoint or field: it answers with an empty list, `null` or `404`, as noted. Code written against it today keeps working when the data arrives.

## Leagues

| League                       | Alias   | Sport    | Status |
| ---------------------------- | ------- | -------- | ------ |
| National Football League     | `nfl`   | Football | Live   |
| NCAA Division I FBS Football | `ncaaf` | Football | Live   |
| English Premier League       | `epl`   | Soccer   | Live   |

Every plan includes all three. `GET /v1/leagues` lists the leagues your key can read.

> **Note**
>
> The data model already covers basketball, baseball and hockey, but no league in those sports is served yet. A request for a league your key can't read answers `403` with code `forbidden`.

## What every game has

Everything in this table but injuries comes from the live game feed, so it's there for every game in a live league and updates during the game. Game data arrives on the game's stream as it changes; teams, players and injuries, which many games share, arrive on `league:<alias>`.

| Data                      | Where                                                                  | NFL and NCAAF                                                                                                                                                                                                                                                                                                                                                                                                            | Premier League                                                                                                                                                                                                                               |
| ------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Schedule                  | `GET /v1/{league}/games`                                               | Every game from about 10 minutes before kickoff, with status, start time and score                                                                                                                                                                                                                                                                                                                                       | Every match from about 10 minutes before kickoff, with status, start time and score                                                                                                                                                          |
| Live state                | `live_state` on `GET /games/{id}`                                      | Period, clock, score, possession, down, distance, yard line and timeouts. After the final, the last down, distance and yard line stay, and timeouts are `null` because the feed stops reporting them.                                                                                                                                                                                                                    | Half, match minute, whether the clock is running, stoppage time (shown and announced), formations, red cards and shoot-out score                                                                                                             |
| Game timing               | `started_at`, `ended_at` on the game; `last_play_id` on the live state | When the first play happened and, once the game is over, the last one, from the play-by-play's own clock; the newest play of any type, timeouts and period ends included                                                                                                                                                                                                                                                 | Kickoff and the final whistle, from the match events' own clock; the newest event                                                                                                                                                            |
| Play-by-play              | `GET /games/{id}/plays`                                                | Every play: type, description, down and distance, start and end yard line, yards gained, penalty yards, first down, touchdown, turnover, score after the play                                                                                                                                                                                                                                                            | Key events: goals, shots (on target, off target, blocked, woodwork), penalties, cards, substitutions, corners, fouls, offsides and VAR decisions, with the match minute, body part, pitch position and the players involved with their roles |
| Drives                    | `GET /games/{id}/play-groups`                                          | Every drive: plays, yards, first downs, start and end yard line, time of possession, result and points                                                                                                                                                                                                                                                                                                                   | Not applicable. Soccer events belong to no group.                                                                                                                                                                                            |
| Player box score          | `players` in `GET /games/{id}/boxscore`                                | Passing, rushing, receiving, defense, interceptions, fumbles, kicking, punting, kick returns and punt returns                                                                                                                                                                                                                                                                                                            | One `soccer` line per player: goals, assists, shots, shots on target, saves, goals conceded, fouls, offsides and cards                                                                                                                       |
| Game roster               | `GET /games/{id}/roster`                                               | The players with a box-score line, with team and jersey                                                                                                                                                                                                                                                                                                                                                                  | The match squads, with starters, positions and jerseys                                                                                                                                                                                       |
| Injuries                  | `GET /v1/{league}/injuries` and `league:<alias>`                       | NFL: every player on a team's injury report, refreshed every 30 minutes, with status (`questionable`, `doubtful`, `out` or `injured_reserve`), when it was reported, `started_on` (the US Eastern day of the first report Statpad recorded, not when the player was hurt), plus body part, side and estimated return when they're known. An injury that ends arrives on the stream as a `delete`. NCAAF: not filled yet. | Not filled yet                                                                                                                                                                                                                               |
| Teams, players and venues | `/teams`, `/players/{id}`                                              | Every team and player that has appeared in a game                                                                                                                                                                                                                                                                                                                                                                        | Every team and player that has appeared in a match                                                                                                                                                                                           |
| Change journal            | `GET /games/{id}/changes` and the stream                               | Yes                                                                                                                                                                                                                                                                                                                                                                                                                      | Yes                                                                                                                                                                                                                                          |

The [Sample responses](/docs/replay) page has every one of these as a real, untrimmed response.

### Stat keys

Box score lines are objects keyed by stat code inside a category. These are the codes you'll see today:

#### NFL and NCAAF

| Category                       | Stat codes                                                                                                                               |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `passing`                      | `att`, `completions`, `yards`, `yards_per_attempt`, `touchdowns`, `interceptions`, `qbr`; NFL also `rating`, `sacks`, `sack_yards_lost`  |
| `rushing`                      | `att`, `yards`, `yards_per_attempt`, `touchdowns`, `longest`                                                                             |
| `receiving`                    | `receptions`, `yards`, `yards_per_reception`, `touchdowns`, `longest`; NFL also `targets`                                                |
| `defensive`                    | `tackles`, `solo_tackles`, `sacks`, `tackles_for_loss`, `passes_defended`, `touchdowns`; NFL `qb_hits`, NCAAF `qb_hurries`               |
| `interceptions`                | `interceptions`, `yards`, `touchdowns`                                                                                                   |
| `fumbles`                      | `fumbles`, `lost`, `recovered`                                                                                                           |
| `kicking`                      | `field_goals_made`, `field_goal_attempts`, `field_goal_pct`, `longest_field_goal`, `extra_points_made`, `extra_point_attempts`, `points` |
| `punting`                      | `punts`, `yards`, `gross_average`, `inside_20`, `touchbacks`, `longest`                                                                  |
| `kick_returns`, `punt_returns` | `returns`, `yards`, `yards_per_return`, `longest`, `touchdowns`                                                                          |

#### Premier League

| Category | Stat codes                                                                                                                                                                                                                     |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `soccer` | `appearances`, `sub_ins`, `total_goals`, `goal_assists`, `own_goals`, `total_shots`, `shots_on_target`, `offsides`, `fouls_committed`, `fouls_suffered`, `yellow_cards`, `red_cards`, `saves`, `shots_faced`, `goals_conceded` |

A player only has the categories and codes that apply to them, so treat every code as optional. New codes can appear; ignore the ones you don't use.

## Not filled yet

These endpoints and fields are part of the API, but nothing fills them today. Each applies to every league unless the row names one.

| Data                              | Where                                                                                                                                                                                                                          | What you get today                                                                                                           |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
| Upcoming schedule                 | `GET /v1/{league}/games` for a future date                                                                                                                                                                                     | Games appear about 10 minutes before kickoff, so a later day's list is empty until then.                                     |
| Team totals                       | `teams` in the box score                                                                                                                                                                                                       | An empty list. Add up the player lines for team totals.                                                                      |
| Score by period                   | `period_scores` on the game and the box score                                                                                                                                                                                  | An empty list. Plays carry the score after each play.                                                                        |
| Team rosters                      | `GET /teams/{id}/roster`                                                                                                                                                                                                       | An empty list. A game's roster lists the players in that game.                                                               |
| Depth charts                      | `GET /teams/{id}/depth-chart`                                                                                                                                                                                                  | `404`                                                                                                                        |
| NCAAF and Premier League injuries | `GET /{league}/injuries`                                                                                                                                                                                                       | An empty list                                                                                                                |
| Injury practice status and notes  | `practice_status` and `comment` on an injury                                                                                                                                                                                   | `null`                                                                                                                       |
| Transactions                      | `GET /{league}/transactions?since=`                                                                                                                                                                                            | An empty list                                                                                                                |
| Season stats and leaders          | `GET /players/{id}/stats`, `GET /seasons/{year}/{type}/leaders?category=&stat=`                                                                                                                                                | Empty lists                                                                                                                  |
| Players on an NFL or NCAAF play   | `participants` on a play                                                                                                                                                                                                       | An empty list. The play's `description` names them. Premier League events have them.                                         |
| Football play tags                | `air_yards`, `play_action`, `screen_pass`, `run_pass_option`                                                                                                                                                                   | `null`                                                                                                                       |
| Running clock in NFL and NCAAF    | `clock_running` on the live state                                                                                                                                                                                              | `null`: the football feed has no running flag, and its clock moves only when a play posts. Use `status` and `clock_seconds`. |
| Player details                    | `birth_date`, `height_in`, `weight_lb`, `college` and `draft` on players; in NFL and NCAAF also `primary_position` (NFL players who have been on the injury report have it) and a game roster entry's `position` and `starter` | `null`, and `starter` is always `false`                                                                                      |

When any of these starts filling, it arrives the same way as everything else: over REST, and as changes on the stream.

## How far back it goes

Statpad started collecting each league in November 2026. Earlier games and seasons aren't backfilled, so the history you can read starts there, and there are no season-to-date totals from before it.

Once collected, a game stays readable:

* **Over REST, for good.** The game, its plays, drives, box score and roster stay available after it ends.
* **As a change journal, for at least 7 days after it ends.** That covers `GET /games/{id}/changes` and resuming `game:<id>` on the stream. A position older than what's retained gets `resync_required` (a `410` over REST): read the game over REST instead. A league stream such as `league:nfl` can be resumed for at least 30 days.

## Corrections

A play or a stat line can change after it first appears, during the game and shortly after it, as the official record catches up. A correction arrives as an `upsert` with a higher `version`, and a play removed from the record arrives as a `delete`, on the same stream and in the same `seq` order as everything else. A game's `status` moves to `complete` at the final whistle, but its stats can still be corrected after that.

If you store data, key it by `id` and keep the highest `version` you've seen. Then corrections need no special handling.