Lineups

Starting XI, bench and sidelined players for both teams in a fixture, with shirt numbers, formation slots and player details.

Lineups

include=lineups

The lineups include attaches the team sheets for a fixture: every player named by either team, with the slot they occupy (starting XI, bench or sidelined), their shirt number, their position in this match, and their name in all the spellings the API holds.

Lineups are published by the data provider shortly before kick-off — typically around an hour before, sometimes later for smaller competitions. Requesting the include for a fixture whose team sheets have not been announced yet returns an empty array.

Availability: Only returned when include=lineups is added to a request to GET /fixtures. Not available on /fixtures/search or /livescores.


Object Schema

lineups is a flat array covering both teams — entries are not grouped, use team_id to split them. Each entry describes one slot in one team's sheet:

FieldTypeDescription
team_idintegerThe team this entry belongs to. Match it against participants[].id to tell home from away.
numberintegerShirt number. null when the provider did not supply one.
formation_positionintegerThe player's slot index within the team's formation, for starting players. null for bench entries and where the provider did not supply one.
type_idintegerType id of the slot itself — see the table below.
developer_namestringDeveloper name of the slot: LINEUP, BENCH or SIDELINED.
playerobjectThe player filling the slot — see Player object.

Slot types

type_iddeveloper_nameMeaning
377LINEUPNamed in the starting XI.
378BENCHNamed as a substitute.
379SIDELINEDUnavailable for this match (injury, suspension). Rarely present — most feeds report team sheets as starters and substitutes only.

Entries are ordered by team, then by slot type (starters before bench), then by formation position and shirt number.

Player object

FieldTypeDescription
player_idintegerThe player's id. Stable across fixtures and seasons.
type_idintegerType id of the player's position in this match.
developer_namestringDeveloper name of that position: GOALKEEPER, DEFENDER, MIDFIELDER, ATTACKER or UNKNOWN.
common_namestringShort form, usually initial + surname — e.g. M. Silva Jaimes.
display_namestringThe name normally shown in match coverage — e.g. Miguel Silva.
fullnamestringFull registered name.
firstnamestringGiven name(s).
lastnamestringFamily name(s).
birthdatestringDate of birth as YYYY-MM-DD.

Any field on the player object may be null where the provider holds no value for it. The four name variants exist because sources spell the same player differently; having all of them is what makes it possible to recognise a player across feeds.

Note: player.type_id / player.developer_name are the player's position in this fixture, which can differ from the position he is registered under for the season — a full-back deployed in midfield is reported as a midfielder here.

The player object uses the same field names as an entry in the squads include, so the two can be compared field for field.


Request Examples

Team sheets for a single fixture:

GET /fixtures?fixture_id=1105585&include=lineups

Team sheets alongside odds and statistics:

GET /fixtures?fixture_id=1105585&include=lineups,odds,statistics

Every fixture on a date, with team sheets where they have been announced:

GET /fixtures?start_date=2026-08-05T00:00:00Z&end_date=2026-08-05T23:59:59Z&include=lineups

Example Response

"lineups": [
  {
    "team_id": 4009,
    "number": 1,
    "formation_position": 1,
    "type_id": 377,
    "developer_name": "LINEUP",
    "player": {
      "player_id": 293067,
      "type_id": 372,
      "developer_name": "GOALKEEPER",
      "common_name": "M. Silva Jaimes",
      "display_name": "Miguel Silva",
      "fullname": "Miguel Alejandro Silva Jaimes",
      "firstname": "Miguel Alejandro",
      "lastname": "Silva Jaimes",
      "birthdate": "1998-03-14"
    }
  },
  {
    "team_id": 4009,
    "number": 21,
    "formation_position": 2,
    "type_id": 377,
    "developer_name": "LINEUP",
    "player": {
      "player_id": 95690,
      "type_id": 373,
      "developer_name": "DEFENDER",
      "common_name": "A. González Sibulo",
      "display_name": "Alexander David González Sibulo",
      "fullname": "Alexander David González Sibulo",
      "firstname": "Alexander David",
      "lastname": "González Sibulo",
      "birthdate": "1996-11-02"
    }
  },
  {
    "team_id": 631,
    "number": 45,
    "formation_position": null,
    "type_id": 378,
    "developer_name": "BENCH",
    "player": {
      "player_id": 441628,
      "type_id": 374,
      "developer_name": "MIDFIELDER",
      "common_name": "E. Martinho Silva",
      "display_name": "Edson Martinho da Silva",
      "fullname": "Edson Martinho Silva",
      "firstname": "Edson",
      "lastname": "Martinho Silva",
      "birthdate": "2004-06-27"
    }
  }
]

An empty array ("lineups": []) means no team sheets have been published for that fixture yet — expected for matches that are still more than an hour or so away.


Real-World Use Cases

Team sheet display

Split the array on team_id, then on developer_name, to render the classic two-column starting XI plus substitutes, using formation_position for the pitch layout and number for shirt numbers.

Availability checks before betting

Confirm a key player is in the starting XI (developer_name = LINEUP) rather than on the bench or sidelined before showing markets that depend on him — a striker starting on the bench changes the value of a goalscorer bet considerably.

Line-up-driven market context

Combine lineups with odds to explain price movement: a strong XI on one side, or a first-choice goalkeeper missing, often lines up with the shift a user is looking at.

Recognising players across sources

The four name variants on player let you match a player named by an external feed — a bookmaker's goalscorer market, a news article — to a player_id, even when that source spells the name differently.


Did this page help you?