Access
- Request
GET https://api.sports.csap.ai/api/v1/matches/odds/by-match- 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 2
| Parameter | Type | required | Example | Description |
|---|---|---|---|---|
| id | integer | required | 5179 | Platform match id (gmid, required) |
| limit | integer | optional | 2 | Number of rows |
Example request
curl "https://api.sports.csap.ai/api/v1/matches/odds/by-match?id=5179&limit=2" \ -H "X-API-Key: YOUR_API_KEY"
Try it
Example response
{
"code": 0,
"data": [
{
"ah_away": 0.5,
"ah_home": 1.81,
"ah_line": 1,
"corner_line": null,
"corner_over": null,
"corner_under": null,
"eu_away": null,
"eu_draw": null,
"eu_home": null,
"match_source": "S5",
"open_ah_line": null,
"open_ou_line": null,
"ou_line": 3,
"ou_over": 0.89,
"ou_under": 0.81,
"updated_at": "2026-11-07T17:58:13.307928Z"
},
{
"ah_away": 0.75,
"ah_home": 1.05,
"ah_line": 0.25,
"corner_line": null,
"corner_over": null,
"corner_under": null,
"eu_away": 2.62,
"eu_draw": 3.4,
"eu_home": 2.25,
"match_source": "S3",
"open_ah_line": null,
"open_ou_line": null,
"ou_line": 2.75,
"ou_over": 0.9,
"ou_under": 0.9,
"updated_at": "2026-11-03T16:46:12.225327Z"
}
],
"message": "success",
"success": true
}Response fields 17
ah_awaynumberAsian handicap, away price
Example: 0.5ah_homenumberAsian handicap, home price
Example: 1.81ah_lineintegerAsian handicap line
Example: 1corner_linenullnullableCorners line
corner_overnullnullableCorners over price
corner_undernullnullableCorners under price
eu_awaynumbernullable1X2 away win
Example: 2.62eu_drawnumbernullable1X2 draw
Example: 3.4eu_homenumbernullable1X2 home win
Example: 2.25match_sourcestringSource code of this row
Example: "S5"gmidintegernullablePlatform match id (gmid, unique across the platform)
open_ah_linenullnullableOpening Asian handicap line
open_ou_linenullnullableOpening over/under line
ou_lineintegerOver/under line
Example: 3ou_overnumberOver price
Example: 0.89ou_undernumberUnder price
Example: 0.81updated_atstringLast update time (UTC, ISO 8601; incremental sync with the time parameter goes by it)
Example: "2026-11-07T17:58:13.307928Z"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 |