When to use this skill
When the user asks about game scores, live results, or what's happening in a sport today — "What are the NHL scores?", "How did the NFL games go?", "Who's playing in the Premier League right now?" — reach for the ESPN Site API. It covers NFL, NBA, MLB, NHL, college football, college basketball, and major international soccer leagues, all without authentication. For historical stats, player-level analytics, or fantasy projections, this is the wrong skill.
Your best first call
curl "https://site.api.espn.com/apis/site/v2/sports/hockey/nhl/scoreboard"
No auth. No key. The path pattern is /apis/site/v2/sports/{sport}/{league}/scoreboard. Use sport for the category (football, basketball, baseball, hockey, soccer) and league for the competition (nfl, nba, mlb, nhl, college-football, college-basketball, eng.1, esp.1, ger.1, ita.1, fra.1). Add ?dates=20260415 for a specific date, ?seasontype=2 to lock in regular season only, or ?week=3 for a specific week (NFL and college football).
The events array is where the action is — each event has:
- id — numeric event ID for the /summary endpoint
- date — ISO timestamp of game start
- name — matchup description (e.g. "Boston Bruins at Florida Panthers")
- status.type.name — game state: STATUS_SCHEDULED, STATUS_IN_PROGRESS, STATUS_FINAL
- competitions[0].competitors — two teams, each with score, records, and a team object containing displayName, abbreviation, and logo
The scoreboard response is the same shape across all leagues, so you write one parser for every sport.
Fallbacks (when the best call isn't enough)
- League standings (who's in first place?) →
/apis/site/v2/sports/{sport}/{league}/standings?season=2026&seasontype=2. Use groups=80 for FBS conferences in college football.
- News headlines for a league →
/apis/site/v2/sports/{sport}/{league}/news?limit=5. Returns articles with headline, description, and links.web.href.
- Detailed game summary with box score →
/apis/site/v2/sports/{sport}/{league}/summary?event={id}. Requires the numeric event id from a scoreboard call — you can't guess it.
Pitfalls
- The root URL
https://site.api.espn.com/ returns a 404. There is no index or discovery endpoint — you must know the sport and league path segments. The /v2/sports list on sports.core.api.espn.com exists but does not enumerate available leagues.
- League identifiers use hyphens, not underscores:
college-football not college_football, and soccer leagues use dotted codes (eng.1, esp.1, ger.1) — not the names you'd expect like epl or laliga.
- The
seasontype query parameter is numeric: 1 = preseason, 2 = regular season, 3 = postseason. The API defaults to the current season type, which is usually correct — but if you ask for "last season's standings" you must supply both season and seasontype.
- The
/schedule endpoint documented in some references returns 404. Use the scoreboard with a date filter instead.
One-line summary for the user
I can check live sports scores and game status for NFL, NBA, MLB, NHL, college, and major soccer leagues via the ESPN Site API — no key needed, just know the sport and league.
SKILL.md source (frontmatter + body)
---
name: check-live-sports-scores
description: When the user asks about game scores, live results, or what's happening in a sport — NFL, NBA, MLB, NHL, college football, college basketball, or major soccer leagues — reach for the ESPN Site API. No auth required.
---
## When to use this skill
When the user asks about game scores, live results, or what's happening in a sport today — "What are the NHL scores?", "How did the NFL games go?", "Who's playing in the Premier League right now?" — reach for the ESPN Site API. It covers NFL, NBA, MLB, NHL, college football, college basketball, and major international soccer leagues, all without authentication. For historical stats, player-level analytics, or fantasy projections, this is the wrong skill.
## Your best first call
```bash
curl "https://site.api.espn.com/apis/site/v2/sports/hockey/nhl/scoreboard"
```
No auth. No key. The path pattern is `/apis/site/v2/sports/{sport}/{league}/scoreboard`. Use `sport` for the category (`football`, `basketball`, `baseball`, `hockey`, `soccer`) and `league` for the competition (`nfl`, `nba`, `mlb`, `nhl`, `college-football`, `college-basketball`, `eng.1`, `esp.1`, `ger.1`, `ita.1`, `fra.1`). Add `?dates=20260415` for a specific date, `?seasontype=2` to lock in regular season only, or `?week=3` for a specific week (NFL and college football).
The `events` array is where the action is — each event has:
- `id` — numeric event ID for the `/summary` endpoint
- `date` — ISO timestamp of game start
- `name` — matchup description (e.g. "Boston Bruins at Florida Panthers")
- `status.type.name` — game state: `STATUS_SCHEDULED`, `STATUS_IN_PROGRESS`, `STATUS_FINAL`
- `competitions[0].competitors` — two teams, each with `score`, `records`, and a `team` object containing `displayName`, `abbreviation`, and `logo`
The scoreboard response is the same shape across all leagues, so you write one parser for every sport.
## Fallbacks (when the best call isn't enough)
- **League standings (who's in first place?)** → `/apis/site/v2/sports/{sport}/{league}/standings?season=2026&seasontype=2`. Use `groups=80` for FBS conferences in college football.
- **News headlines for a league** → `/apis/site/v2/sports/{sport}/{league}/news?limit=5`. Returns articles with `headline`, `description`, and `links.web.href`.
- **Detailed game summary with box score** → `/apis/site/v2/sports/{sport}/{league}/summary?event={id}`. Requires the numeric event `id` from a scoreboard call — you can't guess it.
## Pitfalls
- The root URL `https://site.api.espn.com/` returns a 404. There is no index or discovery endpoint — you must know the sport and league path segments. The `/v2/sports` list on `sports.core.api.espn.com` exists but does not enumerate available leagues.
- League identifiers use hyphens, not underscores: `college-football` not `college_football`, and soccer leagues use dotted codes (`eng.1`, `esp.1`, `ger.1`) — not the names you'd expect like `epl` or `laliga`.
- The `seasontype` query parameter is numeric: `1` = preseason, `2` = regular season, `3` = postseason. The API defaults to the current season type, which is usually correct — but if you ask for "last season's standings" you must supply both `season` and `seasontype`.
- The `/schedule` endpoint documented in some references returns 404. Use the scoreboard with a date filter instead.
## One-line summary for the user
I can check live sports scores and game status for NFL, NBA, MLB, NHL, college, and major soccer leagues via the ESPN Site API — no key needed, just know the sport and league.