SportAPI Documentation
EN
S Product documentationSport Line API
v1
Service & pricing ↗ Get access ↗
Sport Line API / Live Statistics

Live Match Statistics Data Model

What stat_list Contains

stat_list contains actual match statistics: attacks, possession, shots, cards, corners, and other available data.

stat_list provides only the main current statistics for a Live match. It is not a detailed statistics source for extended analysis of teams, players, and tournaments.

Statistics are not a betting list and do not contain odds. Available bets on statistical events are provided separately in game_oc_list or in submatches from sub_games.

stat_list    → actual match statistics
game_oc_list → betting markets and odds
sub_games    → links to additional matches and markets

Scope of Sport Line API Statistics

Sport Line API provides brief statistics for displaying the main indicators of a match while it is Live. Depending on data availability, these may include:

  • attacks and dangerous attacks;
  • possession;
  • shots;
  • corners;
  • cards;
  • xG;
  • other main statistics actually returned in stat_list.

Sport Line API does not provide detailed statistics for advanced analysis through stat_list. It does not include a complete data set covering:

  • a detailed match event history;
  • extended team analysis;
  • player statistics and analysis;
  • team head-to-head records (H2H);
  • teams’ previous match history;
  • future matches and team schedules;
  • other advanced analytical data.

A separate detailed sports statistics API is being developed for this data. It is not currently part of Sport Line API.

Use stat_list as a brief source of current Live match statistics, not as a source of complete history or advanced sports analytics.

Methods That Return Statistics

Statistics are available only for Live matches and only in two cases:

MethodWhat it returns
events with live typeMain statistics inside each match in the list
event with live typeMain statistics for a specific match

Statistics are not provided in Prematch. Do not use other Sport Line API methods to retrieve them. If a technical object contains an empty stat_list: [] field, that does not mean statistics are available.

A Live match is not guaranteed to have statistics. In the saved Live list, statistics were populated for 16 of 39 matches. This figure applies only to that response snapshot and is not a permanent coverage rate.

stat_list Structure

stat_list is an array of statistic objects:

match
└── stat_list[]
    └── statistic
        ├── id
        ├── name
        ├── opp1
        └── opp2
FieldTypeDescription
idnumberTechnical statistic ID
namestringStatistic name in the requested language
opp1stringValue for the first team or participant
opp2stringValue for the second team or participant

No additional fields were found in the verified stat_list objects.

Team Mapping

Statistic values correspond to the two match sides:

Statistic fieldMatch team or participant
opp1opp_1_name; identifier: opp_1_id
opp2opp_2_name; identifier: opp_2_id

Do not infer a side from the team’s visual position in the interface. If the teams are visually swapped, their statistic values must be swapped with them.

Live Match Statistics Example

Fragment from the saved response for match 746146992:

{
  "stat_list": [
    {
      "id": 93,
      "name": "xG",
      "opp1": "1.45",
      "opp2": "0.03"
    },
    {
      "id": 45,
      "name": "Attacks",
      "opp1": "61",
      "opp2": "54"
    },
    {
      "id": 58,
      "name": "Dangerous attacks",
      "opp1": "44",
      "opp2": "19"
    },
    {
      "id": 29,
      "name": "Possession %",
      "opp1": "65",
      "opp2": "35"
    }
  ]
}

The first team in this match is Arsenal, and the second is Coventry City. Therefore, the possession value 65 belongs to Arsenal, while 35 belongs to Coventry City.

opp1 and opp2 Value Format

In JSON, opp1 and opp2 are strings even when they contain a number:

{
  "name": "Attacks",
  "opp1": "61",
  "opp2": "54"
}

A decimal value is also returned as a string:

{
  "name": "xG",
  "opp1": "1.45",
  "opp2": "0.03"
}

For percentage statistics, the % sign is part of the name, while the values are returned without it:

{
  "name": "Possession %",
  "opp1": "65",
  "opp2": "35"
}

For ordinary display, use the values as strings. Convert them to numbers only for known statistics when the client needs calculations, comparisons, or charts. Do not automatically convert every possible value to a number: the available statistics and their formats depend on the sport and data provider.

id and name

Use id to match statistics programmatically. name is localized according to the requested language and is intended for display.

For example, statistic id: 45 is returned as Attacks when requesting lang=en.

Do not use name as a permanent technical identifier or link responses in different languages by the name text.

Confirmed Football Match Statistics

The following IDs occurred in saved Russian and English responses for Live football matches. The table includes only statistics actually found and is not a complete reference for every sport.

idEnglish name returned by the API
26Yellow cards
29Possession %
45Attacks
47Saves
58Dangerous attacks
59Shots on target
60Shots off target
70Corner
71Red card
72Penalty
92Substitutions
93xG
94Key Passes
95Passing Accuracy %
96Crosses

The statistic set depends on the sport, the specific match, and data availability. Do not create a mandatory list requiring every Live match to contain all IDs from this table.

Empty or Missing Statistics

An empty array means that no statistics were provided in the current response:

{
  "stat_list": []
}

It does not mean that every statistic equals zero. Possible reasons include a lack of statistics coverage, the current stage of the match, or the sports line type.

Distinguish between the following cases:

StateMeaning
Populated stat_listDisplay the statistics actually returned
stat_list: []Statistics are not currently provided
Missing stat_list fieldThe selected method or response format does not provide this field
A statistic is absent from a populated listThe value of that statistic is unknown; it is not zero
opp1: "0" or opp2: "0"The API explicitly returned a zero value

Do not retain an old value as current if a statistic disappears from the next update.

Statistics in Submatches

In every submatch response, stat_list contains statistics for the main match, not separate statistics for the selected submatch.

For example, this remains true when opening these submatches:

  • “Corners”;
  • “Corners, 1st Half”;
  • “1st Half”;
  • cards, fouls, and other additional match sections.

Even when the user opens “Corners, 1st Half,” stat_list contains the main statistics for the entire match: xG, attacks, possession, shots, cards, and other available values.

Do not associate the contents of stat_list with game_dop_name, and do not filter statistics based on the submatch type. Use game_mid to identify the main match.

Updating Statistics

Live match statistics change during the game. Each time a new response is received:

  1. Match statistics by id.
  2. Update the opp1 and opp2 values.
  3. Use the returned name for the selected language.
  4. Add new statistics that appear in the response.
  5. Do not continue displaying a disappeared statistic as current.

The request frequency is determined by the method used to retrieve the match. See Data Update Guidelines for recommended intervals.

stat_list_extra

stat_list_extra is not an extension of stat_list. It is currently a reserved test field that is not used in client integrations.

{
  "stat_list_extra": []
}

Do not merge stat_list_extra with match statistics or build required logic around its contents.

Practical Integration Rules

  1. Use id as the technical statistic identifier.
  2. Display the localized name returned by the API.
  3. Map opp1 to the first match side and opp2 to the second.
  4. Support string JSON values.
  5. Do not treat an empty list or missing statistic as zero.
  6. Do not expect the same statistic set for every sport and match.
  7. Replace statistics with current response data on every update.
  8. Do not mix stat_list with bets from game_oc_list or sub_games.

Verification Responses