Description
Returns statistics for matches in the next 30 days that have not started (head-to-head, recent form, historical same-odds), with incremental updates by timestamp.
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).
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/compensation/list- 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 100, maximum 100 |
Example request
curl "https://api.sports.csap.ai/api/v1/matches/compensation/list?limit=2" \ -H "X-API-Key: YOUR_API_KEY"
Try it
Example response
{
"code": 0,
"data": [
{
"analysis": null,
"away": null,
"away_pct": 0,
"away_score": null,
"away_team_id": null,
"away_win": 0,
"begin_odds": null,
"companies": null,
"competition_id": null,
"competitions": null,
"draw": 6,
"draw_pct": 33.3,
"draw_rate": null,
"drawn_count": null,
"europe": null,
"history": null,
"home": null,
"home_pct": 66.7,
"home_score": null,
"home_team_id": null,
"home_win": 12,
"id": 2532,
"immediate_odds": null,
"limit": null,
"loss": null,
"loss_rate": null,
"lost_count": null,
"match_time": null,
"matches": null,
"max_id": null,
"max_time": null,
"min_id": null,
"min_time": null,
"name": null,
"odds": null,
"odds_a_bucket": 3.7,
"odds_d_bucket": 3.6,
"odds_h_bucket": 2,
"query": null,
"rate": null,
"recent": null,
"samples": 18,
"similar": null,
"teams": null,
"time": null,
"type": null,
"updated_at": 1794215703277,
"win_rate": null,
"won": null,
"won_count": null
},
{
"analysis": null,
"away": null,
"away_pct": 0,
"away_score": null,
"away_team_id": null,
"away_win": 0,
"begin_odds": null,
"companies": null,
"competition_id": null,
"competitions": null,
"draw": 8,
"draw_pct": 80,
"draw_rate": null,
"drawn_count": null,
"europe": null,
"history": null,
"home": null,
"home_pct": 20,
"home_score": null,
"home_team_id": null,
"home_win": 2,
"id": 2533,
"immediate_odds": null,
"limit": null,
"loss": null,
"loss_rate": null,
"lost_count": null,
"match_time": null,
"matches": null,
"max_id": null,
"max_time": null,
"min_id": null,
"min_time": null,
"name": null,
"odds": null,
"odds_a_bucket": 4.2,
"odds_d_bucket": 3.9,
"odds_h_bucket": 1.8,
"query": null,
"rate": null,
"recent": null,
"samples": 10,
"similar": null,
"teams": null,
"time": null,
"type": null,
"updated_at": 1794215703277,
"win_rate": null,
"won": null,
"won_count": null
}
],
"message": "success",
"success": true
}Response fields 50
analysisnullnullableWin / draw / loss probability
awaynullnullableAway team
away_pctintegerAway win ratio
Example: 0away_scorenullnullableAway team score (regular time, including stoppage time)
away_team_idnullnullableAway team id
away_winintegerAway wins
Example: 0begin_oddsnullnullable1X2 odds, opening line · example: [2.1, 3.4, 3.1]
companiesnullnullableBookmaker item
competition_idnullnullableCompetition id
competitionsnullnullableCompetition item
drawintegerDraws
Example: 6draw_pctnumberDraw ratio
Example: 33.3draw_ratenullnullableDraw rate
drawn_countnullnullableDraws
europenullnullableFixtures with the same odds (1X2)
historynullnullableHead-to-head
homenullnullableHome team
home_pctnumberHome win ratio
Example: 66.7home_scorenullnullableHome team score (regular time, including stoppage time)
home_team_idnullnullableHome team id
home_winintegerHome wins
Example: 12idintegerRecord id; paging cursor (the id parameter returns records >= this value). In match endpoints it is the platform match id (gmid)
Example: 2532immediate_oddsnullnullable1X2 odds, last pre-match line · example: [2.1, 3.4, 3.1]
limitnullnullableMaximum number of rows in this response
lossnullnullableLosses
loss_ratenullnullableLoss rate
lost_countnullnullableLosses
match_timenullnullableKick-off time (UTC, ISO 8601)
matchesnullnullableMatches
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)
namenullnullableName
oddsnullnullable1X2 opening odds · example: [2.1, 3.4, 3.1]
odds_a_bucketnumber
Example: 3.7odds_d_bucketnumber
Example: 3.6odds_h_bucketnumber
Example: 2querynullnullableQuery info (paging cursor, totals)
ratenullnullableWin rate
recentnullnullableRecent form
samplesinteger
Example: 18similarnullnullableHistorical same-odds
teamsnullnullableTeam item
timenullnullableTime / minute
typenullnullableType
updated_atintegerLast update time (UTC, ISO 8601; incremental sync with the time parameter goes by it)
Example: 1794215703277win_ratenullnullableWin rate
wonnullnullableWins
won_countnullnullableWins
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 |