Description
Returns matches whose data changed (kick-off time, status and so on), with incremental updates by timestamp
Limit: matches starting within the previous 30 days
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).
Limit: matches starting within the previous 30 days
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/matches/recent- 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
| Parameter | Type | required | Example | Description |
|---|---|---|---|---|
| id | integer | optional | 5179 | Records with id greater than or equal to this value, ordered by id |
| time | integer | optional | Records updated at or after this time (timestamp), ordered by update time | |
| limit | integer | optional | 2 | Maximum number of rows, default 1000, maximum 1000 |
Example request
curl "https://api.sports.csap.ai/api/v1/matches/recent?limit=2" \ -H "X-API-Key: YOUR_API_KEY"
Try it
Example response
{
"code": 0,
"data": [
{
"agg_score": null,
"assistant1": null,
"assistant2": null,
"assistant_var": null,
"away_corner": 0,
"away_gtid": 4,
"away_logo": "http://43.99.60.51:8080/logos/7831f4f13766be113c7d5bd7a86ea6b6b7655b2fcb6489fccb4892557c93bc6c.webp",
"away_ot": null,
"away_pen": 0,
"away_position": null,
"away_red": 0,
"away_score": 3,
"away_scores": 1,
"away_team": "KRC Genk U19",
"away_team_id": 4,
"away_yellow": 3,
"away_zh": "亨克U19",
"comp_logo": "http://43.99.60.51:8080/logos/9addc564a659ede798792b5cfe73468d5aaf32a48f84587300750f55c6f53834.png",
"comp_ref": null,
"competition_id": 3,
"coverage": null,
"cur_period_start": 1793714739,
"ended": null,
"environment": null,
"fourth": null,
"gcid": 3,
"gmid": 1,
"group_num": null,
"half_away": 1,
"half_home": 2,
"has_ot": null,
"home_corner": 0,
"home_gtid": 3,
"home_logo": "http://43.99.60.51:8080/logos/1648702a19007e2b0e9338d0f790dbc09b2cb4066fb0187194e1f67b98509a9c.webp",
"home_ot": null,
"home_pen": 0,
"home_position": null,
"home_red": 2,
"home_score": 4,
"home_scores": 2,
"home_team": "Red Bull Salzburg U19",
"home_team_id": 3,
"home_yellow": 2,
"home_zh": "萨尔茨堡U19",
"humidity": null,
"id": 1,
"intelligence": null,
"league": "UEFA Youth League",
"league_zh": "欧青联 第二圈 次回合",
"limit": null,
"lineup": null,
"loss": null,
"match_time": "2026-11-03T13:00:00Z",
"max_id": null,
"max_time": null,
"min_id": null,
"min_time": null,
"minute": null,
"mlive": null,
"neutral": null,
"note": null,
"period_initial": 2700,
"pressure": null,
"query": null,
"referee_id": null,
"referees": null,
"related_id": null,
"round": null,
"round_num": null,
"season_id": null,
"source": "merged",
"sources": "S5,S9,S4,S3,S2,S8",
"stage_id": null,
"start_ts": "2026-11-03T13:00:00Z",
"status_code": 8,
"status_id": 8,
"status_type": "finished",
"tbd": null,
"team_reverse": null,
"temperature": null,
"time": null,
"type": null,
"updated_at": 1794107207241,
"var": null,
"venue_id": null,
"weather": null,
"wind": null
},
{
"agg_score": null,
"assistant1": null,
"assistant2": null,
"assistant_var": null,
"away_corner": 4,
"away_gtid": 14,
"away_logo": "http://43.99.60.51:8080/logos/8d256871b885c1ceec0af16920cbf7cf6864fc1515494da47629d5fcf2dd9c24.webp",
"away_ot": null,
"away_pen": 0,
"away_position": null,
"away_red": 0,
"away_score": 1,
"away_scores": 0,
"away_team": "Riffa",
"away_team_id": 14,
"away_yellow": 2,
"away_zh": "阿尔里法",
"comp_logo": "http://43.99.60.51:8080/logos/637acfb3646144c4309add12936f7ca3a16ecb9ab75cb574103c50b711d19529.png",
"comp_ref": null,
"competition_id": 4,
"coverage": null,
"cur_period_start": 1793720726,
"ended": null,
"environment": null,
"fourth": null,
"gcid": 4,
"gmid": 2,
"group_num": null,
"half_away": 0,
"half_home": 0,
"has_ot": null,
"home_corner": 6,
"home_gtid": 13,
"home_logo": "http://43.99.60.51:8080/logos/1324a3b41616bbbaebf750902d74e5bf3fde11db44b686b6d86954e1b5cb58b7.png",
"home_ot": null,
"home_pen": 0,
"home_position": null,
"home_red": 0,
"home_score": 1,
"home_scores": 0,
"home_team": "Al-Zawraa",
"home_team_id": 13,
"home_yellow": 1,
"home_zh": "扎瓦拉",
"humidity": null,
"id": 2,
"intelligence": null,
"league": "Gulf Club Champions League",
"league_zh": "海湾锦标",
"limit": null,
"lineup": null,
"loss": null,
"match_time": "2026-11-03T14:30:00Z",
"max_id": null,
"max_time": null,
"min_id": null,
"min_time": null,
"minute": "Ended",
"mlive": null,
"neutral": null,
"note": null,
"period_initial": 2700,
"pressure": null,
"query": null,
"referee_id": null,
"referees": null,
"related_id": null,
"round": null,
"round_num": null,
"season_id": null,
"source": "merged",
"sources": "S5,S9,S3,S2,S8",
"stage_id": null,
"start_ts": "2026-11-03T14:30:00Z",
"status_code": 8,
"status_id": 8,
"status_type": "finished",
"tbd": null,
"team_reverse": null,
"temperature": null,
"time": null,
"type": null,
"updated_at": 1794107162969,
"var": null,
"venue_id": null,
"weather": null,
"wind": null
}
],
"message": "success",
"success": true
}Response fields 87
agg_scorenullnullableAggregate score over two legs in regular time (including extra time) · example: [3, 6]
assistant1nullnullableAssistant referee 1
assistant2nullnullableAssistant referee 2
assistant_varnullnullableAssistant VAR referees · example: [6261, 6262]
away_cornerintegerAway team corners
Example: 0away_gtidintegerPlatform team id of the away team
Example: 4away_logostringAway team logo (image address on this platform)
away_otnullnullableAway team extra-time score
away_penintegerAway team penalty shoot-out score
Example: 0away_positionnullnullableAway team rank
away_redintegerAway team red cards
Example: 0away_scoreintegerAway team score (regular time, including stoppage time)
Example: 3away_scoresintegerScore field · example: [1, 0, 0, 0, -1, 0, 0]
Example: 1away_teamstringAway team name (English)
Example: "KRC Genk U19"away_team_idintegerAway team id
Example: 4away_yellowintegerAway team yellow cards
Example: 3away_zhstringAway team Chinese name
Example: "亨克U19"comp_logostringCompetition logo (image address on this platform)
comp_refnullnullableCompetition id within the source
competition_idintegerCompetition id
Example: 3coveragenullnullableAnimation, intelligence and lineup fields
cur_period_startintegerStart of the current period (Unix seconds)
Example: 1793714739endednullnullableEnd time (returned when there is data)
environmentnullnullableMatch environment; present only when there is data
fourthnullnullableFourth official
gcidintegerPlatform competition id
Example: 3gmidintegerPlatform match id (gmid, unique across the platform)
Example: 1group_numnullnullableGroup number: 1 = A, 2 = B and so on
half_awayintegerAway team half-time score
Example: 1half_homeintegerHome team half-time score
Example: 2has_otnullnullableWent to extra time: 1 yes (returned when there is data)
home_cornerintegerHome team corners
Example: 0home_gtidintegerPlatform team id of the home team
Example: 3home_logostringHome team logo (image address on this platform; empty when there is none)
home_otnullnullableHome team extra-time score
home_penintegerHome team penalty shoot-out score
Example: 0home_positionnullnullableHome team rank
home_redintegerHome team red cards
Example: 2home_scoreintegerHome team score (regular time, including stoppage time)
Example: 4home_scoresintegerScore field · example: [1, 0, 0, 0, -1, 0, 0]
Example: 2home_teamstringHome team name (English)
Example: "Red Bull Salzburg U19"home_team_idintegerHome team id
Example: 3home_yellowintegerHome team yellow cards
Example: 2home_zhstringHome team Chinese name
Example: "萨尔茨堡U19"humiditynullnullableHumidity
idintegerRecord id; paging cursor (the id parameter returns records >= this value). In match endpoints it is the platform match id (gmid)
Example: 1intelligencenullnullableHas intelligence: 1 yes, 0 no
leaguestringCompetition name (English)
Example: "UEFA Youth League"league_zhstringCompetition Chinese name
Example: "欧青联 第二圈 次回合"limitnullnullableMaximum number of rows in this response
lineupnullnullableHas lineups: 1 yes, 0 no
lossnullnullableAwarded as a forfeit: 1 yes (returned when there is data)
match_timestringKick-off time (UTC, ISO 8601)
Example: "2026-11-03T13:00:00Z"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)
minutestringnullableMatch minute
Example: "Ended"mlivenullnullableHas animation: 1 yes, 0 no
neutralnullnullableNeutral venue: 1 yes, 0 no
notenullnullableRemark
period_initialintegerMinute at which the current period starts
Example: 2700pressurenullnullableAir pressure
querynullnullableQuery info (paging cursor, totals)
referee_idnullnullableReferee id
refereesnullnullableReferee team; present only when there is data
related_idnullnullableMatch id of the other leg of a two-legged tie
roundnullnullableRound
round_numnullnullableRound number
season_idnullnullableSeason id
sourcestringSource code (S1, S2…)
Example: "merged"sourcesstringSource codes of this merged record (comma separated)
Example: "S5,S9,S4,S3,S2,S8"stage_idnullnullableStage id
start_tsstringKick-off time (UTC, ISO 8601)
Example: "2026-11-03T13:00:00Z"status_codeintegerStatus code
Example: 8status_idintegerMatch status code (see the status and type code table)
Example: 8status_typestringMatch status: notstarted / inprogress / finished and others
Example: "finished"tbdnullnullableKick-off time to be confirmed: 1 yes (returned when there is data)
team_reversenullnullableHome and away reversed: 1 yes (returned when there is data; e.g. the official site lists A vs B and this platform lists B vs A)
temperaturenullnullableTemperature
timenullnullableTime / minute
typenullnullableType
updated_atintegerLast update time (UTC, ISO 8601; incremental sync with the time parameter goes by it)
Example: 1794107207241varnullnullableVAR referee
venue_idnullnullableVenue id
weathernullnullableWeather id · 1: partly cloudy · 2: cloudy · 3: partly cloudy / rain · 4: snow · 5: sunny · 6: overcast with rain / thunderstorms in places · 7: overcast · 8: mist · 9: overcast with rain · 10: cloudy with rain · 11: cloudy with rain / thunderstorms in places · 12: partly cloudy / rain and thunderstorms · 13: fog
windnullnullableWind speed
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 |