Description
Logo assets hosted by this platform (team, competition, player and category logos); returns addresses you can load directly.
Access
- Request
GET https://api.sports.csap.ai/api/v1/logos- 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 3
| Parameter | Type | required | Example | Description |
|---|---|---|---|---|
| id | integer | optional | 5179 | Cursor: rows with id (= uid) >= this value, ordered by id, for paging through everything |
| time | integer | optional | Incremental: rows updated at or after this Unix time (seconds) | |
| limit | integer | optional | 2 | Maximum number of rows, default 1000, maximum 1000 |
Example request
curl "https://api.sports.csap.ai/api/v1/logos?limit=2" \ -H "X-API-Key: YOUR_API_KEY"
Try it
Example response
{
"code": 0,
"data": [
{
"bytes": 12508,
"content_type": "image/webp",
"entity_id": "1",
"entity_type": "team",
"source": "S2",
"uid": 1,
"updated_at": "2026-11-08T09:19:07.94311Z",
"url": "http://43.99.60.51:8080/logos/8a07f32aecbcdf442fa1fdce6450245abf5b754af3ce2c57dc8eefde9487bc95.webp"
},
{
"bytes": 9166,
"content_type": "image/webp",
"entity_id": "10",
"entity_type": "team",
"source": "S2",
"uid": 2,
"updated_at": "2026-11-08T09:19:07.94311Z",
"url": "http://43.99.60.51:8080/logos/b7fee41aca340c21c6a6f2548d0b87251c441c2f87482d221a3d200ab9a24b91.webp"
}
],
"message": "success",
"success": true
}Response fields 8
bytesintegerFile size in bytes
Example: 12508content_typestringMIME type, e.g. image/png
Example: "image/webp"entity_idstringSource entity id
Example: "1"entity_typestringEntity type: team / competition / player / category
Example: "team"sourcestringSource code (S1, S2…)
Example: "S2"uidintegerUnique cursor id of the record
Example: 1updated_atstringLast update time (UTC, ISO 8601; incremental sync with the time parameter goes by it)
Example: "2026-11-08T09:19:07.94311Z"urlstringLink
Errors
| 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 |