Flashscore API endpoint
Returns a player's public profile: name, country, birth date, sport, photo and current team, plus (for team-sport players) position, age, market value, contract expiry, extra details such as height, and career statistics by season, team and competition grouped into league, domestic cups, international cups and national team. Players of individual sports such as tennis return the profile (and ranking text) without a career table.
/flashscore/playerQuery parameters:
id (required): eight-character Flashscore player id, the last path segment of a player URL (/player/<slug>/<id>/). Find ids with /api/v1/flashscore/search or the player_id fields of /api/v1/flashscore/team-squad. A team id returns not found.slug (optional): the player slug from the URL. It is not needed to find the page; when supplied it must match the id or the request is rejected.Notable response behavior: player is the profile from Flashscore's participant feed: abbreviated name (for example Haaland E.), full_name, country, sport, photo, birth_date (YYYY-MM-DD), current team and, for tennis players, ranking text such as ATP: 11.. For team-sport players (football, basketball, hockey and so on) the player page adds position, age, market_value and contract_expires when the site shows them, details for any other labelled fact (for example Height), and career: up to four tabs (league, national_cup, international_cups, national_team), each with columns, one row per season, team and competition, and a total where the site prints one. Row and total stats are keyed by the column keys (football: rating, matches_played, goals_scored, assists, yellow_cards, red_cards; basketball: matches, minutes, points, rebounds, assists, steals) and hold numbers; blank or - cells are omitted. Basketball rows carry parts with the regular-season and play-off breakdown. Players of individual sports such as tennis use a different page layout and return the profile only, with an empty career. Coaches have player pages too and appear with position Coach.
| Field | Filled in, of 4 checked | Values in the sample |
|---|---|---|
| key | 4 | |
| name | 4 | “League” and 3 other values |
| columns | 4 | median 6 entries |
| rows | 4 | median 14 entries |
| total | 4 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Eight-character Flashscore player id | UmV9iQmE | |
| slug | string | No | Optional player slug; must match the id when supplied | haaland-erling | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/flashscore/player?id=UmV9iQmE" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://global.flashscore.ninja/2/x/feed/pl_1_UmV9iQmE_0",
"page_url": "https://www.flashscore.com/player/haaland-erling/UmV9iQmE/",
"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/",
"birth_date": "2000-07-21",
"team": {
"id": "Wtn9Stg0",
"name": "Manchester City",
"slug": "manchester-city"
}
},
"position": "Forward",
"age": 26,
"market_value": "€207.1m",
"contract_expires": "2034-06-30",
"details": [],
"career": [
{
"key": "league",
"name": "League",
"columns": [
{
"key": "rating",
"label": "Rating"
},
{
"key": "matches_played",
"label": "Matches Played"
}
],
"rows": [
{
"season": "2025/2026",
"team": {
"id": "Wtn9Stg0",
"name": "Manchester City",
"slug": "manchester-city",
"path": "/team/manchester-city/Wtn9Stg0/"
},
"competition": {
"name": "Premier League",
"path": "/football/england/premier-league-2025-2026/"
},
"stats": {
"rating": 7.4,
"matches_played": 35,
"goals_scored": 27
}
}
],
"total": {
"matches_played": 275,
"goals_scored": 210
}
}
]
}
}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.PlayerResponse | No | ||||
| data.age | integer | No | ||||
| data.career | array | No | ||||
| data.career[].columns | array | No | ||||
| data.career[].columns[].key | string | No | ||||
| data.career[].columns[].label | string | No | ||||
| data.career[].key | string | No | ||||
| data.career[].name | string | No | ||||
| data.career[].rows | array | No | ||||
| data.career[].rows[].competition | flashscore.CareerCompetition | No | ||||
| data.career[].rows[].competition.name | string | No | ||||
| data.career[].rows[].competition.path | string | No | ||||
| data.career[].rows[].parts | array | No | ||||
| data.career[].rows[].parts[].stage | string | No | ||||
| data.career[].rows[].parts[].stats | object | No | ||||
| data.career[].rows[].season | string | No | ||||
| data.career[].rows[].stats | object | No | ||||
| data.career[].rows[].team | flashscore.CareerTeam | No | ||||
| data.career[].rows[].team.id | string | No | ||||
| data.career[].rows[].team.name | string | No | ||||
| data.career[].rows[].team.path | string | No | ||||
| data.career[].rows[].team.slug | string | No | ||||
| data.career[].total | object | No | ||||
| data.contract_expires | string | No | ||||
| data.details | array | No | ||||
| data.details[].label | string | No | ||||
| data.details[].value | string | No | ||||
| data.market_value | string | No | ||||
| data.page_url | string | No | ||||
| data.player | flashscore.PlayerProfile | No | ||||
| data.player.birth_date | string | No | ||||
| data.player.country | string | No | ||||
| data.player.country_id | integer | No | ||||
| data.player.full_name | string | No | ||||
| data.player.id | string | No | ||||
| data.player.name | string | No | ||||
| data.player.path | string | No | ||||
| data.player.photo_url | string | No | ||||
| data.player.ranking | string | No | ||||
| data.player.slug | string | No | ||||
| data.player.sport | string | No | ||||
| data.player.sport_id | integer | No | ||||
| data.player.team | flashscore.PlayerTeam | No | ||||
| data.player.team.id | string | No | ||||
| data.player.team.logo_url | string | No | ||||
| data.player.team.name | string | No | ||||
| data.player.team.path | string | No | ||||
| data.player.team.slug | string | No | ||||
| data.player.url | string | No | ||||
| data.position | 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?id=UmV9iQmE" \
-H "x-api-key: $CRAWLORA_API_KEY"