Flashscore API endpoint
Returns one page of a football, basketball or hockey player's match log, newest first: each match with date, both sides and scores, competition, the player's rating and labelled statistics (minutes, goals, assists, cards, goalkeeper saves, points, rebounds, time on ice and more depending on the sport). Matches without statistics say why (on the bench, injured, suspended). Page 1 holds the 10 newest matches and every later page 25 older ones; request pages until has_more is false. Players of individual sports return an empty list, use flashscore-player-results for those.
/flashscore/player-match-logReturns one page of a football, basketball or hockey player's match log, newest first: the same table the Flashscore player page shows under "Last matches". Each row has the match date, both sides with scores, the competition, the player's Flashscore rating and labelled statistics. Players of individual sports (tennis, darts, golf, snooker) have no match log and return an empty list; use /api/v1/flashscore/player-results for them.
Query parameters:
id (required): eight-character Flashscore player id from a player URL (/player/<slug>/<id>/), /api/v1/flashscore/search or a lineup or squad response. A team id returns 404, and so does an unknown id.page (optional, default 1): 1-based page from 1 to 300. Page 1 holds the 10 newest matches (the block embedded in the player page); every later page holds 25 older matches. Request pages until has_more is false. A page past the end returns an empty rows list.Response fields:
player: the same profile object as /api/v1/flashscore/player.page, row_count, has_more, rows.event_id (works with the flashscore/match-* endpoints), date (ISO date) and date_text (as Flashscore prints it, dd.mm.yy), stage and stage_code, home and away, result, tournament, rating, rating_rank, stats_available, absence and stats.stage is one of finished (code 3), finished_after_extra_time (code 10), finished_after_penalties (code 11) or other.home and away carry id, name, short_name, slug, logo_url and the scores: score (final score), full_time_score, score_after_extra_time and penalties_score. The last three are omitted when there was no extra time or shoot-out.result is win, draw or loss for the player's own team in that match.tournament: name (for example Premier League (England)), short_code, season, country, country_id and path.rating is Flashscore's 1-10 player rating when one was published. rating_rank is a rank (1 to 3 seen) Flashscore attaches to some rated rows and is omitted otherwise.stats lists the player's labelled statistics in the column order of the player page, each as {id, key, label, value}. value is shown exactly as Flashscore shows it (90', 29:21, 32-33, 97.00%, or a number). Pinned statistics (the numeric id is Flashscore's own):
minutes_played (595), goals (596), assists (541), yellow_cards (599) and red_cards (600); goalkeepers also have saves (649) and shots_faced (965) instead of goals and assists.minutes_played (595), points (169), rebounds (713), assists (541), steals (696) and turnovers (697).goals (596), assists (541), points (169), plus_minus (777) and time_on_ice (781); goalkeepers have save_percentage (715), saves (649) and time_on_ice (781).stat_<id> and the provider's own tag as label. A statistic whose provider tag contradicts the pinned meaning of its id fails the request with 503 instead of returning wrongly labelled data.stats_available is false and stats is empty. absence then explains why when Flashscore says so: {category, detail} with categories seen live such as on the bench, not in the squad, injured (detail Injury or Illness) and suspended (detail Red Card). Without an absence, Flashscore only says that statistics are not available for that match (baseball players, for example, have rows but no statistics).Example response (shortened):
{"code":200,"msg":"OK","data":{"source_url":"https://global.flashscore.ninja/2/x/feed/plm_UmV9iQmE_0","player":{"id":"UmV9iQmE","name":"Haaland E.","full_name":"Erling Haaland","country":"Norway","country_id":145,"sport_id":1,"sport":"football","slug":"haaland-erling","path":"/player/haaland-erling/UmV9iQmE/","url":"https://www.flashscore.com/player/haaland-erling/UmV9iQmE/","photo_url":"https://static.flashscore.com/res/image/data/2TPtAZFG-G41UWlHn.png","birth_date":"2000-07-21","team":{"id":"Wtn9Stg0","name":"Manchester City","logo_url":"https://static.flashscore.com/res/image/data/UXcqj7HG-lQuhqN8N.png"}},"page":1,"row_count":10,"has_more":true,"rows":[{"event_id":"Ei1jt6O0","date":"2026-10-04","date_text":"04.10.26","stage_code":3,"stage":"finished","home":{"id":"WvJrjFVN","name":"Portugal","short_name":"POR","slug":"portugal","logo_url":"https://static.flashscore.com/res/image/data/IBvrXaZg-vZG58BBc.png","score":2,"full_time_score":2},"away":{"id":"8rP6JO0H","name":"Norway","short_name":"NOR","slug":"norway","logo_url":"https://static.flashscore.com/res/image/data/MZeV1VdM-8doAmYTm.png","score":1,"full_time_score":1},"result":"loss","tournament":{"name":"UEFA Nations League (Europe)","short_code":"UNL","season":"2026-2027","country":"Europe","country_id":6,"path":"/football/europe/uefa-nations-league/"},"rating":6.5,"stats_available":true,"stats":[{"id":595,"key":"minutes_played","label":"Minutes played","value":"67'"}]}]}}
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| event_id | 10 | |
| date | 10 | 2026-09-05 to 2026-10-11 |
| date_text | 10 | “11.10.26” and 9 other values |
| stage_code | 10 | |
| stage | 10 | finished in all 10 |
| home | 10 | |
| away | 10 | |
| result | 10 | win (7), loss (3) |
| tournament | 10 | |
| rating | 9 | 6.3 to 9, median 7.9 |
| stats_available | 10 | true in 9 of 10 |
| stats | 9 | median 5 entries |
| rating_rank | 5 | 1 to 3, median 1 |
| absence | 1 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Eight-character Flashscore player id | UmV9iQmE | |
| page | integer | No | 1 | 1-based page from 1 to 300; defaults to 1 Minimum: 1. Maximum: 300. | 1 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/flashscore/player-match-log?id=UmV9iQmE&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://global.flashscore.ninja/2/x/feed/plm_UmV9iQmE_0",
"player": {
"id": "UmV9iQmE",
"name": "Haaland E.",
"full_name": "Erling Haaland",
"country": "Norway",
"country_id": 145,
"sport_id": 1,
"sport": "football",
"slug": "haaland-erling",
"path": "/player/haaland-erling/UmV9iQmE/",
"url": "https://www.flashscore.com/player/haaland-erling/UmV9iQmE/",
"photo_url": "https://static.flashscore.com/res/image/data/2TPtAZFG-G41UWlHn.png",
"birth_date": "2000-07-21",
"team": {
"id": "Wtn9Stg0",
"name": "Manchester City",
"logo_url": "https://static.flashscore.com/res/image/data/UXcqj7HG-lQuhqN8N.png"
}
},
"page": 1,
"row_count": 10,
"has_more": true,
"rows": [
{
"event_id": "Ei1jt6O0",
"date": "2026-10-04",
"date_text": "04.10.26",
"stage_code": 3,
"stage": "finished",
"home": {
"id": "WvJrjFVN",
"name": "Portugal",
"short_name": "POR",
"slug": "portugal",
"logo_url": "https://static.flashscore.com/res/image/data/IBvrXaZg-vZG58BBc.png",
"score": 2,
"full_time_score": 2
},
"away": {
"id": "8rP6JO0H",
"name": "Norway",
"short_name": "NOR",
"slug": "norway",
"logo_url": "https://static.flashscore.com/res/image/data/MZeV1VdM-8doAmYTm.png",
"score": 1,
"full_time_score": 1
},
"result": "loss",
"tournament": {
"name": "UEFA Nations League (Europe)",
"short_code": "UNL",
"season": "2026-2027",
"country": "Europe",
"country_id": 6,
"path": "/football/europe/uefa-nations-league/"
},
"rating": 6.5,
"stats_available": true,
"stats": [
{
"id": 595,
"key": "minutes_played",
"label": "Minutes played",
"value": "67'"
}
]
}
]
}
}Request schema
No body schema
Response schema
Inline response schema
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | flashscore.PlayerMatchLogResponse | No | ||||
| data.has_more | boolean | No | ||||
| data.page | integer | No | ||||
| data.player | flashscore.PlayerProfile | No | PlayerProfile record, 19 fields: birth_date, country, country_id, full_name, id, name, path, photo_url, ranking, slug, sport, sport_id and 2 more. Described under Flashscore player profile API. | |||
| data.row_count | integer | No | ||||
| data.rows | array | No | ||||
| data.rows[].absence | flashscore.PlayerMatchLogAbsence | No | ||||
| data.rows[].absence.category | string | No | ||||
| data.rows[].absence.detail | string | No | ||||
| data.rows[].away | flashscore.PlayerMatchLogSide | No | ||||
| data.rows[].away.full_time_score | integer | No | ||||
| data.rows[].away.id | string | No | ||||
| data.rows[].away.logo_url | string | No | ||||
| data.rows[].away.name | string | No | ||||
| data.rows[].away.penalties_score | integer | No | ||||
| data.rows[].away.score | integer | No | ||||
| data.rows[].away.score_after_extra_time | integer | No | ||||
| data.rows[].away.short_name | string | No | ||||
| data.rows[].away.slug | string | No | ||||
| data.rows[].date | string | No | ||||
| data.rows[].date_text | string | No | ||||
| data.rows[].event_id | string | No | ||||
| data.rows[].home | flashscore.PlayerMatchLogSide | No | ||||
| data.rows[].home.full_time_score | integer | No | ||||
| data.rows[].home.id | string | No | ||||
| data.rows[].home.logo_url | string | No | ||||
| data.rows[].home.name | string | No | ||||
| data.rows[].home.penalties_score | integer | No | ||||
| data.rows[].home.score | integer | No | ||||
| data.rows[].home.score_after_extra_time | integer | No | ||||
| data.rows[].home.short_name | string | No | ||||
| data.rows[].home.slug | string | No | ||||
| data.rows[].rating | number | No | ||||
| data.rows[].rating_rank | integer | No | ||||
| data.rows[].result | string | No | win, draw, loss | |||
| data.rows[].stage | string | No | finished, finished_after_extra_time, finished_after_penalties, other | |||
| data.rows[].stage_code | integer | No | ||||
| data.rows[].stats | array | No | ||||
| data.rows[].stats[].id | integer | No | ID is Flashscore's numeric statistic id. | |||
| data.rows[].stats[].key | string | No | ||||
| data.rows[].stats[].label | string | No | ||||
| data.rows[].stats[].value | string | No | Value is the displayed value: "90'", "29:21", "32-33", "97.00%" or a number. | |||
| data.rows[].stats_available | boolean | No | ||||
| data.rows[].tournament | flashscore.PlayerMatchLogTournament | No | ||||
| data.rows[].tournament.country | string | No | ||||
| data.rows[].tournament.country_id | integer | No | ||||
| data.rows[].tournament.name | string | No | ||||
| data.rows[].tournament.path | string | No | ||||
| data.rows[].tournament.season | string | No | ||||
| data.rows[].tournament.short_code | string | No | ||||
| data.source_url | string | No | ||||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/flashscore/player-match-log?id=UmV9iQmE&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"