---
source_url: https://site.api.espn.com/apis/site/v2/sports/soccer/eng.1/summary?event=740603
source_type: curated
upstream_version: null
crawled_at: 2026-09-06
---

# ESPN soccer match summary

Observed on 2026-09-06 from two completed and two scheduled summaries across
eng.1 and esp.1. ESPN publishes no schema for this endpoint. Which sections appear
depends on the match state.

## From scoreboard event ID to match details

On host site.api.espn.com, the observed request is
`GET /apis/site/v2/sports/soccer/{league}/summary` with event set to an event ID
returned by that league's scoreboard. For example, event=740603 came from the
eng.1 scoreboard for 2025-08-17. Do not pass a team ID or league ID as event.

| JSON path | Observed type | Use |
|---|---|---|
| `header.id` | string | Summary event ID |
| `header.competitions[].id` | string | Competition record inside the event |
| `header.competitions[].status.type.state` | string | Match state |
| `header.competitions[].status.type.completed` | boolean | Completion flag |

Sources: [scoreboard](https://site.api.espn.com/apis/site/v2/sports/soccer/eng.1/scoreboard?dates=20250817),
[completed summary](https://site.api.espn.com/apis/site/v2/sports/soccer/eng.1/summary?event=740603),
[second completed summary](https://site.api.espn.com/apis/site/v2/sports/soccer/esp.1/summary?event=748148).

## Team statistics and match state

Team statistics sit under boxscore. Select each statistic by its name, not its
array position. displayValue is formatted text, not always a plain number.

| JSON path | Observed type | Use |
|---|---|---|
| `boxscore.teams[].team.id` | string | Team the statistics belong to |
| `boxscore.teams[].statistics[].name` | string | Statistic key |
| `boxscore.teams[].statistics[].label` | string | Display label |
| `boxscore.teams[].statistics[].displayValue` | string | Formatted value |

Scheduled summaries also contain team statistics, so their presence does not mean
the match has started or that the values describe it. Check the header's match
state first. ESPN does not define its statistic names (including any expected-goals
figures), and neither does this corpus.

Sources: [completed summary](https://site.api.espn.com/apis/site/v2/sports/soccer/eng.1/summary?event=740603),
[scheduled summary](https://site.api.espn.com/apis/site/v2/sports/soccer/eng.1/summary?event=401879285).

## Lineups, formations, and player IDs

Completed summaries contain rosters with players and a formation. Scheduled
summaries had roster team records with no players, so a team record alone is
not a confirmed lineup.

| JSON path | Observed type | Use |
|---|---|---|
| `rosters[].team.id` | string | ESPN team ID |
| `rosters[].homeAway` | string | Side label |
| `rosters[].formation` | string | Formation label when available |
| `rosters[].roster[].athlete.id` | string | ESPN player ID |
| `rosters[].roster[].athlete.displayName` | string | Player display label |
| `rosters[].roster[].starter` | boolean | Starter flag |
| `rosters[].roster[].jersey` | string | Shirt number representation |
| `rosters[].roster[].position.abbreviation` | string | Position label |
| `rosters[].roster[].formationPlace` | string | Placement label; no pitch coordinate mapping established |
| `rosters[].roster[].subbedIn` | boolean | Substitution flag |
| `rosters[].roster[].subbedOut` | boolean | Substitution flag |
| `rosters[].roster[].stats[].name` | string | Per-player statistic key |
| `rosters[].roster[].stats[].value` | number | Numeric statistic value |
| `rosters[].roster[].stats[].displayValue` | string | Display representation |

Keep a missing player statistic distinct from zero. When lineups first appear
before kick-off was not tested.

Sources: [completed lineup](https://site.api.espn.com/apis/site/v2/sports/soccer/eng.1/summary?event=740603),
[scheduled summary](https://site.api.espn.com/apis/site/v2/sports/soccer/eng.1/summary?event=401879285),
[second scheduled summary](https://site.api.espn.com/apis/site/v2/sports/soccer/esp.1/summary?event=401882881).

## Key events and commentary availability

Completed summaries have keyEvents and commentary arrays. No top-level plays field
appeared in any sampled summary, so do not reuse the play-by-play shape from other
ESPN sports.

| JSON path | Observed type | Use |
|---|---|---|
| `keyEvents[].id` | string | Key-event identifier |
| `keyEvents[].type.id` | string | Event type ID; no exhaustive mapping established |
| `keyEvents[].type.text` | string | Event type label |
| `keyEvents[].text` | string | Event description |
| `keyEvents[].clock.displayValue` | string | Display clock |
| `keyEvents[].team.id` | string | Related team when present |
| `keyEvents[].participants[].athlete.id` | string | Related player when present |
| `keyEvents[].scoringPlay` | boolean | Scoring flag |
| `commentary[].text` | string | Commentary text |
| `commentary[].time.displayValue` | string | Display time |

Scheduled summaries have neither array. keyEvents lists key moments; whether it
is a complete event feed was not tested. Commentary text is not reproduced in
this corpus.

Sources: [completed summary](https://site.api.espn.com/apis/site/v2/sports/soccer/eng.1/summary?event=740603),
[scheduled summary](https://site.api.espn.com/apis/site/v2/sports/soccer/eng.1/summary?event=401879285).
