Building with AI? Give your coding tool the whole reference in one file: https://soccer-data.co/llms.txt
SOCCER DATA Docs
Sign in Get API key
// Players

Player season stats

A player's totals for one season: appearances, minutes and rating, plus grouped numbers for scoring, shooting, passing, defending, duels and discipline. Use it for season stat tables, player comparisons or fantasy tools.

GET https://api.soccer-data.co/v1/players/{player_id}/stats
  • season_id is required. Leaving it out returns 400 BAD_REQUEST.
  • If you pass a competition_id that the season doesn't belong to, you get 400 SEASON_COMPETITION_MISMATCH.
  • expected_goals and expected_assists only add up appearances that had xG data. xg_matches says how many that was, and it can be lower than appearances. Both are null when none of the player's matches had xG.
  • Percentage fields are numbers such as 76.7, meaning 76.7%.
  • How much detail you get depends on the competition. GET /coverage/leagues shows what each league has.
Path parameters
player_idstringrequired

The player's id, like player_…. Find one with the ID guide.

Query parameters
season_id string required

The season to total up. Get it from a competition's seasons list, or use the competition's current_season_id.

competition_id string

Count only matches in this competition.

stage string default all

regular counts league and group-stage matches only. playoff counts knockout and play-off matches only. all counts every match the player appeared in.

regularplayoffall
Response fields
data.player_idstring

The player these totals belong to.

data.season_idstring

The season the totals cover.

data.team_idstring

The player's team for these totals.

data.positionstring

G, D, M or F. An empty string when the position isn't known.

data.ratingnumber|null

The player's rating for the season. Null when there isn't one.

data.appearancesinteger

Matches the player took part in.

data.startsinteger

Matches the player started.

data.minutes_playedinteger

Total minutes on the pitch.

data.scoring.goalsinteger

Goals scored.

data.scoring.assistsinteger

Assists.

data.scoring.goals_assists_suminteger

Goals plus assists.

data.scoring.goal_conversion_percentagenumber

Share of shots turned into goals, as a percentage.

data.scoring.penalties_takeninteger

Penalties taken.

data.scoring.penalty_goalsinteger

Penalties scored.

data.scoring.big_chances_createdinteger

Big chances set up for team-mates.

data.scoring.big_chances_missedinteger

Big chances the player failed to score.

data.scoring.expected_goalsnumber|null

Season xG, summed over the appearances counted in xg_matches. Null when none of them had xG.

data.scoring.expected_assistsnumber|null

Season xA, on the same basis as expected_goals. Null when none of the appearances had xG.

data.scoring.xg_matchesinteger

Appearances that had xG data. Can be lower than appearances.

data.shooting.total_shotsinteger

All shots.

data.shooting.shots_on_targetinteger

Shots on target.

data.shooting.shots_off_targetinteger

Shots that missed the target.

data.passing.total_passesinteger

Passes attempted.

data.passing.accurate_passesinteger

Passes that reached a team-mate.

data.passing.inaccurate_passesinteger

Passes that didn't.

data.passing.pass_accuracynumber

Accurate passes as a percentage of all passes.

data.passing.key_passesinteger

Passes that led to a shot.

data.passing.accurate_crossesinteger

Crosses that found a team-mate.

data.passing.accurate_crosses_percentagenumber

Accurate crosses as a percentage.

data.passing.accurate_own_half_passesinteger

Accurate passes in the player's own half.

data.passing.accurate_opposition_half_passesinteger

Accurate passes in the opponent's half.

data.passing.accurate_final_third_passesinteger

Accurate passes in the final third.

data.defending.tacklesinteger

Tackles made.

data.defending.interceptionsinteger

Passes intercepted.

data.duels.ground_duels_woninteger

Ground duels won.

data.duels.ground_duels_won_percentagenumber|null

Share of ground duels won, as a percentage. Null when not recorded.

data.duels.aerial_duels_woninteger

Aerial duels won.

data.duels.aerial_duels_won_percentagenumber|null

Share of aerial duels won, as a percentage. Null when not recorded.

data.duels.total_duels_woninteger

All duels won.

data.duels.total_duels_won_percentagenumber|null

Share of all duels won, as a percentage. Null when not recorded.

data.duels.successful_dribblesinteger

Dribbles that beat an opponent.

data.duels.successful_dribbles_percentagenumber|null

Share of dribbles that succeeded, as a percentage. Null when not recorded.

data.discipline.yellow_cardsinteger

Yellow cards.

data.discipline.red_cardsinteger

All red cards, including second yellows.

data.discipline.direct_red_cardsinteger

Straight red cards.

data.discipline.penalty_woninteger

Penalties the player earned.

data.discipline.penalty_concededinteger

Penalties the player gave away.

curl "https://api.soccer-data.co/v1/players/player_ul3vc6om97u5/stats?season_id=season_98l95mxugqs9" \
  -H "X-Api-Key: $SOCCER_DATA_KEY"
200 · Example response
{
    "data": {
        "player_id": "player_ul3vc6om97u5",
        "season_id": "season_98l95mxugqs9",
        "team_id": "team_f0ibhxdw7hs5",
        "position": "F",
        "rating": 7.64,
        "appearances": 31,
        "starts": 21,
        "minutes_played": 2225,
        "scoring": {
            "goals": 7,
            "assists": 5,
            "goals_assists_sum": 12,
            "goal_conversion_percentage": 9.86,
            "penalties_taken": 2,
            "penalty_goals": 2,
            "big_chances_created": 12,
            "big_chances_missed": 6,
            "expected_goals": 5.31,
            "expected_assists": 2.04,
            "xg_matches": 9
        },
        "shooting": {
            "total_shots": 71,
            "shots_on_target": 27,
            "shots_off_target": 29
        },
        "passing": {
            "total_passes": 773,
            "accurate_passes": 593,
            "inaccurate_passes": 180,
            "pass_accuracy": 76.7,
            "key_passes": 63,
            "accurate_crosses": 21,
            "accurate_crosses_percentage": 24.4,
            "accurate_own_half_passes": 168,
            "accurate_opposition_half_passes": 425,
            "accurate_final_third_passes": 262
        },
        "defending": {
            "tackles": 41,
            "interceptions": 16
        },
        "duels": {
            "ground_duels_won": 112,
            "ground_duels_won_percentage": 46.3,
            "aerial_duels_won": 9,
            "aerial_duels_won_percentage": 30.0,
            "total_duels_won": 121,
            "total_duels_won_percentage": 44.8,
            "successful_dribbles": 38,
            "successful_dribbles_percentage": 47.5
        },
        "discipline": {
            "yellow_cards": 2,
            "red_cards": 0,
            "direct_red_cards": 0,
            "penalty_won": 2,
            "penalty_conceded": 0
        }
    }
}
Get a free key to try it