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:
| Method | What it returns |
|---|---|
events with live type | Main statistics inside each match in the list |
event with live type | Main 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
| Field | Type | Description |
|---|---|---|
id | number | Technical statistic ID |
name | string | Statistic name in the requested language |
opp1 | string | Value for the first team or participant |
opp2 | string | Value 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 field | Match team or participant |
|---|---|
opp1 | opp_1_name; identifier: opp_1_id |
opp2 | opp_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.
id | English name returned by the API |
|---|---|
26 | Yellow cards |
29 | Possession % |
45 | Attacks |
47 | Saves |
58 | Dangerous attacks |
59 | Shots on target |
60 | Shots off target |
70 | Corner |
71 | Red card |
72 | Penalty |
92 | Substitutions |
93 | xG |
94 | Key Passes |
95 | Passing Accuracy % |
96 | Crosses |
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:
| State | Meaning |
|---|---|
Populated stat_list | Display the statistics actually returned |
stat_list: [] | Statistics are not currently provided |
Missing stat_list field | The selected method or response format does not provide this field |
| A statistic is absent from a populated list | The 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:
- Match statistics by
id. - Update the
opp1andopp2values. - Use the returned
namefor the selected language. - Add new statistics that appear in the response.
- 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
- Use
idas the technical statistic identifier. - Display the localized
namereturned by the API. - Map
opp1to the first match side andopp2to the second. - Support string JSON values.
- Do not treat an empty list or missing statistic as zero.
- Do not expect the same statistic set for every sport and match.
- Replace statistics with current response data on every update.
- Do not mix
stat_listwith bets fromgame_oc_listorsub_games.