Match centre
Explore a match from the score to the final whistle. Built with recorded Sportmonks data, with the requests and fields to build your own.
Built by Sportmonks with the Sportmonks Football API. The data on this site is recorded, not live.
Recorded match dataRetrieved 12 Oct 2026Reduced exampleSource details
Champions League
Full time
FC Barcelona
Home
Score: 5 to 1
Feyenoord
Away
Spotify Camp Nou, Barcelona, capacity 62,652
FC Barcelona won after full-time.
Timeline
13 events
- 3'
FC Barcelona
Raphinha1–0
Assist Lamine Yamal, Left foot shot
- 22'
FC Barcelona
Karim Adeyemi2–0
Assist João Cancelo, Right foot shot
- 27'
Feyenoord
Charles Vanhoutte
Yellow card, Foul
Second half
46'Feyenoord
On: Oussama Targhalline
Off: Javi López
- 54'
FC Barcelona
Dani Olmo
Yellow card, Foul
- 57'
FC Barcelona
Raphinha3–0
Assist Pedri, Left foot shot
- 59'
Feyenoord
VARGoal disallowed
Nacho Ferri
- 63'
FC Barcelona
On: Marc Bernal
Off: Pedri
- 63'
FC Barcelona
On: Anthony Gordon
Off: Karim Adeyemi
- 77'
FC Barcelona
Lamine Yamal4–0
Free Kick
- 82'
Feyenoord
Sem Steijn4–1
Assist Gonçalo Borges, Right foot shot
- 83'
Feyenoord
On: Tobias van den Elshout
Off: Luciano Valente
- 85'
FC Barcelona
Gabriel Jesus5–1
Assist Lamine Yamal, Header
Statistics
FC BarcelonaFeyenoord
More statistics
Top line
Attack
Passing
Defence and discipline
What this demo shows
Home and away come from metadata
In this recording the API returned the teams in this order: Feyenoord (away), then FC Barcelona (home). The screen reads participants[].meta.location and never trusts array position, so the home team always sits on the left.
Score periods
The header shows the score with CURRENT. The period rows are not interchangeable: 2ND_HALF is cumulative, so reading it as the second-half score is a common mistake.
| Description | FC Barcelona | Feyenoord | Meaning |
|---|---|---|---|
| 1ST_HALF | 2 | 0 | Score at half time |
| 2ND_HALF | 5 | 1 | Cumulative: the score at the end of the second half, not only second-half goals |
| CURRENT | 5 | 1 | The running score. This is what the header shows |
| 2ND_HALF_ONLY | 3 | 1 | Goals scored in the second half only |
Fixtures with nothing to show yet
Before kick-off, scores is an empty array and the fixture has no events or statistics. The screen shows Not started and says what is missing, instead of rendering 0–0 or zero possession. Switch to the pre-match fixture above to see it.
API request and fields used
The finished match comes from one fixture request with these includes. Keep your API token on the server: this site only shows recorded responses, so it holds no token.
GET https://api.sportmonks.com/v3/football/fixtures/19872603
?api_token={{apiToken}}
&include=participants;scores;state;events;statistics.type;venue| Field | Used for | Note |
|---|---|---|
| participants[].meta.location | Placing each team on the home or away side | Participants arrive away team first in the recorded response, so array position cannot be trusted. |
| participants[].name, short_code, image_path | Team names, short codes and crests | |
| participants[].meta.winner | Emphasising the winning team | Null until the match has finished. |
| scores[] where description is CURRENT | The score in the header | 2ND_HALF is cumulative. 2ND_HALF_ONLY holds second-half goals only. |
| state.developer_name, state.name | The status badge and the Not started state | |
| starting_at_timestamp | Kick-off time, shown in UTC and converted to local time in the browser | |
| result_info | The result sentence under the score | |
| events[].minute, extra_minute, sort_order | Ordering the timeline | Events arrive grouped by type, so the screen sorts by minute, then extra minute, then sort_order. |
| events[].type_id | Telling goals, cards, substitutions and VAR decisions apart | |
| events[].player_name, related_player_name | Scorer and assist, or the player coming on and the player going off | Some names carry trailing non-breaking spaces, which the screen trims. |
| events[].result | The running score after each goal | Written in home-away order, for example 4-1. |
| events[].info, addition | Goal type and the wording of VAR decisions | |
| statistics[].type_id, participant_id, data.value | Possession (45), shots (42), shots on target (86), pass accuracy (82) and the rest of the statistics | Rows are paired by participant_id. A statistic that is missing is shown as a dash, not as zero. |
| venue.name, city_name, capacity | The venue line under the score | |
| league.name | The competition name |
Field names and statistic types are documented in the Sportmonks developer documentation.
Recorded data
Everything on this page comes from responses recorded from the Sportmonks Football API. Nothing here is fetched live. The original responses are kept privately because they include account details.
Finished: Barcelona 5-1 Feyenoord
Fixture detail with events, statistics and venue, retrieved 12 Oct 2026, 14:31 UTC
GET https://api.sportmonks.com/v3/football/fixtures/19872603 ?api_token={{apiToken}} &include=participants;scores;state;events;statistics.type;venueCompetition name, from the fixtures by date response, retrieved 12 Oct 2026, 14:31 UTC
GET https://api.sportmonks.com/v3/football/fixtures/date/2026-09-09 ?api_token={{apiToken}} &include=participants;scores;state;league &filters=fixtureLeagues:2
Reduced example: Six substitution events and 14 of the 42 statistic types were left out to keep this example small, and fields the screen does not use were trimmed. Events kept: 13 of 19. Statistic types kept: 28 of 42.
Checked against the original response on 2026-10-13.
View the recorded JSON
{
"id": 19872603,
"name": "FC Barcelona vs Feyenoord",
"starting_at": "2026-09-09 16:45:00",
"starting_at_timestamp": 1788972300,
"result_info": "FC Barcelona won after full-time.",
"participants": [
{
"id": 73,
"name": "Feyenoord",
"short_code": "FEY",
"image_path": "https://cdn.sportmonks.com/images/soccer/teams/9/73.png",
"meta": {
"location": "away",
"winner": false,
"position": 25
}
},
{
"id": 83,
"name": "FC Barcelona",
"short_code": "BAR",
"image_path": "https://cdn.sportmonks.com/images/soccer/teams/19/83.png",
"meta": {
"location": "home",
"winner": true,
"position": 8
}
}
],
"scores": [
{
"participant_id": 73,
"score": {
"goals": 0,
"participant": "away"
},
"description": "1ST_HALF"
},
{
"participant_id": 83,
"score": {
"goals": 2,
"participant": "home"
},
"description": "1ST_HALF"
},
{
"participant_id": 73,
"score": {
"goals": 1,
"participant": "away"
},
"description": "2ND_HALF"
},
{
"participant_id": 83,
"score": {
"goals": 5,
"participant": "home"
},
"description": "2ND_HALF"
},
{
"participant_id": 73,
"score": {
"goals": 1,
"participant": "away"
},
"description": "CURRENT"
},
{
"participant_id": 83,
"score": {
"goals": 5,
"participant": "home"
},
"description": "CURRENT"
},
{
"participant_id": 73,
"score": {
"goals": 1,
"participant": "away"
},
"description": "2ND_HALF_ONLY"
},
{
"participant_id": 83,
"score": {
"goals": 3,
"participant": "home"
},
"description": "2ND_HALF_ONLY"
}
],
"state": {
"developer_name": "FT",
"name": "Full Time",
"short_name": "FT"
},
"events": [
{
"id": 157840436,
"participant_id": 83,
"type_id": 14,
"player_name": "Raphinha",
"related_player_name": "Lamine Yamal",
"result": "1-0",
"info": "Left foot shot",
"addition": null,
"minute": 3,
"extra_minute": null,
"sort_order": 1
},
{
"id": 157840630,
"participant_id": 83,
"type_id": 14,
"player_name": "Karim Adeyemi",
"related_player_name": "João Cancelo",
"result": "2-0",
"info": "Right foot shot",
"addition": null,
"minute": 22,
"extra_minute": null,
"sort_order": 2
},
{
"id": 157841307,
"participant_id": 83,
"type_id": 14,
"player_name": "Raphinha",
"related_player_name": "Pedri",
"result": "3-0",
"info": "Left foot shot",
"addition": null,
"minute": 57,
"extra_minute": null,
"sort_order": 3
},
{
"id": 157841693,
"participant_id": 83,
"type_id": 14,
"player_name": "Lamine Yamal",
"related_player_name": null,
"result": "4-0",
"info": "Free Kick",
"addition": null,
"minute": 77,
"extra_minute": null,
"sort_order": 4
},
{
"id": 157841783,
"participant_id": 73,
"type_id": 14,
"player_name": "Sem Steijn",
"related_player_name": "Gonçalo Borges",
"result": "4-1",
"info": "Right foot shot",
"addition": null,
"minute": 82,
"extra_minute": null,
"sort_order": 5
},
{
"id": 157841872,
"participant_id": 83,
"type_id": 14,
"player_name": "Gabriel Jesus",
"related_player_name": "Lamine Yamal",
"result": "5-1",
"info": "Header",
"addition": null,
"minute": 85,
"extra_minute": null,
"sort_order": 6
},
{
"id": 157841222,
"participant_id": 73,
"type_id": 18,
"player_name": "Oussama Targhalline",
"related_player_name": "Javi López",
"result": null,
"info": null,
"addition": null,
"minute": 46,
"extra_minute": null,
"sort_order": 1
},
{
"id": 157841397,
"participant_id": 83,
"type_id": 18,
"player_name": "Marc Bernal",
"related_player_name": "Pedri",
"result": null,
"info": null,
"addition": null,
"minute": 63,
"extra_minute": null,
"sort_order": 2
},
{
"id": 157841398,
"participant_id": 83,
"type_id": 18,
"player_name": "Anthony Gordon",
"related_player_name": "Karim Adeyemi",
"result": null,
"info": null,
"addition": null,
"minute": 63,
"extra_minute": null,
"sort_order": 3
},
{
"id": 157841805,
"participant_id": 73,
"type_id": 18,
"player_name": "Tobias van den Elshout",
"related_player_name": "Luciano Valente ",
"result": null,
"info": null,
"addition": null,
"minute": 83,
"extra_minute": null,
"sort_order": 8
},
{
"id": 157840717,
"participant_id": 73,
"type_id": 19,
"player_name": "Charles Vanhoutte",
"related_player_name": null,
"result": null,
"info": "Foul",
"addition": null,
"minute": 27,
"extra_minute": null,
"sort_order": 1
},
{
"id": 157841284,
"participant_id": 83,
"type_id": 19,
"player_name": "Dani Olmo",
"related_player_name": null,
"result": null,
"info": "Foul",
"addition": null,
"minute": 54,
"extra_minute": null,
"sort_order": 2
},
{
"id": 157841355,
"participant_id": 73,
"type_id": 10,
"player_name": "Nacho Ferri",
"related_player_name": null,
"result": null,
"info": null,
"addition": "Goal disallowed",
"minute": 59,
"extra_minute": null,
"sort_order": 1
}
],
"statistics": [
{
"type_id": 34,
"participant_id": 73,
"location": "away",
"data": {
"value": 1
}
},
{
"type_id": 34,
"participant_id": 83,
"location": "home",
"data": {
"value": 4
}
},
{
"type_id": 41,
"participant_id": 73,
"location": "away",
"data": {
"value": 1
}
},
{
"type_id": 41,
"participant_id": 83,
"location": "home",
"data": {
"value": 10
}
},
{
"type_id": 42,
"participant_id": 73,
"location": "away",
"data": {
"value": 4
}
},
{
"type_id": 42,
"participant_id": 83,
"location": "home",
"data": {
"value": 24
}
},
{
"type_id": 43,
"participant_id": 73,
"location": "away",
"data": {
"value": 61
}
},
{
"type_id": 43,
"participant_id": 83,
"location": "home",
"data": {
"value": 141
}
},
{
"type_id": 44,
"participant_id": 73,
"location": "away",
"data": {
"value": 30
}
},
{
"type_id": 44,
"participant_id": 83,
"location": "home",
"data": {
"value": 60
}
},
{
"type_id": 45,
"participant_id": 73,
"location": "away",
"data": {
"value": 28
}
},
{
"type_id": 45,
"participant_id": 83,
"location": "home",
"data": {
"value": 72
}
},
{
"type_id": 49,
"participant_id": 73,
"location": "away",
"data": {
"value": 3
}
},
{
"type_id": 49,
"participant_id": 83,
"location": "home",
"data": {
"value": 13
}
},
{
"type_id": 50,
"participant_id": 73,
"location": "away",
"data": {
"value": 1
}
},
{
"type_id": 50,
"participant_id": 83,
"location": "home",
"data": {
"value": 11
}
},
{
"type_id": 52,
"participant_id": 73,
"location": "away",
"data": {
"value": 1
}
},
{
"type_id": 52,
"participant_id": 83,
"location": "home",
"data": {
"value": 5
}
},
{
"type_id": 53,
"participant_id": 73,
"location": "away",
"data": {
"value": 9
}
},
{
"type_id": 53,
"participant_id": 83,
"location": "home",
"data": {
"value": 2
}
},
{
"type_id": 54,
"participant_id": 73,
"location": "away",
"data": {
"value": 4
}
},
{
"type_id": 54,
"participant_id": 83,
"location": "home",
"data": {
"value": 17
}
},
{
"type_id": 56,
"participant_id": 73,
"location": "away",
"data": {
"value": 12
}
},
{
"type_id": 56,
"participant_id": 83,
"location": "home",
"data": {
"value": 10
}
},
{
"type_id": 57,
"participant_id": 73,
"location": "away",
"data": {
"value": 4
}
},
{
"type_id": 57,
"participant_id": 83,
"location": "home",
"data": {
"value": 1
}
},
{
"type_id": 58,
"participant_id": 73,
"location": "away",
"data": {
"value": 1
}
},
{
"type_id": 58,
"participant_id": 83,
"location": "home",
"data": {
"value": 5
}
},
{
"type_id": 59,
"participant_id": 73,
"location": "away",
"data": {
"value": 5
}
},
{
"type_id": 59,
"participant_id": 83,
"location": "home",
"data": {
"value": 5
}
},
{
"type_id": 64,
"participant_id": 73,
"location": "away",
"data": {
"value": 0
}
},
{
"type_id": 64,
"participant_id": 83,
"location": "home",
"data": {
"value": 2
}
},
{
"type_id": 78,
"participant_id": 73,
"location": "away",
"data": {
"value": 24
}
},
{
"type_id": 78,
"participant_id": 83,
"location": "home",
"data": {
"value": 17
}
},
{
"type_id": 79,
"participant_id": 73,
"location": "away",
"data": {
"value": 1
}
},
{
"type_id": 79,
"participant_id": 83,
"location": "home",
"data": {
"value": 4
}
},
{
"type_id": 80,
"participant_id": 73,
"location": "away",
"data": {
"value": 308
}
},
{
"type_id": 80,
"participant_id": 83,
"location": "home",
"data": {
"value": 794
}
},
{
"type_id": 81,
"participant_id": 73,
"location": "away",
"data": {
"value": 256
}
},
{
"type_id": 81,
"participant_id": 83,
"location": "home",
"data": {
"value": 746
}
},
{
"type_id": 82,
"participant_id": 73,
"location": "away",
"data": {
"value": 83
}
},
{
"type_id": 82,
"participant_id": 83,
"location": "home",
"data": {
"value": 94
}
},
{
"type_id": 84,
"participant_id": 73,
"location": "away",
"data": {
"value": 1
}
},
{
"type_id": 84,
"participant_id": 83,
"location": "home",
"data": {
"value": 1
}
},
{
"type_id": 86,
"participant_id": 73,
"location": "away",
"data": {
"value": 2
}
},
{
"type_id": 86,
"participant_id": 83,
"location": "home",
"data": {
"value": 9
}
},
{
"type_id": 100,
"participant_id": 73,
"location": "away",
"data": {
"value": 6
}
},
{
"type_id": 100,
"participant_id": 83,
"location": "home",
"data": {
"value": 5
}
},
{
"type_id": 109,
"participant_id": 73,
"location": "away",
"data": {
"value": 12
}
},
{
"type_id": 109,
"participant_id": 83,
"location": "home",
"data": {
"value": 17
}
},
{
"type_id": 117,
"participant_id": 73,
"location": "away",
"data": {
"value": 3
}
},
{
"type_id": 117,
"participant_id": 83,
"location": "home",
"data": {
"value": 18
}
},
{
"type_id": 580,
"participant_id": 73,
"location": "away",
"data": {
"value": 2
}
},
{
"type_id": 580,
"participant_id": 83,
"location": "home",
"data": {
"value": 3
}
},
{
"type_id": 581,
"participant_id": 73,
"location": "away",
"data": {
"value": 1
}
},
{
"type_id": 581,
"participant_id": 83,
"location": "home",
"data": {
"value": 1
}
}
],
"venue": {
"id": 9236,
"name": "Spotify Camp Nou",
"city_name": "Barcelona",
"capacity": 62652
},
"league": {
"id": 2,
"name": "Champions League",
"short_code": "UEFA CL",
"image_path": "https://cdn.sportmonks.com/images/soccer/leagues/2.png"
}
}Pre-match: Man City v PSG
Fixtures by date, recorded before kick-off, retrieved 12 Oct 2026, 14:02 UTC
GET https://api.sportmonks.com/v3/football/fixtures/date/2026-10-14 ?api_token={{apiToken}} &include=participants;scores;state;league &filters=fixtureLeagues:2
Checked against the original response on 2026-10-13.
View the recorded JSON
{
"id": 19872605,
"name": "Manchester City vs Paris Saint Germain",
"starting_at": "2026-10-14 19:00:00",
"starting_at_timestamp": 1792004400,
"result_info": null,
"participants": [
{
"id": 591,
"name": "Paris Saint Germain",
"short_code": "PSG",
"image_path": "https://cdn.sportmonks.com/images/soccer/teams/15/591.png",
"meta": {
"location": "away",
"winner": null,
"position": 1
}
},
{
"id": 9,
"name": "Manchester City",
"short_code": "MCI",
"image_path": "https://cdn.sportmonks.com/images/soccer/teams/9/9.png",
"meta": {
"location": "home",
"winner": null,
"position": 8
}
}
],
"scores": [],
"state": {
"developer_name": "NS",
"name": "Not Started",
"short_name": "NS"
},
"league": {
"id": 2,
"name": "Champions League",
"short_code": "UEFA CL",
"image_path": "https://cdn.sportmonks.com/images/soccer/leagues/2.png"
}
}
