Skip to content

Instantly share code, notes, and snippets.

@akeaswaran
Last active September 21, 2026 05:52
Show Gist options
  • Select an option

  • Save akeaswaran/b48b02f1c94f873c6655e7129910fc3b to your computer and use it in GitHub Desktop.

Select an option

Save akeaswaran/b48b02f1c94f873c6655e7129910fc3b to your computer and use it in GitHub Desktop.
ESPN hidden API Docs

ESPN's hidden API endpoints

Football

College Football

Latest News: http://site.api.espn.com/apis/site/v2/sports/football/college-football/news

Latest Scores: http://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard

  • query params:

    • calendar: 'blacklist'
    • dates: any date in YYYYMMDD

Game Information: http://site.api.espn.com/apis/site/v2/sports/football/college-football/summary?event=:gameId

  • params:

    • gameId: identifier of some game (EX: 400934572 for 2017 Army vs Navy)

Team Information: http://site.api.espn.com/apis/site/v2/sports/football/college-football/teams/:team

  • params:

    • team: some team abbreviation (EX: 'all' for Allegheny, 'gt' for Georgia Tech, 'wisconsin' for Wisconsin)

Rankings: http://site.api.espn.com/apis/site/v2/sports/football/college-football/rankings

NFL

Scores: http://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard

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

All Teams: http://site.api.espn.com/apis/site/v2/sports/football/nfl/teams

Specific Team: http://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/:team

Baseball

MLB

Scores: http://site.api.espn.com/apis/site/v2/sports/baseball/mlb/scoreboard

News: http://site.api.espn.com/apis/site/v2/sports/baseball/mlb/news

All Teams: http://site.api.espn.com/apis/site/v2/sports/baseball/mlb/teams

Specific Team: http://site.api.espn.com/apis/site/v2/sports/baseball/mlb/teams/:team

College Baseball

Scores: https://site.api.espn.com/apis/site/v2/sports/baseball/college-baseball/scoreboard

Hockey

Scores: http://site.api.espn.com/apis/site/v2/sports/hockey/nhl/scoreboard

News: http://site.api.espn.com/apis/site/v2/sports/hockey/nhl/news

All Teams: http://site.api.espn.com/apis/site/v2/sports/hockey/nhl/teams

Specific Team: http://site.api.espn.com/apis/site/v2/sports/hockey/nhl/teams/:team

Basketball

NBA

Scores: http://site.api.espn.com/apis/site/v2/sports/basketball/nba/scoreboard

News: http://site.api.espn.com/apis/site/v2/sports/basketball/nba/news

All Teams: http://site.api.espn.com/apis/site/v2/sports/basketball/nba/teams

Specific Team: http://site.api.espn.com/apis/site/v2/sports/basketball/nba/teams/:team

WNBA

Scores: http://site.api.espn.com/apis/site/v2/sports/basketball/wnba/scoreboard

News: http://site.api.espn.com/apis/site/v2/sports/basketball/wnba/news

All Teams: http://site.api.espn.com/apis/site/v2/sports/basketball/wnba/teams

Specific Team: http://site.api.espn.com/apis/site/v2/sports/basketball/wnba/teams/:team

Women's College Basketball

Scores: http://site.api.espn.com/apis/site/v2/sports/basketball/womens-college-basketball/scoreboard

News: http://site.api.espn.com/apis/site/v2/sports/basketball/womens-college-basketball/news

All Teams: http://site.api.espn.com/apis/site/v2/sports/basketball/womens-college-basketball/teams

Specific Team: http://site.api.espn.com/apis/site/v2/sports/basketball/womens-college-basketball/teams/:team

Men's College Basketball

Scores: http://site.api.espn.com/apis/site/v2/sports/basketball/mens-college-basketball/scoreboard

News: http://site.api.espn.com/apis/site/v2/sports/basketball/mens-college-basketball/news

All Teams: http://site.api.espn.com/apis/site/v2/sports/basketball/mens-college-basketball/teams

