← Back to API docs

GET/api/v1/matches/recent

List changed matches
Realtime data packageactivebetacoreAvailable (scoped)

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).

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

ParameterTyperequiredExampleDescription
idintegeroptional5179Records 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/matches/recent?limit=2" \
  -H "X-API-Key: YOUR_API_KEY"

Try it

Example response

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

{
  "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 cornersExample: 0
away_gtidintegerPlatform team id of the away teamExample: 4
away_logostringAway team logo (image address on this platform)
away_otnullnullableAway team extra-time score
away_penintegerAway team penalty shoot-out scoreExample: 0
away_positionnullnullableAway team rank
away_redintegerAway team red cardsExample: 0
away_scoreintegerAway team score (regular time, including stoppage time)Example: 3
away_scoresintegerScore field · example: [1, 0, 0, 0, -1, 0, 0]Example: 1
away_teamstringAway team name (English)Example: "KRC Genk U19"
away_team_idintegerAway team idExample: 4
away_yellowintegerAway team yellow cardsExample: 3
away_zhstringAway team Chinese nameExample: "亨克U19"
comp_logostringCompetition logo (image address on this platform)
comp_refnullnullableCompetition id within the source
competition_idintegerCompetition idExample: 3
coveragenullnullableAnimation, intelligence and lineup fields
cur_period_startintegerStart of the current period (Unix seconds)Example: 1793714739
endednullnullableEnd time (returned when there is data)
environmentnullnullableMatch environment; present only when there is data
fourthnullnullableFourth official
gcidintegerPlatform competition idExample: 3
gmidintegerPlatform match id (gmid, unique across the platform)Example: 1
group_numnullnullableGroup number: 1 = A, 2 = B and so on
half_awayintegerAway team half-time scoreExample: 1
half_homeintegerHome team half-time scoreExample: 2
has_otnullnullableWent to extra time: 1 yes (returned when there is data)
home_cornerintegerHome team cornersExample: 0
home_gtidintegerPlatform team id of the home teamExample: 3
home_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 scoreExample: 0
home_positionnullnullableHome team rank
home_redintegerHome team red cardsExample: 2
home_scoreintegerHome team score (regular time, including stoppage time)Example: 4
home_scoresintegerScore field · example: [1, 0, 0, 0, -1, 0, 0]Example: 2
home_teamstringHome team name (English)Example: "Red Bull Salzburg U19"
home_team_idintegerHome team idExample: 3
home_yellowintegerHome team yellow cardsExample: 2
home_zhstringHome team Chinese nameExample: "萨尔茨堡U19"
humiditynullnullableHumidity
idintegerRecord id; paging cursor (the id parameter returns records >= this value). In match endpoints it is the platform match id (gmid)Example: 1
intelligencenullnullableHas intelligence: 1 yes, 0 no
leaguestringCompetition name (English)Example: "UEFA Youth League"
league_zhstringCompetition Chinese nameExample: "欧青联 第二圈 次回合"
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 minuteExample: "Ended"
mlivenullnullableHas animation: 1 yes, 0 no
neutralnullnullableNeutral venue: 1 yes, 0 no
notenullnullableRemark
period_initialintegerMinute at which the current period startsExample: 2700
pressurenullnullableAir 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 codeExample: 8
status_idintegerMatch status code (see the status and type code table)Example: 8
status_typestringMatch status: notstarted / inprogress / finished and othersExample: "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: 1794107207241
varnullnullableVAR 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

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