← Back to API docs

GET/api/v1/players

List players
Basic data packageactivebetacoreAvailable (scoped)

Description

Returns all players, with incremental updates by timestamp.

1. First full sync: page through everything with the id parameter.
2. Afterwards: fetch what changed with the time parameter (suggested frequency: once a minute).

Access

Request
GET https://api.sports.csap.ai/api/v1/players
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
Available (scoped)External keys can call it, but only data inside the open scope is returned.
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 3

ParameterTyperequiredExampleDescription
idintegeroptional6917Records with id greater than or equal to this value, ordered by id
timeintegeroptionalRecords updated at or after this time (timestamp), ordered by update time
limitintegeroptional2Maximum number of rows, default 1000, maximum 1000

Example request

curl "https://api.sports.csap.ai/api/v1/players?limit=2" \
  -H "X-API-Key: YOUR_API_KEY"

Try it

Example response

Real response with an external key at 09/11/2026, 14:29 UTC: HTTP 200, 2 rows, 104 ms (data cut to 2 rows)

{
  "code": 0,
  "data": [
    {
      "ability": null,
      "age": null,
      "birthday": "1999-02-25T00:00:00Z",
      "characteristics": null,
      "coach_id": null,
      "contract_until": "2030-06-30T00:00:00Z",
      "country_id": null,
      "country_ids": null,
      "deathday": null,
      "height": 196,
      "id": 1,
      "limit": null,
      "logo": null,
      "logo_url": null,
      "market_value": 45000000,
      "market_value_currency": null,
      "market_value_eur": 45000000,
      "max_id": null,
      "max_time": null,
      "min_id": null,
      "min_time": null,
      "name_zh": "詹路易吉·多纳鲁马",
      "name_zht": null,
      "national_logo": null,
      "nationality": "Italy",
      "position": "Goalkeeper",
      "positions": null,
      "preferred_foot": "right",
      "query": null,
      "retire_time": null,
      "short_name_zh": null,
      "short_name_zht": null,
      "source": "S6",
      "source_id": "315858",
      "suffix": null,
      "team": "Manchester City",
      "team_zh": null,
      "time": null,
      "type": null,
      "uid": 1,
      "updated_at": 1794153803316,
      "weight": null,
      "name": "Gianluigi Donnarumma"
    },
    {
      "ability": null,
      "age": null,
      "birthday": "1992-05-20T00:00:00Z",
      "characteristics": null,
      "coach_id": null,
      "contract_until": "2028-06-30T00:00:00Z",
      "country_id": null,
      "country_ids": null,
      "deathday": null,
      "height": 189,
      "id": 2,
      "limit": null,
      "logo": null,
      "logo_url": null,
      "market_value": 5000000,
      "market_value_currency": null,
      "market_value_eur": 5000000,
      "max_id": null,
      "max_time": null,
      "min_id": null,
      "min_time": null,
      "name_zh": null,
      "name_zht": null,
      "national_logo": null,
      "nationality": "Argentina, Italy",
      "position": "Goalkeeper",
      "positions": null,
      "preferred_foot": "right",
      "query": null,
      "retire_time": null,
      "short_name_zh": null,
      "short_name_zht": null,
      "source": "S6",
      "source_id": "229604",
      "suffix": null,
      "team": "Manchester City",
      "team_zh": null,
      "time": null,
      "type": null,
      "uid": 2,
      "updated_at": 1794153803321,
      "weight": null,
      "name": "Gerónimo Rulli"
    }
  ],
  "message": "success",
  "success": true
}

Response fields 44