Specific Team: http://site.api.espn.com/apis/site/v2/sports/basketball/mens-college-basketball/teams/:team

Soccer

Scores: http://site.api.espn.com/apis/site/v2/sports/soccer/:league/scoreboard

  • params:

    • league: some league abbreviation (EX: 'eng.1' for EPL, 'usa.1' for MLS)

Latest News: http://site.api.espn.com/apis/site/v2/sports/soccer/:league/news

List of Team Information: http://site.api.espn.com/apis/site/v2/sports/soccer/:league/teams

Will update with more information as I find more...

@ryanbuckner

Copy link
Copy Markdown

Hey @dtokarz1 super helpful thanks! Do you know of a way to get the specific hole breakdowns for a player? So what the scored on what hole by what round?

I know it's 6 years later but .. found it!

https://site.web.api.espn.com/apis/site/v2/sports/golf/pga/leaderboard/401811952/playersummary?season=2026&player=4690755

@ablits82492

ablits82492 commented Aug 5, 2026

Copy link
Copy Markdown

In case this helps someone: I randomly was having all kinds of issues hitting site.api.espn.com - out of nowhere today ... various endpoints.
After way too much troubleshooting, I changed all my queries to use site.web.api.espn.com (just add .web) and that got me fixed up.
Unsure what is the difference if any, but I see that alternate way in mentioned seldomly.

@wwillard7800

Copy link
Copy Markdown

Interesting. I had an issue today that I resolved by changing the UA string from Mozilla/5.0 to a non-browser string, and that resolved my issue without changing the URL.

@ryanbuckner

Copy link
Copy Markdown

I have just started getting errors from the server on a sheet I have been using for years. The API call works fine from my browser but when run from Google Sheets I get:

You don't have permission to access "http&#58;&#47;&#47;site&#46;api&#46;espn&#46;com&#47;apis&#47;site&#47;v2&#47;sports&#47;football&#47;nfl&#47;scoreboard&#63;" on this server.<P>

Here's the endpoint I'm trying. Anyone else seeing NFL issues?
https://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard?seasontype=1&dates=2026&week=3

@daverz06

daverz06 commented Aug 6, 2026

Copy link
Copy Markdown

I have just started getting errors from the server on a sheet I have been using for years. The API call works fine from my browser but when run from Google Sheets I get:

You don't have permission to access "http&#58;&#47;&#47;site&#46;api&#46;espn&#46;com&#47;apis&#47;site&#47;v2&#47;sports&#47;football&#47;nfl&#47;scoreboard&#63;" on this server.<P>

Here's the endpoint I'm trying. Anyone else seeing NFL issues? https://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboard?seasontype=1&dates=2026&week=3

Mine was erroring out too, but that's not surprising since I originally used some of your code to build my scripts. I got it to work quickly however, by using the tip from ablits82492. I simply added ".web" in the URL. The script is now running as it should.

@ryanbuckner

ryanbuckner commented Aug 7, 2026 via email

Copy link
Copy Markdown

@pbrFresh

pbrFresh commented Aug 7, 2026

Copy link
Copy Markdown

I was also getting the permission/403 type errors starting 8/5. I had to wait 2 or 3 minutes between requests, to bypass the problem. Adding the .web also fixed it for me. Thanks ablits82492!

@jabbaaar

Copy link
Copy Markdown

Someone an idea where I can place an update on wrong data inside ESPN?

The German soccer club Borussia Dortmund is playing in the city of Dortmund and not Aue as they have in their DB

@ischmidt20

Copy link
Copy Markdown

The best I could do was email support@espncustomercare.com. I had to bump it twice to even get an acknowledgement but the data were never updated. This was in regard to incorrect arena information for men's college basketball.

@reidwatson

Copy link
Copy Markdown

Yeah, let's all email ESPN about their hidden, no-auth api not working. what could go wrong?

@ryanbuckner

