nfl

NFL team-week totals - offence, defence, kicking, returns and fumbles

Passing, rushing and receiving totals per team per week, with EPA and CPOE, plus kicking, return and fumble blocks. 3,386 rows covering 2020-2025 - 544 per 17-game season, which is every team in every game. Omit season to get the newest available; meta.resolved names what was served. NO DERIVED turnovers FIELD. Sum passing.interceptions with whichever offensive fumbles-lost columns your scoring rules use. fumbles.lost_total is NOT that number - it also counts return fumbles, which the offence is not charged with. NULL AND 0 DIFFER. kicking.fg_long is null when every attempt missed, because the stat records the longest MADE kick - absent, not zero. A null on a season that predates a load means not-loaded, never zero. fg_pct is deliberately not published - it is derivable from fg_made and fg_att, and the stored value is a fraction in [0,1] despite the name. DEFENSE. Each row carries a defense object: what this team's defence did in the game, derived from the OPPONENT's row in the same game, this team's summed defender credits and the final score. It is not a separate dataset, so it is available exactly where the row is. Sacks, sack yards, interceptions and yards allowed come from the opponent's offensive totals rather than summed defender credits, because a sack with no defender named is still a sack. Every defense field is null, not 0, when its input has not loaded yet (for example the opponent's row for a game still being processed). passing_yards_allowed is NET: the opponent's passing.yards is gross, and the yards its passers lost to sacks are subtracted. total_yards_allowed is passing_yards_allowed plus rushing_yards_allowed. THREE DEFENSIVE FIELDS ARE NOT PUBLISHED. fumble_recoveries: no stored data records who recovered a fumble. safeties: about a third of safeties (33 of 92 in 2020-2025) are team safeties from penalties enforced in the end zone, which no defender is credited with, so a credited count would silently miss them. defensive_tds: the stored defender touchdown count includes interception returns only, never fumble returns, so it is published as interception_return_tds and not as a defensive touchdown total.

get/v1/nfl/team-stats

Request

  • Base URL: https://api.bigballsdata.com
  • URL: https://api.bigballsdata.com/v1/nfl/team-stats
  • Auth: one of:
    • API key in header x-api-key
    • HTTP bearer

Query parameters

seasoninteger

Season LABEL, not a calendar year: the year a season STARTS in. 2025 means the 2025-26 campaign for leagues that cross the new year (EPL, NBA, NHL) and the 2025 season for those that do not (MLB, MLS, WNBA). Filtering resolves each league's own start month, so a season never spans two calendar years' worth of rows.

weekinteger
teamstring
season_type'REG' | 'POST' | 'WC' | 'DIV' | 'CON' | 'SB'
limitinteger
offsetinteger

Response

ok

Example response

{
  "data": [
    {
      "team": "ARI",
      "opponent_team": "LAC",
      "defense": {
        "sacks": 3,
        "sack_yards": 22,
        "interceptions": 1,
        "forced_fumbles": 1,
        "blocked_kicks": 1,
        "blocked_punts": 1,
        "points_allowed": 14,
        "passing_yards_allowed": 187,
        "rushing_yards_allowed": 81,
        "total_yards_allowed": 268
      }
    }
  ]
}

Changes

No recorded changes to this operation across all 3 revisions of this API.