abilitynullnullableAbility rating (the field is absent when there is no data)
agenullnullableAge
birthdaystringDate of birthExample: "1999-02-25T00:00:00Z"
characteristicsnullnullableSkills (the field is absent when there is no data): · 1 - first touch · 2 - penalty taking · 3 - free kicks · 4 - long shots · 5 - finishing · 6 - passing · 7 - playmaking · 8 - dribbling · 9 - interceptions · 10 - sliding tackles · 11 - consistency · 12 - take-ons · 13 - long passing · 14 - ball control · 15 - aerial duels · 16 - ground duels · 17 - error prone · 18 - discipline · 19 - penalty saving · 20 - reflexes · 21 - joining the attack as a goalkeeper · 22 - claiming high balls · 23 - handling · 24 - shooting from distance · 25 - positioning · 26 - high pressing · 27 - saving long shots · 28 - crossing · 29 - offside awareness · 30 - saving close-range shots · 31 - concentration · 32 - defensive contribution · 33 - key passes · 34 - heading · 35 - set pieces · 36 - through balls · 37 - counter-attacks · 38 - one-touch passing · 39 - lofted balls · 40 - drawing fouls · 41 - cutting inside · 42 - punches · 43 - clearances · · example: [[[11, 1]], [[7, 1]]]
coach_idnullnullableCoach id
contract_untilstringContract end dateExample: "2030-06-30T00:00:00Z"
country_idnullnullableCountry / region id
country_idsnullnullableCountry ids for multiple nationalities · example: [1, 34]
deathdaynullnullableDate of death (returned when there is data)
heightintegerHeight (cm)Example: 196
idintegerRecord id; paging cursor (the id parameter returns records >= this value). In match endpoints it is the platform match id (gmid)Example: 1
limitnullnullableMaximum number of rows in this response
logonullnullableLogo (image address on this platform; empty when there is none)
logo_urlnullnullableLogo (image address on this platform; empty when there is none)
market_valueintegerMarket valueExample: 45000000
market_value_currencynullnullableMarket value unit
market_value_eurintegerMarket value (EUR)Example: 45000000
max_idnullnullableLargest id on this page
max_timenullnullableLatest update time on this page (Unix seconds)
min_idnullnullableSmallest id on this page
min_timenullnullableEarliest update time on this page (Unix seconds)
name_enstringEnglish nameExample: "Gianluigi Donnarumma"
name_zhstringnullableChinese nameExample: "詹路易吉·多纳鲁马"
name_zhtnullnullableTraditional Chinese name
national_logonullnullablePlayer logo (national team; use it when the team is known to be a national team)
nationalitystringNationalityExample: "Italy"
positionstringPositionExample: "Goalkeeper"
positionsnullnullableDetailed positions (the field is absent when there is no data): · 'LW' - left winger · 'RW' - right winger · 'ST' - striker · 'SS' - second striker · 'AM' - attacking midfielder · 'ML' - left midfielder · 'MC' - central midfielder · 'MR' - right midfielder · 'DM' - defensive midfielder · 'DL' - left back · 'DC' - centre back · 'DR' - right back · 'GK' - goalkeeper · · example: ["RW", ["ST"]]
preferred_footstringPreferred footExample: "right"
querynullnullableQuery info (paging cursor, totals)
retire_timenullnullableRetirement date (returned when there is data)
short_name_ennullnullableEnglish short name
short_name_zhnullnullableChinese short name
short_name_zhtnullnullableCantonese short name
sourcestringSource code (S1, S2…)Example: "S6"
source_idstringId within the sourceExample: "315858"
suffixnullnullablePlayer's youth (U-series) level
teamstringTeam nameExample: "Manchester City"
team_zhnullnullableTeam Chinese name
timenullnullableTime / minute
typenullnullableType
uidintegerUnique cursor id of the recordExample: 1
updated_atintegerLast update time (UTC, ISO 8601; incremental sync with the time parameter goes by it)Example: 1794153803316
weightnullnullableWeight

Errors

HTTPmessageWhen
401missing API key / unauthorizedNo X-API-Key, or the key is invalid or disabled
400bad param …Malformed parameter (e.g. id is neither a number nor u<uid>)
301match 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
404not foundThe match / team / competition does not exist, or is outside what this key can see (external keys see only matches inside the open coverage)
429rate limit exceeded / daily quota exceededThe key's per-minute rate or daily quota is exceeded
429server busy, retry laterThe server's concurrency slots are full (only 2 heavy requests at a time); retry after Retry-After seconds
500query errorThe query failed on the server; you may retry