ryanbuckner commented Aug 19, 2026 via email

Copy link
Copy Markdown

@cheese-industries

cheese-industries commented Aug 19, 2026 via email

Copy link
Copy Markdown

@ischmidt20

Copy link
Copy Markdown

To be fair, there's almost nothing in the API that isn't already visible somewhere on their website, so if the data is wrong, it likely doesn't need to be framed as an API issue.

@EnderLocke

Copy link
Copy Markdown

To be fair, there's almost nothing in the API that isn't already visible somewhere on their website, so if the data is wrong, it likely doesn't need to be framed as an API issue.

this no reason to bring up the api just point it out on their site wherever it is

@jabbaaar

Copy link
Copy Markdown

The best I could do was email support@espncustomercare.com. I had to bump it twice to even get an acknowledgement but the data were never updated. This was in regard to incorrect arena information for men's college basketball.

Thx
I‘ll give it a try

@goaliedude3919

Copy link
Copy Markdown

In case this helps someone: I randomly was having all kinds of issues hitting site.api.espn.com - out of nowhere today ... various endpoints. After way too much troubleshooting, I changed all my queries to use site.web.api.espn.com (just add .web) and that got me fixed up. Unsure what is the difference if any, but I see that alternate way in mentioned seldomly.

You're a lifesaver, I was going down a rabbit hole trying to find ways around this and then I came across this comment. So glad there was such an easy workaround!

@BarcaBoy109

Copy link
Copy Markdown

I couldnt find the soccer teams database, I built a python dictionary for it in a project I was working on.
This file has all teams in the top 5 football leagues in europe (EPL, La Liga, Bundesliga, Serie A and Ligue 1) as of the 2026/2027 football season in a python dictionary.

