Docs/CS2 API/CS2 Odds API

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

GET/api/v1/cs2/matches/{matchId}/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

ParameterTypeDescription
matchId (path)*stringMatch id, e.g. cs2-match-2398421.
limitintegerRows to return. Maximum 200; larger values are reduced to 200.

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/odds" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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

GET/api/v1/cs2/matches/{matchId}/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

ParameterTypeDescription
matchId (path)*stringMatch id, e.g. cs2-match-2398421.
limitintegerRows to return. Maximum 2000; larger values are reduced to 2000.
marketstringOne odds market: h2h (series winner) or map_h2h_1, map_h2h_2, ... (map winner).

Example

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/odds/history" \
  -H "x-api-key: YOUR_API_KEY"

Response

json
{
  "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.

bash
curl "https://api.citoapi.com/api/v1/cs2/matches/cs2-match-2399722/odds" \
  -H "x-api-key: YOUR_API_KEY"