# GET /v2/transfers

Group: Players

The latest football transfers across every league, 50 a page — the same Transfer objects as a team’s list. Sort by date (the newest move first), by fee (the biggest first) or by the player’s popularity; narrow to the moves into or out of one league’s clubs, to one position, to one nationality and to an age range.

Note: Football only (the source keeps this feed for football). latest lists moves by the day they take effect, so a loan that ends today sits beside a signing announced today. A release or a free agent’s move goes to "No team": to is null and toName says so. Refreshed every 30 minutes.

## Parameters

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `sort` | query | no | latest (default) \| fee \| popular |
| `league` | query | no | a league id: only moves into or out of its clubs |
| `position` | query | no | goalkeeper \| defender \| midfielder \| forward |
| `nationality` | query | no | a two-letter country code as Country.code gives it, any case (EN England, SX Scotland, WA Wales, NX Northern Ireland) |
| `minAge` | query | no | only players at least this old, whole years 15–45 |
| `maxAge` | query | no | only players at most this old, whole years 15–45, not below minAge |
| `page` | query | no | page 0–50 (default 0) |

## Response

- `data`: `Transfer[]`
- `meta`: sort, league, position, nationality, minAge, maxAge, page, count, hasNextPage
- Objects: Transfer (https://sportsapi.app/markdown/en/reference.md#transfer)

## Errors

- 400 bad_request — sort or position not one of the values above, nationality not a country code, an age outside 15–45 or minAge above maxAge, page outside 0–50
- 404 not_found — a league id we never issued

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/transfers"
```

TypeScript:

```ts
const { data, meta } = await client.transfers.list();
for await (const page of client.transfers.listPages()) { … }
```

Python:

```python
res = client.transfers.list()
for page in client.transfers.list_pages(): ...
```

Go:

```go
res, err := client.Transfers.List(ctx, &sportsapi.TransfersListParams{})
for page, err := range client.Transfers.ListPages(ctx, &sportsapi.TransfersListParams{}) { … }
```

CLI:

```bash
$ sportsapi transfers list
$ sportsapi transfers list --all -o csv
```

## Example response

```json
{ "data": [ { "player": { "id": 5120, "name": "Enzo Fernández", "slug": "enzo-fernandez", "shortName": "E. Fernández", "image": "…" },
      "type": "transfer", "date": "2026-09-01",
      "from": { "id": 3790, "name": "Chelsea", … }, "fromName": "Chelsea",
      "to": { "id": 3802, "name": "Manchester City", … }, "toName": "Manchester City",
      "fee": { "amount": 145000000, "currency": "EUR" }, "freeTransfer": false, "draft": null }, … ],
  "meta": { "sort": "fee", "league": null, "position": null, "nationality": null, "minAge": null, "maxAge": null, "page": 0, "count": 50, "hasNextPage": true } }
```

---

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/transfers-list · All docs: https://sportsapi.app/markdown/en/docs.md