TEAMS = {
    # English Premier League (eng.1)
    "afc bournemouth": ("AFC Bournemouth", "349"),
    "arsenal": ("Arsenal", "359"),
    "aston villa": ("Aston Villa", "362"),
    "brentford": ("Brentford", "337"),
    "brighton & hove albion": ("Brighton & Hove Albion", "331"),
    "chelsea": ("Chelsea", "363"),
    "coventry city": ("Coventry City", "388"),
    "crystal palace": ("Crystal Palace", "384"),
    "everton": ("Everton", "368"),
    "fulham": ("Fulham", "370"),
    "hull city": ("Hull City", "306"),
    "ipswich town": ("Ipswich Town", "373"),
    "leeds united": ("Leeds United", "357"),
    "liverpool": ("Liverpool", "364"),
    "manchester city": ("Manchester City", "382"),
    "manchester united": ("Manchester United", "360"),
    "newcastle united": ("Newcastle United", "361"),
    "nottingham forest": ("Nottingham Forest", "393"),
    "sunderland": ("Sunderland", "366"),
    "tottenham hotspur": ("Tottenham Hotspur", "367"),
    # La Liga (esp.1)
    "alaves": ("Alavés", "96"),
    "athletic club": ("Athletic Club", "93"),
    "atletico madrid": ("Atlético Madrid", "1068"),
    "barcelona": ("Barcelona", "83"),
    "celta vigo": ("Celta Vigo", "85"),
    "deportivo": ("Deportivo", "90"),
    "elche": ("Elche", "3751"),
    "espanyol": ("Espanyol", "88"),
    "getafe": ("Getafe", "2922"),
    "levante": ("Levante", "1538"),
    "malaga": ("Málaga", "99"),
    "osasuna": ("Osasuna", "97"),
    "racing santander": ("Racing Santander", "87"),
    "rayo vallecano": ("Rayo Vallecano", "101"),
    "real betis": ("Real Betis", "244"),
    "real madrid": ("Real Madrid", "86"),
    "real sociedad": ("Real Sociedad", "89"),
    "sevilla": ("Sevilla", "243"),
    "valencia": ("Valencia", "94"),
    "villarreal": ("Villarreal", "102"),
    # Bundesliga (ger.1)
    "1 fc union berlin": ("1. FC Union Berlin", "598"),
    "bayer leverkusen": ("Bayer Leverkusen", "131"),
    "bayern munich": ("Bayern Munich", "132"),
    "borussia dortmund": ("Borussia Dortmund", "124"),
    "borussia monchengladbach": ("Borussia Mönchengladbach", "268"),
    "eintracht frankfurt": ("Eintracht Frankfurt", "125"),
    "fc augsburg": ("FC Augsburg", "3841"),
    "fc cologne": ("FC Cologne", "122"),
    "hamburg sv": ("Hamburg SV", "127"),
    "mainz": ("Mainz", "2950"),
    "rb leipzig": ("RB Leipzig", "11420"),
    "sc freiburg": ("SC Freiburg", "126"),
    "sc paderborn 07": ("SC Paderborn 07", "3307"),
    "sv elversberg": ("SV Elversberg", "10388"),
    "schalke 04": ("Schalke 04", "133"),
    "tsg hoffenheim": ("TSG Hoffenheim", "7911"),
    "vfb stuttgart": ("VfB Stuttgart", "134"),
    "werder bremen": ("Werder Bremen", "137"),
    # Serie A (ita.1)
    "ac milan": ("AC Milan", "103"),
    "as roma": ("AS Roma", "104"),
    "atalanta": ("Atalanta", "105"),
    "bologna": ("Bologna", "107"),
    "cagliari": ("Cagliari", "2925"),
    "como": ("Como", "2572"),
    "fiorentina": ("Fiorentina", "109"),
    "frosinone": ("Frosinone", "4057"),
    "genoa": ("Genoa", "3263"),
    "internazionale": ("Internazionale", "110"),
    "juventus": ("Juventus", "111"),
    "lazio": ("Lazio", "112"),
    "lecce": ("Lecce", "113"),
    "monza": ("Monza", "4007"),
    "napoli": ("Napoli", "114"),
    "parma": ("Parma", "115"),
    "sassuolo": ("Sassuolo", "3997"),
    "torino": ("Torino", "239"),
    "udinese": ("Udinese", "118"),
    "venezia": ("Venezia", "17530"),
    # Ligue 1 (fra.1)
    "aj auxerre": ("AJ Auxerre", "172"),
    "as monaco": ("AS Monaco", "174"),
    "angers": ("Angers", "7868"),
    "brest": ("Brest", "6997"),
    "le havre ac": ("Le Havre AC", "3236"),
    "le mans": ("Le Mans", "2697"),
    "lens": ("Lens", "175"),
    "lille": ("Lille", "166"),
    "lorient": ("Lorient", "273"),
    "lyon": ("Lyon", "167"),
    "marseille": ("Marseille", "176"),
    "nice": ("Nice", "2502"),
    "paris fc": ("Paris FC", "6851"),
    "paris saint germain": ("Paris Saint-Germain", "160"),
    "stade rennais": ("Stade Rennais", "169"),
    "strasbourg": ("Strasbourg", "180"),
    "toulouse": ("Toulouse", "179"),
    "troyes": ("Troyes", "170"),
}

@pbrFresh

Copy link
Copy Markdown

Anybody else having trouble accessing espn? Hopefully it's temporary? My request (which normally works): https://site.web.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?seasontype=2&limit=120&dates=20260918-20260920 responds with: code = 400 message = "Failed to get events endpoint."

@cmwillett

Copy link
Copy Markdown

Anybody else having trouble accessing espn? Hopefully it's temporary? My request (which normally works): https://site.web.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?seasontype=2&limit=120&dates=20260918-20260920 responds with: code = 400 message = "Failed to get events endpoint."

this is working for me right now... https://site.web.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?limit=500&groups=80

@pbrFresh

Copy link
Copy Markdown

Great thanks that works for me. Apparently the date range on the query string no longer works. Requesting just 1 date still works. Removing the dates parameter altogether makes the request work, but only the ranked teams are listed. Adding the groups=80 lists all 75 games this week.

