CS2 Odds API
Prediction-market prices for Counter-Strike 2 matches as decimal odds: the series winner and every map, refreshed every minute while a match is live and every 15 minutes before it, plus the full line movement. Each quote says whether its market is open, suspended (a decided map) or closed. A market is attached to a match only when both teams match and it starts within 6 hours of the market's start time, and every link is re-checked against the current match every 15 minutes, so a rescheduled or re-paired match never keeps another match's odds. Odds are included on Pro and above.
2 endpoints in this section. Authenticate with the x-api-key header; every response is { success, data, meta }. Other sections: Live, Player props, Matches, Maps & rounds, Rankings, Teams, Players, Events, Stats & leaderboards, Skins, Transfers, Search & reference.
Match odds
Current prediction-market prices for a match as decimal odds per team: the series winner (`market: "h2h"`) and each map (`"map_h2h_1"`, `"map_h2h_2"`, ...). `team1Odds` / `team2Odds` follow the match's `team1` / `team2`. `provider` is the market the price comes from (`polymarket`). **Freshness.** Live matches are refreshed every minute; upcoming matches every 15 minutes. `capturedAt` is the time of the price. **Market status.** `marketStatus` is `open` while the market is trading; `suspended` once its price is near-certain (a decided map), showing the last tradable quote; `closed` when the market is no longer listed. **Pricing.** Decimal odds are 1 / implied probability (2.00 = 50%), with no bookmaker margin added. Only matches the market lists have odds; others return `dataAvailable: false`. **Match id.** Use the `matchId` from `/cs2/live` or `/cs2/matches/upcoming`, or the two team names as `team1-vs-team2` (`/cs2/matches/vitality-vs-mouz/odds`, either order): the live match wins, else the one nearest in time. **Plans.** Odds are included on Pro and above.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
| limit | integer | Rows to return. Maximum 200; larger values are reduced to 200. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/odds" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_match_odds",
"matchId": "cs2-match-2399722",
"teams": {
"team1Name": "MOUZ",
"team2Name": "Liquid"
},
"eventName": "PGL Masters Bucharest 2026",
"dataAvailable": true,
"odds": [
{
"oddsKey": "polymarket:5774511",
"matchId": "cs2-match-2399722",
"provider": "polymarket",
"market": "h2h",
"team1Odds": 3.27,
"team2Odds": 1.44,
"drawOdds": null,
"team1ImpliedProb": 0.3058,
"team2ImpliedProb": 0.6944,
"liquidityUsd": null,
"volumeUsd": null,
"volume24hUsd": null,
"bestBid": null,
"bestAsk": null,
"spread": null,
"marketStatus": "closed",
"capturedAt": "2026-10-24T12:33:05.329Z"
},
{
"oddsKey": "polymarket:5774510",
"matchId": "cs2-match-2399722",
"provider": "polymarket",
"market": "map_h2h_2",
"team1Odds": 6.06,
"team2Odds": 1.2,
"drawOdds": null,
"team1ImpliedProb": 0.165,
"team2ImpliedProb": 0.8333,
"liquidityUsd": null,
"volumeUsd": null,
"volume24hUsd": null,
"bestBid": null,
"bestAsk": null,
"spread": null,
"marketStatus": "closed",
"capturedAt": "2026-10-24T11:31:05.402Z"
}
]
},
"meta": {
"count": 2,
"dataAvailable": true,
"limit": 2,
"total": 2,
"page": 1,
"totalPages": 1,
"hasNext": false,
"hasPrev": false
}
}Match odds history
Line movement for a match: one row each time a market's price changed, oldest first (opening, pre-match and live prices through to the last tradable quote). Filter one market with `market` (`h2h`, `map_h2h_1`, ...). Same fields as `/cs2/matches/{matchId}/odds`. Odds are included on Pro and above.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
| limit | integer | Rows to return. Maximum 2000; larger values are reduced to 2000. |
| market | string | One odds market: h2h (series winner) or map_h2h_1, map_h2h_2, ... (map winner). |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/odds/history" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_match_odds_history",
"matchId": "cs2-match-2399722",
"teams": {
"team1Name": "MOUZ",
"team2Name": "Liquid"
},
"eventName": "PGL Masters Bucharest 2026",
"dataAvailable": true,
"history": [
{
"oddsKey": "polymarket:5774511",
"matchId": "cs2-match-2399722",
"provider": "polymarket",
"market": "h2h",
"team1Odds": 1.25,
"team2Odds": 5,
"capturedAt": "2026-10-16T17:54:35.562Z"
},
{
"oddsKey": "polymarket:5774509",
"matchId": "cs2-match-2399722",
"provider": "polymarket",
"market": "map_h2h_1",
"team1Odds": 2.04,
"team2Odds": 1.96,
"capturedAt": "2026-10-16T17:54:35.562Z"
}
]
},
"meta": {
"count": 2,
"dataAvailable": true,
"limit": 2,
"total": 2,
"page": 1,
"totalPages": 1,
"hasNext": false,
"hasPrev": false
}
}Try the CS2 Odds API
Run a real request with your key, then wire the same call into your app. The free plan includes 500 requests a month.
curl "https://api.citoapi.com/api/v1/cs2/matches/cs2-match-2399722/odds" \
-H "x-api-key: YOUR_API_KEY"