# GET /v2/players/{id}/penalties

Group: Players

A player’s penalties in one league season: scored and taken, and each kick — its fixture, outcome (goal, save, miss, post), where it ended in the goal and its xG (football). Since 2026-11-04.

Plans: Pro + Business only (other plans get 403 endpoint_not_in_plan).

Note: Penalties in play (not shoot-outs), oldest first. goalMouth uses the shot map’s goal-mouth frame. An empty list (counts null) where the source has none.

## Parameters

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `id` | path | yes | our numeric id (positive integer) |
| `league` | query | yes | a league id from /v2/players/{id}/seasons |
| `season` | query | yes | a season id from /v2/leagues/{id}/seasons |

## Response

- `data`: `PenaltyHistory`
- `meta`: league, season, count
- Objects: PenaltyHistory (https://sportsapi.app/markdown/en/reference.md#penaltyhistory)

## Errors

- 403 history_not_in_plan — the season ended before your plan’s history
- 403 endpoint_not_in_plan — Free and Starter
- 404 not_found — season is not one of this league’s seasons

Plus the common errors (https://sportsapi.app/markdown/en/docs.md#errors).

## Request

cURL:

```bash
curl -H "Authorization: Bearer sk_live_…" \
    "https://api.sportsapi.app/v2/players/{id}/penalties?league=…&season=…"
```

TypeScript:

```ts
const { data, meta } = await client.players.penalties(id, { league, season });
```

Python:

```python
res = client.players.penalties(id, league=league, season=season)
```

Go:

```go
res, err := client.Players.Penalties(ctx, id, &sportsapi.PlayersPenaltiesParams{League: league, Season: season})
```

CLI:

```bash
$ sportsapi players penalties <id> --league <league> --season <season>
```

## Example response

```json
{ "data": { "scored": 1, "attempts": 1, "penalties": [ { "fixtureId": 201324, "startTime": "2026-09-12T19:00:00.000Z", "outcome": "goal",
      "goalMouthLocation": "lowRight", "goalMouth": { "x": 74.19, "y": 96.83, "z": null }, "expectedGoals": 0.7884 } ] },
  "meta": { "league": 200001, "season": 200386, "count": 1 } }
```

---

Base URL: https://api.sportsapi.app. Send your API key as `Authorization: Bearer <key>` on every /v2 request; keys are created in the dashboard (https://sportsapi.app/dashboard).
HTML: https://sportsapi.app/docs/players/penalties · All docs: https://sportsapi.app/markdown/en/docs.md
