Roster history
The five a team actually fielded, match by match, and what each continuity state means.
GET /v1/{game}/teams/{id}/roster-history returns the lineups a team actually fielded, newest
first. Default 20, max 100; not paginated.
This is fielded rosters, not signed rosters — it's derived from who played, so stand-ins appear exactly as they occurred.
A row
{
"match_id": "019f3d18-c15f-7319-81a7-343e8a80a578",
"scheduled_at": "2026-07-04T18:00:00Z",
"player_ids": ["019f…", "019f…", "019f…", "019f…", "019f…"],
"continuity": "changed",
"changed_count": 1,
"players_in": ["019f…"],
"players_out": ["019f…"],
"has_debutant": false,
"days_since_prev": 4.2
}The continuity states
| State | Meaning |
|---|---|
stable | Identical to the previous lineup. |
changed | One to four players swapped. changed_count, players_in and players_out describe exactly what moved. |
reset | All five swapped. Usually an organisation rename or a full rebuild — not five simultaneous stand-ins. |
resumed | The gap since the previous match is long enough that a direct comparison would mislead. |
new | No prior completed match to compare against. |
`new` is an absence of evidence
On a new row, players_in and players_out are empty because there is no baseline to diff
against — not because nothing changed. Reading empty arrays as "no change" inverts the meaning.
days_since_prev is null on the first entry for the same reason.
What it's good for — and what it isn't
It answers "was this the same five?" precisely, which matters when you're comparing performance
across a period that contains a roster move: aggregate stats spanning a reset are two different
teams wearing one name.
What it is not is a betting edge. We measured roster churn against closing lines and the market already prices it — teams with recent changes performed slightly worse than the line implied, not better. Treat this as context for analysis, not as a signal.
Tenure
Combine scheduled_at with the continuity states to compute how long the current five have played
together — a stable run since the last changed/reset row. That's usually a more meaningful
covariate than the raw roster itself.