Description
Returns the momentum of a match for both teams
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)
Limit: matches of the previous 30 days
Request rate: 120/min
Notes:
Momentum for live matches comes from the live momentum endpoint
Use this endpoint to fill gaps when something was missed
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)
Limit: matches of the previous 30 days
Request rate: 120/min
Notes:
Momentum for live matches comes from the live momentum endpoint
Use this endpoint to fill gaps when something was missed
Access
- Request
GET https://api.sports.csap.ai/api/v1/matches/trend/detail- 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 1
| Parameter | Type | required | Example | Description |
|---|---|---|---|---|
| id | integer | required | 5179 | Match id |
Example request
curl "https://api.sports.csap.ai/api/v1/matches/trend/detail?id=5179" \ -H "X-API-Key: YOUR_API_KEY"
Try it
Example response
{
"code": 0,
"data": [
{
"count": null,
"data": null,
"incidents": null,
"match_source": "S2",
"minute": 1,
"per": null,
"position": null,
"time": null,
"type": null,
"updated_at": 1793717687292,
"value": 1
},
{
"count": null,
"data": null,
"incidents": null,
"match_source": "S2",
"minute": 2,
"per": null,
"position": null,
"time": null,
"type": null,
"updated_at": 1793717687293,
"value": 14
}
],
"message": "success",
"success": true
}Response fields 12
countnullnullableCount
datanullnullableMomentum changes by minute · example: [[16, 0, -2], [-16, 0, 1]]
incidentsnullnullableEvent list
match_sourcestringSource code of this row
Example: "S2"gmidintegernullablePlatform match id (gmid, unique across the platform)
minuteintegerMatch minute
Example: 1pernullnullableLength of a half
positionnullnullablePosition
timenullnullableTime / minute
typenullnullableType
updated_atintegerLast update time (UTC, ISO 8601; incremental sync with the time parameter goes by it)
Example: 1793717687292valueintegerValue
Example: 1Errors
| 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 |