← Back to API docs

GET/api/v1/matches/compensation/detail

Get a match's historical same-odds data
World Cup packageactivebetacoreAvailable (scoped)

Description

Returns the historical same-odds data for the given match id (suggested rate: up to 60 requests/min)

Access

Request
GET https://api.sports.csap.ai/api/v1/matches/compensation/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

ParameterTyperequiredExampleDescription
idsstringrequiredSeveral ids, comma separated, 200 at most

Example request

curl "https://api.sports.csap.ai/api/v1/matches/compensation/detail" \
  -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, 1000 rows, 361 ms (data cut to 2 rows)

{
  "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,
      "loss": null,
      "loss_rate": null,
      "lost_count": null,
      "match_time": null,
      "matches": null,
      "name": null,
      "odds": null,
      "odds_a_bucket": 3.7,
      "odds_d_bucket": 3.6,
      "odds_h_bucket": 2,
      "rate": null,
      "recent": null,
      "samples": 18,
      "similar": null,
      "teams": 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,
      "loss": null,
      "loss_rate": null,
      "lost_count": null,
      "match_time": null,
      "matches": null,
      "name": null,
      "odds": null,
      "odds_a_bucket": 4.2,
      "odds_d_bucket": 3.9,
      "odds_h_bucket": 1.8,
      "rate": null,
      "recent": null,
      "samples": 10,
      "similar": null,
      "teams": null,
      "updated_at": 1794215703277,
      "win_rate": null,
      "won": null,
      "won_count": null
    }
  ],
  "message": "success",
  "success": true
}

Response fields 42

analysisnullnullableWin / draw / loss probability
awaynullnullableAway team
away_pctintegerAway win ratioExample: 0
away_scorenullnullableAway team score (regular time, including stoppage time)
away_team_idnullnullableAway team id
away_winintegerAway winsExample: 0
begin_oddsnullnullable1X2 odds, opening line · example: [2.1, 3.4, 3.1]
companiesnullnullableBookmaker item
competition_idnullnullableCompetition id
competitionsnullnullableCompetition item
drawintegerDrawsExample: 6
draw_pctnumberDraw ratioExample: 33.3
draw_ratenullnullableDraw rate
drawn_countnullnullableDraws
europenullnullableFixtures with the same odds (1X2)
historynullnullableHead-to-head
homenullnullableHome team
home_pctnumberHome win ratioExample: 66.7
home_scorenullnullableHome team score (regular time, including stoppage time)
home_team_idnullnullableHome team id
home_winintegerHome winsExample: 12
idintegerRecord id; paging cursor (the id parameter returns records >= this value). In match endpoints it is the platform match id (gmid)Example: 2532
immediate_oddsnullnullable1X2 odds, last pre-match line · example: [2.1, 3.4, 3.1]
lossnullnullableLosses
loss_ratenullnullableLoss rate
lost_countnullnullableLosses
match_timenullnullableKick-off time (UTC, ISO 8601)
matchesnullnullableMatches
namenullnullableName
oddsnullnullable1X2 opening odds · example: [2.1, 3.4, 3.1]
odds_a_bucketnumberExample: 3.7
odds_d_bucketnumberExample: 3.6
odds_h_bucketnumberExample: 2
ratenullnullableWin rate
recentnullnullableRecent form
samplesintegerExample: 18
similarnullnullableHistorical same-odds
teamsnullnullableTeam item
updated_atintegerLast update time (UTC, ISO 8601; incremental sync with the time parameter goes by it)Example: 1794215703277
win_ratenullnullableWin rate
wonnullnullableWins
won_countnullnullableWins

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