@robster2001

robster2001 commented Sep 16, 2026

Copy link
Copy Markdown

Anybody else having trouble accessing espn? Hopefully it's temporary? My request (which normally works): https://site.web.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?seasontype=2&limit=120&dates=20260918-20260920 responds with: code = 400 message = "Failed to get events endpoint."

Yeah, the dates range is no longer working -- I guess ESPN doesn't need it any longer and deprecated it. Which sucks because I was using it to pull season schedules, as there doesn't seem to be an endpoint for schedules specifically.

@ITIRadio

Copy link
Copy Markdown

Yes, I can confirm neither https://site.web.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?seasontype=2&limit=120&dates=20260918-20260920, nor https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?seasontype=2&limit=120&dates=20260918-20260920 work. (Putting "web" in the URL stub makes no difference.)

Date range queries have been blocked, probably permanently, as of yesterday. All of my apps at https://github.com/ITIRadio/ESPN-API have been broken at once, although most of the Python scripts had code to accept one day at a time on the command line anyway. I just used a range because it worked for years, and in case I wanted to allow for a range in the future. But, I was definitely wanting to call the API 1-2 times per day per game maximum, and save output locally. Unfortunately, the block is "dumb", "?dates=20260915-20260915", returning one date anyway, doesn't work either.

However, https://site.api.espn.com/apis/site/v2/sports/football/college-football/scoreboard?seasontype=2&limit=120&dates=20260918, with just one date, and not a range is still working, for now. The "web" in the URL stub is still optional.

I would agree with @robster2001, their site doesn't need it. Their site does have schedules, so there is probably another, unknown hidden endpoint, but I have no insights to help with that.

I've always felt like I'm on borrowed time with this thing, but the AI slop-masters are going to ruin it for everybody. At least I know how to code.

@daniyalmaster693

Copy link
Copy Markdown

The best alternative is probably using the date parameter to get the schedule for the entire month. Then write a function to just organize the array of games based on the date parameters you need

@robster2001

Copy link
Copy Markdown

In a change in the last 24 hours, the dates=(year) parameter is working again, but it's literal, and you get all events for the calendar year,

So you may end up having to use dates=2026 and dates=2027 on separate passes because dates=2026-2027 and dates=2026-27 both fail.

If they want me to pull more data and manually filter it, I'm fine with that. I guess there's too much of a cost to them to filter on their side... :)

@ITIRadio

Copy link
Copy Markdown

Agreed, it sounds like a query compute issue, though without knowledge of their back end (the whole thing is quite the black box), who knows. All of the slop apps hitting their API are forcing them to reduce & simplify compute wherever possible. Having the year parm available allows their site & app to build a schedule for display without building another endpoint, and transferring the compute to the client side (as though loading their front end web site isn't obese enough). Reddit was sure that adding .web after "site" in the endpoint URL was the issue, so thanks to @pbrFresh & @robster2001 for the correct solution (& thanks for testing the year parm)!

@bhays

bhays commented Sep 17, 2026

Copy link
Copy Markdown

In addition to the YYYY value for a full year, you can use YYYYMM to get the events for that specific month.

@pbrFresh

Copy link
Copy Markdown

&week=# also works, at least for /nfl and /college-football , It's actually easier for me than the date ranges.

@ShaolinAssassin

ShaolinAssassin commented Sep 20, 2026

Copy link
Copy Markdown

In addition to the YYYY value for a full year, you can use YYYYMM to get the events for that specific month.

Not the whole month, but rather the first 100th events of the month (for example, nba last event date for october is 2026-10-25).

@bhays

bhays commented Sep 20, 2026

Copy link
Copy Markdown

I think the default is 100 events for NBA, try adding limit=300 and you can see all 155 events.

@ShaolinAssassin

Copy link
Copy Markdown

Oh nice, thank you.

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