CS2 data reference

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

StateMeaning
stableIdentical to the previous lineup.
changedOne to four players swapped. changed_count, players_in and players_out describe exactly what moved.
resetAll five swapped. Usually an organisation rename or a full rebuild — not five simultaneous stand-ins.
resumedThe gap since the previous match is long enough that a direct comparison would mislead.
newNo 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.

On this page