Football API demos / 01

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

  1. 3'

    FC Barcelona

    Raphinha1–0

    Assist Lamine Yamal, Left foot shot

  2. 22'

    FC Barcelona

    Karim Adeyemi2–0

    Assist João Cancelo, Right foot shot

  3. 27'

    Feyenoord

    Charles Vanhoutte

    Yellow card, Foul

  4. Second half

    46'

    Feyenoord

    On: Oussama Targhalline

    Off: Javi López

  5. 54'

    FC Barcelona

    Dani Olmo

    Yellow card, Foul

  6. 57'

    FC Barcelona

    Raphinha3–0

    Assist Pedri, Left foot shot

  7. 59'

    Feyenoord

    VARGoal disallowed

    Nacho Ferri

  8. 63'

    FC Barcelona

    On: Marc Bernal

    Off: Pedri

  9. 63'

    FC Barcelona

    On: Anthony Gordon

    Off: Karim Adeyemi

  10. 77'

    FC Barcelona

    Lamine Yamal4–0

    Free Kick

  11. 82'

    Feyenoord

    Sem Steijn4–1

    Assist Gonçalo Borges, Right foot shot

  12. 83'

    Feyenoord

    On: Tobias van den Elshout

    Off: Luciano Valente

  13. 85'

    FC Barcelona

    Gabriel Jesus5–1

    Assist Lamine Yamal, Header

Statistics

FC BarcelonaFeyenoord

72%Possession28%
24Shots4
9Shots on target2
94%Pass accuracy83%
More statistics

Top line

3Big chances created2
4Corners1

Attack

13Shots inside box3
1Big chances missed1
18Key passes3
17Successful dribbles12
60Dangerous attacks30

Passing

794Passes308

Defence and discipline

17Tackles24
5Interceptions6
1Saves4
10Fouls12
1Yellow cards1

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.

Score rows returned for FC Barcelona vs Feyenoord
DescriptionFC BarcelonaFeyenoordMeaning
1ST_HALF20Score at half time
2ND_HALF51Cumulative: the score at the end of the second half, not only second-half goals
CURRENT51The running score. This is what the header shows
2ND_HALF_ONLY31Goals 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.

fixture.http
HTTP
GET https://api.sportmonks.com/v3/football/fixtures/19872603
  ?api_token={{apiToken}}
  &include=participants;scores;state;events;statistics.type;venue

API fields read by the match centre
FieldUsed forNote
participants[].meta.locationPlacing each team on the home or away sideParticipants arrive away team first in the recorded response, so array position cannot be trusted.
participants[].name, short_code, image_pathTeam names, short codes and crests
participants[].meta.winnerEmphasising the winning teamNull until the match has finished.
scores[] where description is CURRENTThe score in the header2ND_HALF is cumulative. 2ND_HALF_ONLY holds second-half goals only.
state.developer_name, state.nameThe status badge and the Not started state
starting_at_timestampKick-off time, shown in UTC and converted to local time in the browser
result_infoThe result sentence under the score
events[].minute, extra_minute, sort_orderOrdering the timelineEvents arrive grouped by type, so the screen sorts by minute, then extra minute, then sort_order.
events[].type_idTelling goals, cards, substitutions and VAR decisions apart
events[].player_name, related_player_nameScorer and assist, or the player coming on and the player going offSome names carry trailing non-breaking spaces, which the screen trims.
events[].resultThe running score after each goalWritten in home-away order, for example 4-1.
events[].info, additionGoal type and the wording of VAR decisions
statistics[].type_id, participant_id, data.valuePossession (45), shots (42), shots on target (86), pass accuracy (82) and the rest of the statisticsRows are paired by participant_id. A statistic that is missing is shown as a dash, not as zero.
venue.name, city_name, capacityThe venue line under the score
league.nameThe 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

    request.http
    HTTP
    GET https://api.sportmonks.com/v3/football/fixtures/19872603
      ?api_token={{apiToken}}
      &include=participants;scores;state;events;statistics.type;venue

  • Competition name, from the fixtures by date response, retrieved 12 Oct 2026, 14:31 UTC

    request.http
    HTTP
    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
barcelona-feyenoord.json
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

    request.http
    HTTP
    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
city-psg-pre-match.json
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"
  }
}