Skip to content

Instantly share code, notes, and snippets.

@nntrn
Last active July 29, 2025 03:54
Show Gist options
  • Save nntrn/ee26cb2a0716de0947a0a4e9a157bc1c to your computer and use it in GitHub Desktop.
Save nntrn/ee26cb2a0716de0947a0a4e9a157bc1c to your computer and use it in GitHub Desktop.
List of nfl api endpoints from espn

ESPN API ENDPOINTS

This page is limited to NFL endpoints but can be refashioned for other leagues (i.e. /sports/football/leagues/nfl/ => /sports/baseball/leagues/mlb/)

NFL ENDPOINTS

Leagues: sports.core.api.espn.com/v2/sports/football/leagues/nfl

Athletes: sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/athletes/:athlete_id

Teams: sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/teams

Team: sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/teams/:team_id

Plays: sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/:game_id/competitions/:game_id/plays?limit=300

Depth charts: sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/teams/:team_id/depthcharts

Whitelist dates: sports.core.api.espn.com/v2/sports/football/leagues/nfl/calendar/whitelist

Season: sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year

Week: sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2020/types/:season_type/weeks/:week

All weeks sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/types/:season_type/weeks

Odds

Win probabilities sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/:game_id/competitions/:game_id/probabilities*?limit=200*

Odds: sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/:game_id/competitions/:game_id/odds

Against-the-spread: sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/types/2/teams/:team_id/ats

Futures: sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/futures

Head-to-head (game): sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/:game_id/competitions/:game_id/odds/:bet_provider_id/head-to-heads

Odds records: sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/types/0/teams/:team_id/odds-records

Odds history - Game: sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401249063/competitions/401249063/odds/:bet_provider_id/history/0/movement?limit=100

Odds history - Team: sports.core.api.espn.com/v2/sports/football/leagues/nfl/teams/:team_id/odds/:bet_provider_id/past-performances?limit=200

bet_provider_id:

  • 38: Caesars
  • 31: William Hill
  • 41: SugarHouse
  • 36: Unibet
  • 2000: Bet 365
  • 25: Westgate
  • 45: William Hill (New Jersey)
  • 1001: accuscore
  • 1004: consensus
  • 1003: numberfire
  • 1002: teamrankings

Stats

Positions (enum): sports.core.api.espn.com/v2/sports/football/leagues/nfl/positions*?limit=100*

QBR Weekly/Game stats: sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2020/types/2/weeks/:week_num/qbr/10000

List of games via date-range: site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard?limit=1000&dates=20200901-20210228

  • date range cannot exceed 13 months
  • dates can also be = YYYYMMDD, YYYY
  • add &1577413600 at the end for overriding the cache

Athlete

all active athletes: sports.core.api.espn.com/v2/sports/football/leagues/nfl/athletes?active=true

site.web.api.espn.com/apis/common/v3/sports/football/nfl/athletes/:athlete_id

site.web.api.espn.com/apis/common/v3/sports/football/nfl/athletes/:athlete_id/splits?season=2020

site.web.api.espn.com/apis/common/v3/sports/football/nfl/athletes/:athlete_id/gamelog

site.web.api.espn.com/apis/common/v3/sports/football/nfl/athletes/:athlete_id/stats

site.web.api.espn.com/apis/common/v3/sports/football/nfl/athletes/:athlete_id/bio

site.web.api.espn.com/apis/common/v3/sports/football/nfl/athletes/:athlete_id/overview

sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/types/2/athletes/:athlete_id/statistics

sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2020/types/2/athletes/:athlete_id/projections

sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/:game_id/competitions/:game_id/competitors/:team_id/roster/:athlete_id/statistics/0

Team

site.api.espn.com/apis/site/v2/sports/football/nfl/teams

site.api.espn.com/apis/site/v2/sports/football/nfl/teams/:team_id

site.api.espn.com/apis/site/v2/sports/football/nfl/teams/:team_id/roster

site.api.espn.com/apis/site/v2/sports/football/nfl/teams/:team_id/schedule*{?season,seasontype}*

sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2020/types/2/teams/:team_id/statistics

sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2020/teams/:team_id/projection

sports.core.api.espn.com/v2/sports/football/leagues/nfl/teams/:team_id/odds/1002/past-performances?limit=140

sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/:game_id/competitions/:game_id/competitors/:team_id/roster?season=YYYY

site.api.espn.com/apis/site/v2/sports/football/nfl/teams/3?enable=roster

sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/teams/:team_id/projection

sports.core.api.espn.com/v2/sports/football/leagues/nfl/teams/:team_id/odds/:bet_provider_id/past-performances?limit=200

