Description
Returns match events, match statistics, text commentary and momentum for the last 120 minutes (full update)
ps: matches outside the 120 minutes are returned as well when their data changes
Suggested frequency: once every 2 seconds
Match minute formula
First half: minute = (now - first-half kick-off timestamp) / 60 + 1
Second half: minute = (now - second-half kick-off timestamp) / 60 + 45 + 1
Extra time: minute = (now - extra-time kick-off timestamp) / 60 + 90 + 1
stats: match statistics
Includes: corners, yellow cards, red cards, penalties, shots on target, shots off target, attacks, dangerous attacks, possession, shots blocked
incidents: match events
Includes: yellow card, second yellow card, red card, goal (assist), substitution, penalty, missed penalty, own goal, VAR, half-time, stoppage time, full-time, end of extra time, end of penalty shoot-out, drinks break
tlive: text commentary
Includes: yellow card, red card, goal, substitution, corner, offside, assist, kick-off, half-time, full-time and others
trend: momentum
Positive for the home team, negative for the away team, by minute (when there is extra time, its minutes are appended to the second half)
ps: matches outside the 120 minutes are returned as well when their data changes
Suggested frequency: once every 2 seconds
Match minute formula
First half: minute = (now - first-half kick-off timestamp) / 60 + 1
Second half: minute = (now - second-half kick-off timestamp) / 60 + 45 + 1
Extra time: minute = (now - extra-time kick-off timestamp) / 60 + 90 + 1
stats: match statistics
Includes: corners, yellow cards, red cards, penalties, shots on target, shots off target, attacks, dangerous attacks, possession, shots blocked
incidents: match events
Includes: yellow card, second yellow card, red card, goal (assist), substitution, penalty, missed penalty, own goal, VAR, half-time, stoppage time, full-time, end of extra time, end of penalty shoot-out, drinks break
tlive: text commentary
Includes: yellow card, red card, goal, substitution, corner, offside, assist, kick-off, half-time, full-time and others
trend: momentum
Positive for the home team, negative for the away team, by minute (when there is extra time, its minutes are appended to the second half)
Access
- Request
GET https://api.sports.csap.ai/api/v1/matches/detail/live- 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 0
This endpoint takes no request parameters.
Example request
curl "https://api.sports.csap.ai/api/v1/matches/detail/live" \ -H "X-API-Key: YOUR_API_KEY"
Try it
Example response
{
"code": 0,
"data": [
{
"id": 6905,
"incidents": [],
"score": [
6905,
4,
[
0,
0,
0
]
],
"stats": [],
"tlive": [
{
"add_time": null,
"data": "比赛开始",
"incident_type": "match_started",
"main": 1,
"player_in": null,
"player_name": null,
"player_out": null,
"position": 0,
"time": "0",
"type": 40
},
{
"add_time": null,
"data": "上半场结束,弗兰德诺维 0-0 埃斯兰沙尔",
"incident_type": "halftime",
"main": 1,
"player_in": null,
"player_name": null,
"player_out": null,
"position": 0,
"time": "45",
"type": 41
},
{
"add_time": null,
"data": "下半场开始",
"incident_type": "second_half",
"main": 1,
"player_in": null,
"player_name": null,
"player_out": null,
"position": 0,
"time": "46",
"type": 66
}
]
},
{
"id": 6999,
"incidents": [
{
"position": 1,
"time": 29,
"type": 1
},
{
"position": 2,
"time": 32,
"type": 1
},
{
"position": 2,
"time": 42,
"type": 20
}
],
"score": [
6999,
4,
[
1,
1,
0
]
],
"stats": [
{
"away": 3,
"home": 2,
"type": 2
},
{
"away": 2,
"home": 2,
"type": 3
},
{
"away": 0,
"home": 0,
"type": 4
}
],
"tlive": [
{
"add_time": null,
"data": "比赛开始",
"incident_type": "match_started",
"main": 1,
"player_in": null,
"player_name": null,
"player_out": null,
"position": 0,
"time": "0",
"type": 40
},
{
"add_time": null,
"data": "24' KF雷普卡U19 第 1 个角球",
"incident_type": "corner_kick",
"main": 0,
"player_in": null,
"player_name": null,
"player_out": null,
"position": 1,
"time": "24",
"type": 6
},
{
"add_time": null,
"data": "29' 进球! KF雷普卡U19",
"incident_type": "goal",
"main": 1,
"player_in": null,
"player_name": null,
"player_out": null,
"position": 1,
"time": "29",
"type": 1
}
]
}
],
"message": "success",
"success": true
}Response fields 5
idintegerRecord id; paging cursor (the id parameter returns records >= this value). In match endpoints it is the platform match id (gmid)
Example: 6905incidentsarrayMatch events; may be absent
scorearrayScore
statsarrayStatistic item
tlivearray<object>Text commentary; may be absent· 10
Errors
| HTTP | message | When |
|---|---|---|
| 401 | missing API key / unauthorized | No X-API-Key, or the key is invalid or disabled |
| 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 |