Description
Returns the transfers for the given player id (suggested rate: up to 60 requests/min)
Access
- Request
GET https://api.sports.csap.ai/api/v1/players/transfers/detail- Auth
- Header X-API-Key: <your key> (Authorization: Bearer <key> also works; ?key= is still accepted but discouraged, because the key ends up in URLs and logs)
- External keys
- AvailableAny valid API key can call this endpoint.
- Rate limits
- 3000 per minute · 200000 per day · Set per key (rate_per_min and quota_daily returned by /api/v1/account are authoritative; the numbers above are a trial key's). Beyond them the answer is 429. In addition, heavy requests such as whole-table snapshots and statistics lists without a match id are processed 2 at a time for the whole platform; a request that cannot get a slot receives 429 with Retry-After. Responses do not carry X-RateLimit-* headers for now. See the general guide
Request parameters 1
| Parameter | Type | required | Example | Description |
|---|---|---|---|---|
| ids | string | required | Several ids, comma separated, 200 at most |
Example request
curl "https://api.sports.csap.ai/api/v1/players/transfers/detail" \ -H "X-API-Key: YOUR_API_KEY"
Try it
Example response
{
"code": 0,
"data": [
{
"fee_desc": "contract",
"fee_eur": 85000,
"from_team": "Al-Jazira",
"from_team_id": null,
"from_team_name": "Al-Jazira",
"id": 1,
"player_id": "1022363",
"player_name": "Ahmed Mahmoud",
"source": "S4",
"to_team": "Khorfakkan",
"to_team_id": null,
"to_team_name": "Khorfakkan",
"transfer": null,
"transfer_date": "2026-09-29T07:32:59Z",
"transfer_desc": "contract",
"transfer_fee": 85000,
"transfer_time": "2026-09-29T07:32:59Z",
"transfer_type": 1,
"type": 1,
"updated_at": 1793707041523
},
{
"fee_desc": "contract",
"fee_eur": null,
"from_team": "San Jose",
"from_team_id": null,
"from_team_name": "San Jose",
"id": 2,
"player_id": "1037535",
"player_name": "Hernán López",
"source": "S4",
"to_team": "Argentinos Juniors",
"to_team_id": null,
"to_team_name": "Argentinos Juniors",
"transfer": null,
"transfer_date": "2026-10-21T11:33:14Z",
"transfer_desc": "contract",
"transfer_fee": null,
"transfer_time": "2026-10-21T11:33:14Z",
"transfer_type": 1,
"type": 1,
"updated_at": 1793707041543
}
],
"message": "success",
"success": true
}Response fields 20
fee_descstringTransfer fee note
Example: "contract"fee_eurintegernullableTransfer fee (EUR)
Example: 85000from_teamstringTeam transferred from
Example: "Al-Jazira"from_team_idnullnullableId of the team transferred from
from_team_namestringName of the team transferred from
Example: "Al-Jazira"idintegerRecord id; paging cursor (the id parameter returns records >= this value). In match endpoints it is the platform match id (gmid)
Example: 1player_idstringPlayer id
Example: "1022363"player_namestringPlayer name
Example: "Ahmed Mahmoud"sourcestringSource code (S1, S2…)
Example: "S4"to_teamstringTeam transferred to
Example: "Khorfakkan"to_team_idnullnullableId of the team transferred to
to_team_namestringName of the team transferred to
Example: "Khorfakkan"transfernullnullablePlayer transfer list
transfer_datestringTransfer date
Example: "2026-09-29T07:32:59Z"transfer_descstringTransfer description (with unit)
Example: "contract"transfer_feeintegernullableTransfer fee
Example: 85000transfer_timestringTransfer time
Example: "2026-09-29T07:32:59Z"transfer_typeintegerTransfer type: 1 loan, 2 end of loan, 3 transfer, 4 retired, 5 draft, 6 released, 7 signed, 8 unknown
Example: 1typeintegerType
Example: 1updated_atintegerLast update time (UTC, ISO 8601; incremental sync with the time parameter goes by it)
Example: 1793707041523Errors
| HTTP | message | When |
|---|---|---|
| 401 | missing API key / unauthorized | No X-API-Key, or the key is invalid or disabled |
| 400 | bad param … | Malformed parameter (e.g. id is neither a number nor u<uid>) |
| 301 | match merged into <gmid> | Queried by an old match id that has been merged into a new gmid: Location points to the new address and the body carries moved_to |
| 404 | not found | The match / team / competition does not exist, or is outside what this key can see (external keys see only matches inside the open coverage) |
| 429 | rate limit exceeded / daily quota exceeded | The key's per-minute rate or daily quota is exceeded |
| 429 | server busy, retry later | The server's concurrency slots are full (only 2 heavy requests at a time); retry after Retry-After seconds |
| 500 | query error | The query failed on the server; you may retry |