Leaders

site.api.espn.com/apis/site/v3/sports/football/nfl/leaders*{?season,seasontype}*

Scoreboard

site.api.espn.com/apis/site/v2/sports/football/college-football**/scoreboard**{?dates=YYYYMMDD}

Search

site.web.api.espn.com/apis/common/v3/search?region=us&lang=en&query=nfl&limit=5&mode=prefix

site.web.api.espn.com/apis/common/v3/search

site.web.api.espn.com/apis/fantasy/v2/games/ffl/games?dates={YYYYMMDD}-{YYYYMMDD}&pbpOnly=true

News

site.api.espn.com/apis/site/v2/sports/football/nfl/news

Header

site.web.api.espn.com/apis/v2/scoreboard/header?sport=football&league=nfl

Fantasy

fantasy.espn.com/apis/v3/games/ffl/seasons/2019/segments/0/leagues/1241838?view=mDraftDetail&view=mLiveScoring&view=mMatchupScore&view=mPendingTransactions&view=mPositionalRatings&view=mSettings&view=mTeam&view=modular&view=mNav

seasontype

  • year - Integer year in which the season started.
  • type - Integer corresponding to the season type (1 = preseason, 2 = regular season, 3 = postseason).
  • description - String representation of the season type. For example, "regular" for season type 2.

Misc

sports.core.api.espn.com/v2/sports/football/leagues/nfl/athletes/2/statisticslog

sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/teams/:team_id

sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/:year/teams/:team_id/athletes?limit=200


Resources

ESPN Leagues API List

Starting endpoint: https://sports.core.api.espn.com/v2/sports

BASEBALL

BASKETBALL

FOOTBALL

GOLF

HOCKEY

LACROSSE

MMA

RACING

RUGBY

RUGBY-LEAGUE

SOCCER

VOLLEYBALL

AUSTRALIAN-FOOTBALL

TENNIS

WATER-POLO

FIELD-HOCKEY

@nntrn
Copy link
Author

nntrn commented Mar 11, 2025

Any chance someone has found an endpoint for the American Hockey League (AHL)?

@MABeatty1978
https://sports.core.api.espn.com/v2/sports/hockey/leagues/nhl

List of endpoints for other leagues (mlb, mma, rugby, soccer, etc)
https://gist.githubusercontent.com/nntrn/ee26cb2a0716de0947a0a4e9a157bc1c/raw/b99b9e0d2df72470fa622e2f76cecb0362111e9a/extending-espn-api.md

@nntrn
Copy link
Author

nntrn commented Mar 11, 2025

Is it possible to get live scoring of an actual NFL playoff game for fantasy stats? We do our fantasy playoffs during the actual playoffs and we have been calculated scores by hand, but would love to be able to just connect this API to a google sheet and then create formulas to get our scores. We would use the following score types from the fantasy section.

@tdart5 - i threw a bunch of stuff together but i hope something helps

https://site.api.espn.com/apis/fantasy/v2/games/ffl/news/players?limit=50&playerId=2977187

https://gambit-api.fantasy.espn.com/apis/v1/dashboards/espn-en?view=allon
https://gambit-api.fantasy.espn.com/apis/v1/challenges/tournament-challenge-bracket-2024/groups/6e682872-7e5f-3aa2-84bf-003cb6a630ae?view=chui_pagetype_group_picks

https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2024/players?view=players_wl
https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2024/players?view=kona_player_info
https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2024/players?scoringPeriodId=0&view=allon
https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2024?view=proTeamSchedules_wl
https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2024?view=chui_default_platformsettings

Header for increasing the limit returned: X-Fantasy-Filter: {"players":{"limit":3000}}

Example
curl -H 'X-Fantasy-Filter: {"players":{"limit":3000}}' 'https://lm-api-reads.fantasy.espn.com/apis/v3/games/ffl/seasons/2024/players?view=players_wl'

@adamruehle
Copy link

As far as I can tell, this url "https://sports.core.api.espn.com/v2/sports/{sport}/leagues/{espn_league}/events/{espn_event_id}/competitions/{espn_event_id}/competitors/{espn_team_id}/roster"
doesn't work for college-football. For example:
https://sports.core.api.espn.com/v2/sports/football/leagues/college-football/events/%7Bespn_event_id%7D/competitions/401628322/competitors/57/roster
This url is a game between florida and uMiami. The team_id is for Florida. The url doesn't work and returns:
{"error":{"message":"Bad event id: '{espn_event_id}' or league 'college-football' not allowed","code":400}}

@propsdaily
Copy link

propsdaily commented Apr 3, 2025

As far as I can tell, this url "https://sports.core.api.espn.com/v2/sports/{sport}/leagues/{espn_league}/events/{espn_event_id}/competitions/{espn_event_id}/competitors/{espn_team_id}/roster" doesn't work for college-football. For example: https://sports.core.api.espn.com/v2/sports/football/leagues/college-football/events/%7Bespn_event_id%7D/competitions/401628322/competitors/57/roster This url is a game between florida and uMiami. The team_id is for Florida. The url doesn't work and returns: {"error":{"message":"Bad event id: '{espn_event_id}' or league 'college-football' not allowed","code":400}}

@adamruehle Read the error message, you have a typo in your url (passing '{espn_event_id}' as the first event id in the url:
sports.core.api.espn.com/v2/sports/football/leagues/college-football/events/%7Bespn_event_id%7D/competitions/401628322/competitors/57/roster

Should be:
https://sports.core.api.espn.com/v2/sports/football/leagues/college-football/events/401628322/competitions/401628322/competitors/57/roster

@dice-bet
Copy link

dice-bet commented Apr 6, 2025

hello, need help getting detailed injury reports per team. I can get it from :
https://sports.core.api.espn.com/v2/sports/basketball/leagues/nba/teams/3/injuries

but returns links to individual players without names

i know the roster endpoint gives Status Out/Active but im looking for an endpoint that gives full team statuses with injury report. the ESPN injury page has it all for teams
https://www.espn.com/nba/team/injuries/_/name/chi/chicago-bulls

just cant get it in an endpoint, any help is appreciated thanks

update:

got this to work for individual nba teams

https://site.api.espn.com/apis/site/v2/sports/basketball/nba/injuries?team=ATL

for a matchup

https://site.api.espn.com/apis/site/v2/sports/basketball/nba/injuries?team=ATL&team=NYK
https://site.api.espn.com/apis/site/v2/sports/baseball/mlb/injuries?team=ATL&team=NYY

Looks like you need to use abbreviations

@Azami1990
Copy link

Heyho,

is there a way to get the NFL MVP from the API besides searching the news?

Thanks in advance!

@adamruehle
Copy link

Hi, I'm having trouble figuring out how to get the games for college basketball within a specific date range. This link works:
https://site.api.espn.com/apis/site/v2/sports/basketball/mens-college-basketball/scoreboard
But then it only shows me recent or upcoming events like the championship between florida and houston. If I try this link:
https://site.api.espn.com/apis/site/v2/sports/basketball/mens-college-basketball/scoreboard?limit=1000&dates=20231218-20240107
I see this error on the webpage {"code":404,"message":"Failed to get events endpoint."}

@bakersoft
Copy link

My 2 cents on the ESPN NBA data - it's unreliable and incomplete. You're better off using the NBA static JSON data they have because 1, most of their JSONs contain everything you need to know in a single request, and 2, it's more conducive to better quality data. The ESPN play by play data for example - there are player ID's in recent data for players who aren't active anymore. There are missing data points - my best example is 3 pointers. You only have descriptions to rely on to pull out the data. Sometimes the player names in the descriptions don't match the player ID's. I reverted to pulling the data from ESPN's website and even then, there are not enough data points to pull the info I wanted. The NBA data has the data points built in and there's little guessing.

@JimNayzium
Copy link

Concerning the NFL only,
Does anyone know any other status text ESPN uses to signify whehter a game is live in progress or not other than these?

  "STATUS_SCHEDULED" ,
  "STATUS_IN_PROGRESS",
  "STATUS_HALFTIME",
  "STATUS_END_PERIOD",
  "STATUS_FINAL"

For example is there a STATUS_OVERTIME or *_OVER_TIME maybe?
Or STATUS_POST_PONED? etc...

thanks!

@chisox721
Copy link

hello, need help getting detailed injury reports per team. I can get it from : https://sports.core.api.espn.com/v2/sports/basketball/leagues/nba/teams/3/injuries

but returns links to individual players without names

i know the roster endpoint gives Status Out/Active but im looking for an endpoint that gives full team statuses with injury report. the ESPN injury page has it all for teams https://www.espn.com/nba/team/injuries/_/name/chi/chicago-bulls

just cant get it in an endpoint, any help is appreciated thanks

update:

got this to work for individual nba teams

https://site.api.espn.com/apis/site/v2/sports/basketball/nba/injuries?team=ATL

for a matchup

https://site.api.espn.com/apis/site/v2/sports/basketball/nba/injuries?team=ATL&team=NYK https://site.api.espn.com/apis/site/v2/sports/baseball/mlb/injuries?team=ATL&team=NYY

Looks like you need to use abbreviations

When I heavily involved in DFS my approach was to use the NBA injury report page and twitter. Maybe things have changed the past couple years but ESPN was always super sketchy with updates.

@chisox721
Copy link

My 2 cents on the ESPN NBA data - it's unreliable and incomplete. You're better off using the NBA static JSON data they have because 1, most of their JSONs contain everything you need to know in a single request, and 2, it's more conducive to better quality data. The ESPN play by play data for example - there are player ID's in recent data for players who aren't active anymore. There are missing data points - my best example is 3 pointers. You only have descriptions to rely on to pull out the data. Sometimes the player names in the descriptions don't match the player ID's. I reverted to pulling the data from ESPN's website and even then, there are not enough data points to pull the info I wanted. The NBA data has the data points built in and there's little guessing.

This. Waste of time messing with ESPN for PBP unless its college basketball/football and the only other option is parsing the archaic ncaa site. MLB/NBA/NFL API's are the way to go.

@famictech2000
Copy link

Does anyone know the URL/end point for the entire 2025 NFL schedule that was released yesterday!?

https://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard -> Only shows 2025 Week 1

https://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard?seasontype=2&week=1 -> Shows 2024 schedule (for whatever week you put in!?

@propsdaily
Copy link

Does anyone know the URL/end point for the entire 2025 NFL schedule that was released yesterday!?

https://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard -> Only shows 2025 Week 1

https://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard?seasontype=2&week=1 -> Shows 2024 schedule (for whatever week you put in!?

You could maybe do something like this to get all regular season events:
https://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2025/types/2/events?limit=1000

@JimNayzium
Copy link

Anyone have a feed link that woud let me see who was OUT for a given week on a roster?
For example, Barkley sat out week 18 for Eagles. But in his roster the active: "false" is set. And it's false for all players so I assume that's just a throw away meaningless thing for that end point.

Any thoughts?

@nntrn
Copy link
Author

nntrn commented Jun 24, 2025

Anyone have a feed link that woud let me see who was OUT for a given week on a roster? For example, Barkley sat out week 18 for Eagles. But in his roster the active: "false" is set. And it's false for all players so I assume that's just a throw away meaningless thing for that end point.

Any thoughts?

@JimNayzium, your definition of OUT isn't clear - what counts as out? present, but didn't play? not present and didn't play?

players in event rosters with .statistics["$ref"] definitely played and players missing this field probably didn't

i think active is a real time field that shows when a player is active during the game.

---

view players from event roster:
/nfl/events/401671841/competitions/401671841/competitors/21/roster

not pratical, but you can validate this by checking each player's eventlog:
/nfl/seasons/2024/athletes/3929630/eventlog

@JimNayzium
Copy link

JimNayzium commented Jun 25, 2025

@nntrn - Thanks so much for the help!
the active explanation makes sense, and thanks for that!
So I just meant the actual injury report status going into the game.
Present, but didn't play is not what I mean at all. A player who dresses out, is on active roster and garners no playing time would not have been "OUT" on the injury report. But Barkley was in a ball cap the entire game week 18, so he would have been OUT week 18.

So for Barkley, on the roster for that week, the didNotPlay === false, does not mean necessarily he was listed as "OUT" if that makes sense?

Also, not having statistics would not be 100 percent accurate either. A WR could go in for a a number of plays, never be targeted and never gain statistics of any kind.

Was just hoping to see a pregame injury report end point of some kind. Or "This week's inactives" type thing.

{
  "playerId": 3929630,
  "period": 0,
  "active": false,
  "starter": false,
  "forPlayerId": 0,
  "jersey": "26",
  "valid": false,
  "athlete": {
    "$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/athletes/3929630?lang=en&region=us"
  },
  "position": {
    "$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/positions/9?lang=en&region=us"
  },
  "didNotPlay": false,
  "displayName": "Barkley"
},

@propsdaily
Copy link

propsdaily commented Jun 25, 2025

@nntrn - Thanks so much for the help! the active explanation makes sense, and thanks for that! So I just meant the actual injury report status going into the game. Present, but didn't play is not what I mean at all. A player who dresses out, is on active roster and garners no playing time would not have been "OUT" on the injury report. But Barkley was in a ball cap the entire game week 18, so he would have been OUT week 18.

So for Barkley, on the roster for that week, the didNotPlay === false, does not mean necessarily he was listed as "OUT" if that makes sense?

Also, not having statistics would not be 100 percent accurate either. A WR could go in for a a number of plays, never be targeted and never gain statistics of any kind.

Was just hoping to see a pregame injury report end point of some kind. Or "This week's inactives" type thing.

{
  "playerId": 3929630,
  "period": 0,
  "active": false,
  "starter": false,
  "forPlayerId": 0,
  "jersey": "26",
  "valid": false,
  "athlete": {
    "$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/athletes/3929630?lang=en&region=us"
  },
  "position": {
    "$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/positions/9?lang=en&region=us"
  },
  "didNotPlay": false,
  "displayName": "Barkley"
},

@JimNayzium I'm not sure if this would help pre-game but for post, you could check their event log.

It looks like it shows a played => true/false, and for week 18 on Barkley it shows false.

@dice-bet
Copy link

dice-bet commented Jul 1, 2025

Does anyone know the URL/end point for the entire 2025 NFL schedule that was released yesterday!?
https://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard -> Only shows 2025 Week 1
https://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard?seasontype=2&week=1 -> Shows 2024 schedule (for whatever week you put in!?

You could maybe do something like this to get all regular season events: https://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2025/types/2/events?limit=1000

https://cdn.espn.com/core/nfl/schedule?xhr=1

@ryanbuckner
Copy link

ryanbuckner commented Jul 2, 2025 via email

@johnpuksta
Copy link

Noticed something odd:

For the 2024 events API, it doesn't return playoff games past the 1st divisional round. For example, for the Eagles (ID = 21), you can see the response of https://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/teams/21/events is missing Games 401671889 (SuperBowl) and 401671888 (NFC champ).

For previous years (2023 season), I verified that all games were there (pre, in, post season).

I checked the other Events API: https://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events?season=2024&seasontypes=3&page=3. Here you can filter by page to go through each result. None of these pages contain these missing games either.

Do we think ESPN forgot to track these games or is there a new playoffs API?

@aaronweldy
Copy link

If anyone's interested, I've gotten pretty far in creating an OpenAPI spec for all of the endpoints listed here + more: https://github.com/aaronweldy/espn-openapi

Fully types out the response schema & is easy to create generated clients for whatever language you want with your favorite OpenAPI generator.

@KieranMunslow
Copy link

Hi, a specific one regarding the NFL. Is anyone aware of a way to view the correct values for passing yards after catch? Receiving yards after catch seems fine but passing yards after catch I'm struggling to find.
The player stats of an event don't have that stat (e.g. https://site.api.espn.com/apis/site/v2/sports/football/nfl/summary?event=401671764)
And the statistics section of a player's event log has the stat, but its seemingly 0 no matter what
(e.g. Jared Goff and Amon-Ra for the same Lions-Cowboys game
Goff - https://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671764/competitions/401671764/competitors/8/roster/3046779/statistics/0?lang=en&region=us
Amon Ra - https://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671764/competitions/401671764/competitors/8/roster/4374302/statistics/0?lang=en&region=us)

@nntrn
Copy link
Author

nntrn commented Jul 15, 2025

Hi, a specific one regarding the NFL. Is anyone aware of a way to view the correct values for passing yards after catch? Receiving yards after catch seems fine but passing yards after catch I'm struggling to find.

You can get this in the play by play
https://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671764/competitions/401671764/plays?limit=300

This is what I see for Goff btw:

  {
    "name": "passingYards",
    "displayName": "Passing Yards",
    "shortDisplayName": "Pass Yards",
    "description": "The total passing yards.",
    "abbreviation": "YDS",
    "value": 315.0,
    "displayValue": "315",
  },
  {
    "name": "passingYardsAtCatch",
    "displayName": "Passing Yards At Catch",
    "shortDisplayName": "PY@C",
    "description": "The amount of passing yards when the catch is made.",
    "abbreviation": "PY@C",
    "value": 315.0,
    "displayValue": "315"
  },
  {
    "name": "passingYardsPerGame",
    "displayName": "Passing Yards Per Game",
    "shortDisplayName": "PYDS/G",
    "description": "The number of passing yards per game.",
    "abbreviation": "YDS/G",
    "value": 315.0,
    "displayValue": "315.0"
  }

@KieranMunslow

@KieranMunslow
Copy link

Hi, a specific one regarding the NFL. Is anyone aware of a way to view the correct values for passing yards after catch? Receiving yards after catch seems fine but passing yards after catch I'm struggling to find.

You can get this in the play by play https://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671764/competitions/401671764/plays?limit=300

This is what I see for Goff btw:

@KieranMunslow

Ah I never noticed it in the play by play section, thanks @nntrn. I'll have to take a look and see if there is a realistic way for me to total them and attribute to correct QB.

The stats I was more referring to as in the Goff example was the 2 below. PYAC ideally should be 180 and PY@C should be 135.

{ "name": "passingYardsAfterCatch", "displayName": "Passing Yards After Catch", "shortDisplayName": "PYAC", "description": "The amount of passing yards after catch.", "abbreviation": "PYAC", "value": 0, "displayValue": "0" }, { "name": "passingYardsAtCatch", "displayName": "Passing Yards At Catch", "shortDisplayName": "PY@C", "description": "The amount of passing yards when the catch is made.", "abbreviation": "PY@C", "value": 315, "displayValue": "315" }

@macsochor
Copy link

Thank you so much for putting this together! I am creating a website to run an alternate rules DFS contest for my friends and I wanted to add live scoring. I'll only need to fetch the scores for around 50 players, what endpoint do you think would be best for this?

I see that I could potentially make a call to each player endpoint or to each game endpoint, but I'm guessing that I could add headers to one of these requests to just get the stats for the games happening today for only a certain set of playerIds. Does any endpoint come to mind?

I can probably hack it all together with the existing ones, I just don't want to spam the api and parse through a bunch of data if I don't have to

@nntrn
Copy link
Author

nntrn commented Jul 27, 2025

I see that I could potentially make a call to each player endpoint or to each game endpoint, but I'm guessing that I could add headers to one of these requests to just get the stats for the games happening today for only a certain set of playerIds. Does any endpoint come to mind?

@macsochor, if you want players playing THAT day, check out the xhr links

@guizucolotto
Copy link

I think I missed something, what call do I get the information from the Stats example at the end of this .md?

@JimNayzium
Copy link

I have a fun one that is quite maddening. (No pun intended)
In the drive play-by-play feed from a Bills game week 1 with id: 401671617
There was a discrepancy in the totals I was getting for James Cook's stats and I found a mistake by ESPN apparently.
I see no real way to know the mistake should be discounted or removed in the feeds either, at least not in these feeds. Other than comparing the stat totals at the end, but then determining what is wrong is near impossible.

I compared the PDF at nfl.com of the play by play hard copy of the actual game on these two plays and it would seem that the James Cook 11 yard rush does not exist at all. Somehow it just got entered for James Cook. Typically if a penalty happens or a play is reviewed that is well documented by ESPN's feeds. This is a pure mistake I am afraid. Like the intern who entered the data just shanked.

To be clear, this first play just doesn't appear in the https://static.www.nfl.com/gamecenter/7d40236a-1312-11ef-afd1-646009f18b2e.pdf report here. And if you look at the json data you will see the same exact clock times.

I guess this is the type thing that causes a "stat" correction to be made in fantasy maybe?

Any thoughts on a way to detect these type things? Something I am missing?

{
			"id": "4016716173400",
			"end": {
				"down": 1,
				"team": {
					"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/teams/2?lang=en&region=us"
				},
				"distance": 13,
				"yardLine": 43,
				"possessionText": "BUF 43",
				"yardsToEndzone": 57,
				"downDistanceText": "1st & 13 at BUF 43",
				"shortDownDistanceText": "1st & 13"
			},
			"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671617/competitions/401671617/plays/4016716173400?lang=en&region=us",
			"team": {
				"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/teams/2?lang=en&region=us"
			},
			"text": "(Shotgun) J.Cook to BUF 43 for 11 yards.",
			"type": {
				"id": "5",
				"text": "Rush",
				"abbreviation": "RUSH"
			},
			"clock": {
				"value": 449,
				"displayValue": "7:29"
			},
			"drive": {
				"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671617/competitions/401671617/drives/40167161716?lang=en&region=us"
			},
			"start": {
				"down": 2,
				"team": {
					"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/teams/2?lang=en&region=us"
				},
				"distance": 8,
				"yardLine": 32,
				"possessionText": "BUF 32",
				"yardsToEndzone": 68,
				"downDistanceText": "2nd & 8 at BUF 32",
				"shortDownDistanceText": "2nd & 8"
			},
			"period": {
				"number": 4
			},
			"modified": "2024-09-11T20:51Z",
			"priority": false,
			"awayScore": 28,
			"homeScore": 31,
			"shortText": "James Cook 11 Yd Rush",
			"wallclock": "2024-09-08T19:40:06Z",
			"scoreValue": 0,
			"probability": {
				"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671617/competitions/401671617/probabilities/4016716173400?lang=en&region=us"
			},
			"scoringPlay": false,
			"statYardage": 11,
			"participants": [
				{
					"type": "rusher",
					"order": 1,
					"stats": [
						{
							"name": "rushingAttempts",
							"value": 19,
							"description": "The total number of attempted rushes.",
							"displayName": "Rushing Attempts",
							"abbreviation": "ATT",
							"displayValue": "19",
							"shortDisplayName": "Rushing Attempts"
						},
						{
							"name": "rushingYards",
							"value": 71,
							"description": "The total rushing yards.",
							"displayName": "Rushing Yards",
							"abbreviation": "YDS",
							"displayValue": "71",
							"shortDisplayName": "Rush Yards"
						},
						{
							"name": "rushingTouchdowns",
							"value": 0,
							"description": "The total number of rushing touchdowns.",
							"displayName": "Rushing Touchdowns",
							"abbreviation": "TD",
							"displayValue": "0",
							"shortDisplayName": "Rushing Touchdowns"
						}
					],
					"athlete": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/athletes/4379399?lang=en&region=us"
					},
					"position": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/positions/9?lang=en&region=us"
					},
					"statistics": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671617/competitions/401671617/competitors/2/roster/4379399/statistics/0?lang=en&region=us"
					}
				}
			],
			"sequenceNumber": "340000",
			"alternativeText": "(Shotgun) J.Cook to BUF 43 for 11 yards.",
			"yardsAfterCatch": 0,
			"shortAlternativeText": "James Cook 11 Yd Rush"
		},
		{
			"id": "4016716173426",
			"end": {
				"down": 2,
				"team": {
					"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/teams/2?lang=en&region=us"
				},
				"distance": 11,
				"yardLine": 43,
				"possessionText": "BUF 43",
				"yardsToEndzone": 57,
				"downDistanceText": "2nd & 11 at BUF 43",
				"shortDownDistanceText": "2nd & 11"
			},
			"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671617/competitions/401671617/plays/4016716173426?lang=en&region=us",
			"team": {
				"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/teams/2?lang=en&region=us"
			},
			"text": "J.Allen pass short left to D.Kincaid to BUF 43 for 11 yards (S.Murphy-Bunting, O.Pappoe).",
			"type": {
				"id": "24",
				"text": "Pass Reception",
				"abbreviation": "REC"
			},
			"clock": {
				"value": 449,
				"displayValue": "7:29"
			},
			"drive": {
				"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671617/competitions/401671617/drives/40167161716?lang=en&region=us"
			},
			"start": {
				"down": 2,
				"team": {
					"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/teams/2?lang=en&region=us"
				},
				"distance": 8,
				"yardLine": 32,
				"possessionText": "BUF 32",
				"yardsToEndzone": 68,
				"downDistanceText": "2nd & 8 at BUF 32",
				"shortDownDistanceText": "2nd & 8"
			},
			"period": {
				"number": 4
			},
			"modified": "2024-09-11T20:51Z",
			"priority": false,
			"awayScore": 28,
			"homeScore": 31,
			"shortText": "Josh Allen Pass Complete for 11 Yds to Dalton Kincaid",
			"wallclock": "2024-09-08T19:39:58Z",
			"scoreValue": 0,
			"probability": {
				"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671617/competitions/401671617/probabilities/4016716173426?lang=en&region=us"
			},
			"scoringPlay": false,
			"statYardage": 11,
			"participants": [
				{
					"type": "passer",
					"order": 1,
					"stats": [
						{
							"name": "completions/attempts",
							"value": 0.7826086957,
							"description": "The number of passing completions and attempts.",
							"displayName": "Completions / Attempts",
							"abbreviation": "COMP/ATT",
							"displayValue": "18/23",
							"shortDisplayName": "COMP/ATT"
						},
						{
							"name": "passingYards",
							"value": 232,
							"description": "The total passing yards.",
							"displayName": "Passing Yards",
							"abbreviation": "YDS",
							"displayValue": "232",
							"shortDisplayName": "Pass Yards"
						},
						{
							"name": "passingTouchdowns",
							"value": 2,
							"description": "The total number of passing touchdowns.",
							"displayName": "Passing Touchdowns",
							"abbreviation": "TD",
							"displayValue": "2",
							"shortDisplayName": "Touchdowns"
						},
						{
							"name": "interceptions",
							"value": 0,
							"description": "The total number of interceptions.",
							"displayName": "Interceptions",
							"abbreviation": "INT",
							"displayValue": "0",
							"shortDisplayName": "Interceptions"
						}
					],
					"athlete": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/athletes/3918298?lang=en&region=us"
					},
					"position": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/positions/8?lang=en&region=us"
					},
					"statistics": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671617/competitions/401671617/competitors/2/roster/3918298/statistics/0?lang=en&region=us"
					}
				},
				{
					"type": "receiver",
					"order": 2,
					"stats": [
						{
							"name": "receptions",
							"value": 1,
							"description": "The total number of receptions.",
							"displayName": "Receptions",
							"abbreviation": "REC",
							"displayValue": "1",
							"shortDisplayName": "Receptions"
						},
						{
							"name": "receivingYards",
							"value": 11,
							"description": "The total receiving yards.",
							"displayName": "Receiving Yards",
							"abbreviation": "YDS",
							"displayValue": "11",
							"shortDisplayName": "Rec. Yards"
						},
						{
							"name": "receivingTouchdowns",
							"value": 0,
							"description": "The total number of receiving touchdowns.",
							"displayName": "Receiving Touchdowns",
							"abbreviation": "TD",
							"displayValue": "0",
							"shortDisplayName": "Receiving Touchdowns"
						}
					],
					"athlete": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/athletes/4385690?lang=en&region=us"
					},
					"position": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/positions/7?lang=en&region=us"
					},
					"statistics": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671617/competitions/401671617/competitors/2/roster/4385690/statistics/0?lang=en&region=us"
					}
				},
				{
					"type": "tackler",
					"order": 3,
					"stats": [
						{
							"name": "totalTackles",
							"value": 5,
							"description": "The total number of tackles.",
							"displayName": "Total Tackles",
							"abbreviation": "TOT",
							"displayValue": "5",
							"shortDisplayName": "Tackles"
						},
						{
							"name": "sacks",
							"value": 0,
							"description": "The total number of sacks.",
							"displayName": "Sacks",
							"abbreviation": "SACK",
							"displayValue": "0",
							"shortDisplayName": "Sacks"
						},
						{
							"name": "interceptions",
							"value": 0,
							"description": "The total number of interceptions.",
							"displayName": "Interceptions",
							"abbreviation": "INT",
							"displayValue": "0",
							"shortDisplayName": "Interceptions"
						}
					],
					"athlete": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/athletes/3932886?lang=en&region=us"
					},
					"position": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/positions/29?lang=en&region=us"
					},
					"statistics": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671617/competitions/401671617/competitors/22/roster/3932886/statistics/0?lang=en&region=us"
					}
				},
				{
					"type": "assistedBy",
					"order": 4,
					"stats": [
						{
							"name": "totalTackles",
							"value": 4,
							"description": "The total number of tackles.",
							"displayName": "Total Tackles",
							"abbreviation": "TOT",
							"displayValue": "4",
							"shortDisplayName": "Tackles"
						},
						{
							"name": "sacks",
							"value": 0,
							"description": "The total number of sacks.",
							"displayName": "Sacks",
							"abbreviation": "SACK",
							"displayValue": "0",
							"shortDisplayName": "Sacks"
						},
						{
							"name": "interceptions",
							"value": 0,
							"description": "The total number of interceptions.",
							"displayName": "Interceptions",
							"abbreviation": "INT",
							"displayValue": "0",
							"shortDisplayName": "Interceptions"
						}
					],
					"athlete": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2024/athletes/4567219?lang=en&region=us"
					},
					"position": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/positions/30?lang=en&region=us"
					},
					"statistics": {
						"$ref": "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/events/401671617/competitions/401671617/competitors/22/roster/4567219/statistics/0?lang=en&region=us"
					}
				}
			],
			"sequenceNumber": "342600",
			"alternativeText": "J.Allen pass short left to D.Kincaid to BUF 43 for 11 yards (S.Murphy-Bunting, O.Pappoe).",
			"yardsAfterCatch": 0,
			"shortAlternativeText": "Josh Allen Pass Complete for 11 Yds to Dalton Kincaid"
		},

@KieranMunslow
Copy link

@JimNayzium, I've taken a look at what you've mentioned and think you're spot on with this being a phantom play.

In terms of detecting things like this, it seems pretty tough as the non-existent play is populated as though its real. The one discrepancy I can find is the value of the wallclock field. I've listed a few plays around the play you're looking and the fake Cook play breaks the sequence. Its hard to know if this will be the case in other instances though.

The real Cook rush with penalty on play - 2024-09-08T19:39:07Z
The phantom Cook rush - 2024-09-08T19:40:06Z
The Kincaid pass - 2024-09-08T19:39:58Z
The Cook rush for loss of 3 yards - 2024-09-08T19:40:41Z

Also out of curiosity, what URL are you requesting this data from? My responses all lacked the "yardsAfterCatch": 0 for the Kincaid pass which you seem to have.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment