CS2 Player Props API
Pick'em player prop lines for Counter-Strike 2 from Underdog Fantasy and Sleeper, refreshed every 5 minutes: kills and headshots on maps 1-2. Each line is linked to the match and player ids used everywhere else in the API, shows every app side by side with the spread between them, and is graded against the player's last 5 and 10 series from our own map stats. Underdog prices both sides as odds; Sleeper pays a multiplier per pick, returned as a multiplier. Player props are included on Pro and above.
3 endpoints in this section. Authenticate with the x-api-key header; every response is { success, data, meta }. Other sections: Live, Odds, Matches, Maps & rounds, Rankings, Teams, Players, Events, Stats & leaderboards, Skins, Transfers, Search & reference.
Player props
Current pick'em player prop lines for CS2 from Underdog Fantasy (`provider: "underdog"`) and Sleeper (`"sleeper"`), refreshed every 5 minutes: kills and headshots on maps 1-2 (`market`: `kills_maps_1_2`, `headshots_maps_1_2`; `kills_map_1` and `kills_maps_1_3` when a provider posts them). **Each line.** `line`, and `over` / `under` with `decimal`, `american` and `multiplier`. Underdog prices each side as odds (`decimal`, `american`). Sleeper pays a multiplier per pick (`multiplier`, e.g. 1.74), which is not bookmaker odds, so its `decimal` and `american` are null. `player`, `team`, `opponentName`, `matchId` and `startsAt` link the line to Cito's ids; an id is null until the match or player is matched. **Status.** `active` lines are open on the app. A line that leaves the app's board (usually when the match starts) becomes `closed` with its last value kept; `status=all` includes closed lines. **Grading.** `grading` compares the line with the player's own recent series from Cito's stats: `l5Avg` / `l10Avg` (average total on those maps), `l5OverRate` / `l10OverRate` (share of the last 5 / 10 series that went over this exact line; equal to the line is not over), `seriesCounted` and `recentSeries`. `null` when the player has no linked stats. `providerRecent` is the provider's own recent results, as sent (Sleeper). **Line movement.** `include_history=true` adds `history[]`: one row each time the line or a price changed, oldest first. **Plans.** Player props are odds: included on Pro and above, and every new account gets a 3-day odds trial. These routes are equivalent; use whichever reads best.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| includeHistory | string | Filter by includeHistory. |
| include_history | string | true adds history[] (line movement) to each line. |
| limit | integer | Rows to return. Maximum 500; larger values are reduced to 500. |
| market | string | Comma-separated markets: kills_maps_1_2, headshots_maps_1_2, kills_map_1, kills_maps_1_3. |
| matchId | string | Match id. |
| match_id | string | Only this match (match id or team1-vs-team2). |
| offset | integer | Rows to skip, for paging. |
| player | string | Player handle (ZywOo) or player id. |
| provider | string | Comma-separated providers: underdog, sleeper. |
| status | string | all includes closed lines (default: open lines only). |
Example
curl "https://api.citoapi.com/api/v1/cs2/props" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_player_props",
"providers": [
"underdog",
"sleeper"
],
"props": [
{
"provider": "sleeper",
"market": "headshots_maps_1_2",
"lineType": "normal",
"line": 15.5,
"over": {
"decimal": null,
"american": null,
"multiplier": 1.85
},
"under": {
"decimal": null,
"american": null,
"multiplier": 1.72
},
"status": "active",
"pickPopularity": 0.4966,
"player": {
"id": "cs2-player-21854",
"ign": "Forleks",
"fullName": "Marvin Tran"
},
"team": {
"id": "cs2-team-13686",
"name": "Abyssal"
},
"opponentName": "Rooster",
"matchId": "cs2-match-2399891",
"matchTitle": "Rooster v Abyssal",
"startsAt": "2026-10-27T03:00:00.000Z",
"grading": {
"mapNumbers": [
1,
2
],
"stat": "headshots",
"l5Avg": 11.4,
"l10Avg": 14.4,
"l5OverRate": 0,
"l10OverRate": 0.4,
"seriesCounted": 10,
"recentSeries": [
{
"…": "…"
},
{
"…": "…"
}
]
},
"providerRecent": [
{
"date": "2026-09-23",
"value": 18,
"opponent": "Ground Zero"
},
{
"date": "2026-10-15",
"value": 15,
"opponent": "Ground Zero"
}
],
"firstSeenAt": "2026-10-26T22:01:59.671Z",
"updatedAt": "2026-10-26T22:55:13.009Z",
"closedAt": null
},
{
"provider": "sleeper",
"market": "kills_maps_1_2",
"lineType": "normal",
"line": 28.5,
"over": {
"decimal": null,
"american": null,
"multiplier": 1.81
},
"under": {
"decimal": null,
"american": null,
"multiplier": 1.75
},
"status": "active",
"pickPopularity": 0.331,
"player": {
"id": "cs2-player-21854",
"ign": "Forleks",
"fullName": "Marvin Tran"
},
"team": {
"id": "cs2-team-13686",
"name": "Abyssal"
},
"opponentName": "Rooster",
"matchId": "cs2-match-2399891",
"matchTitle": "Rooster v Abyssal",
"startsAt": "2026-10-27T03:00:00.000Z",
"grading": {
"mapNumbers": [
1,
2
],
"stat": "kills",
"l5Avg": 21.8,
"l10Avg": 26.6,
"l5OverRate": 0.2,
"l10OverRate": 0.4,
"seriesCounted": 10,
"recentSeries": [
{
"…": "…"
},
{
"…": "…"
}
]
},
"providerRecent": [
{
"date": "2026-09-23",
"value": 33,
"opponent": "Ground Zero"
},
{
"date": "2026-10-15",
"value": 26,
"opponent": "Ground Zero"
}
],
"firstSeenAt": "2026-10-26T22:01:59.755Z",
"updatedAt": "2026-10-26T22:55:13.037Z",
"closedAt": null
}
]
},
"meta": {
"count": 2,
"total": 488,
"limit": 2,
"hasMore":
…Match player props
Every pick'em line for one match, grouped by player and market with each provider side by side: `players[]` -> `markets[]` -> `books[]`. `lineSpread` is the highest line minus the lowest across providers, and `lowestLine` / `highestLine` name the provider, for line shopping. `grading` is the player's L5/L10 record against the line (see `/cs2/props`). The match id also accepts `team1-vs-team2` (`/cs2/matches/vitality-vs-natus-vincere/props`). `status=all` includes closed lines. Included on Pro and above.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| matchId (path)* | string | Match id, e.g. cs2-match-2398421. |
| includeHistory | string | Filter by includeHistory. |
| include_history | string | true adds history[] (line movement) to each line. |
| status | string | all includes closed lines. |
Example
curl "https://api.citoapi.com/api/v1/cs2/matches/MATCH_ID/props" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_match_player_props",
"matchId": "cs2-match-2399747",
"teams": {
"team1Name": "Vitality",
"team2Name": "Natus Vincere"
},
"eventName": "PGL Masters Bucharest 2026",
"dataAvailable": true,
"players": [
{
"player": {
"id": "cs2-player-9816",
"ign": "Aleksib",
"fullName": null
},
"team": {
"id": "cs2-team-4608",
"name": "Natus Vincere"
},
"markets": [
{
"market": "headshots_maps_1_2",
"books": [
"…"
],
"lineSpread": 0,
"lowestLine": "underdog",
"highestLine": "underdog",
"grading": {
"…": "…"
}
},
{
"market": "kills_maps_1_2",
"books": [
"…"
],
"lineSpread": 0,
"lowestLine": "underdog",
"highestLine": "underdog",
"grading": {
"…": "…"
}
}
]
},
{
"player": {
"id": "cs2-player-18987",
"ign": "B1t",
"fullName": null
},
"team": {
"id": "cs2-team-4608",
"name": "Natus Vincere"
},
"markets": [
{
"market": "headshots_maps_1_2",
"books": [
"…"
],
"lineSpread": 0,
"lowestLine": "underdog",
"highestLine": "underdog",
"grading": {
"…": "…"
}
},
{
"market": "kills_maps_1_2",
"books": [
"…"
],
"lineSpread": 0,
"lowestLine": "underdog",
"highestLine": "underdog",
"grading": {
"…": "…"
}
}
]
}
]
},
"meta": {
"count": 20,
"players": 10,
"dataAvailable": true,
"limit": 20,
"total": 20,
"page": 1,
"totalPages": 1,
"hasNext": false,
"hasPrev": false
}
}Player props for a player
One player's open pick'em lines with L5/L10 grading, plus `recentSeries`: the player's last 10 series with the total for each prop market. Included on Pro and above.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| playerIdOrSlug (path)* | string | Player id (cs2-player-11893) or slug (zywoo). |
| includeHistory | string | Filter by includeHistory. |
| include_history | string | true adds history[] (line movement) to each line. |
| status | string | all includes closed and past lines. |
Example
curl "https://api.citoapi.com/api/v1/cs2/players/donk/props" \
-H "x-api-key: YOUR_API_KEY"Response
{
"success": true,
"data": {
"entityType": "cs2_player_props",
"player": {
"id": "cs2-player-11893",
"nickname": "ZywOo"
},
"dataAvailable": true,
"props": [
{
"provider": "underdog",
"market": "headshots_maps_1_2",
"lineType": "balanced",
"line": 14.5,
"over": {
"decimal": 1.9,
"american": -112,
"multiplier": null
},
"under": {
"decimal": 1.9,
"american": -112,
"multiplier": null
},
"status": "active",
"pickPopularity": null,
"player": {
"id": "cs2-player-11893",
"ign": "ZywOo",
"fullName": null
},
"team": {
"id": "cs2-team-9565",
"name": "Vitality"
},
"opponentName": "Natus Vincere",
"matchId": "cs2-match-2399747",
"matchTitle": "Team Vitality vs Natus Vincere",
"startsAt": "2026-10-27T17:00:00.000Z",
"grading": {
"mapNumbers": [
1,
2
],
"stat": "headshots",
"l5Avg": 16.4,
"l10Avg": 15.8,
"l5OverRate": 0.8,
"l10OverRate": 0.7,
"seriesCounted": 10,
"recentSeries": [
{
"…": "…"
},
{
"…": "…"
}
]
},
"providerRecent": null,
"firstSeenAt": "2026-10-26T22:01:42.902Z",
"updatedAt": "2026-10-26T23:00:05.565Z",
"closedAt": null
},
{
"provider": "underdog",
"market": "kills_maps_1_2",
"lineType": "balanced",
"line": 34.5,
"over": {
"decimal": 1.9,
"american": -112,
"multiplier": null
},
"under": {
"decimal": 1.9,
"american": -112,
"multiplier": null
},
"status": "active",
"pickPopularity": null,
"player": {
"id": "cs2-player-11893",
"ign": "ZywOo",
"fullName": null
},
"team": {
"id": "cs2-team-9565",
"name": "Vitality"
},
"opponentName": "Natus Vincere",
"matchId": "cs2-match-2399747",
"matchTitle": "Team Vitality vs Natus Vincere",
"startsAt": "2026-10-27T17:00:00.000Z",
"grading": {
"mapNumbers": [
1,
2
],
"stat": "kills",
"l5Avg": 35.6,
"l10Avg": 33.6,
"l5OverRate": 0.6,
"l10OverRate": 0.5,
"seriesCounted": 10,
"recentSeries": [
{
"…": "…"
},
{
"…": "…"
}
]
},
"providerRecent": null,
"firstSeenAt": "2026-10-26T22:01:42.844Z",
"updatedAt": "2026-10-26T23:00:05.536Z",
"closedAt": null
}
],
"recentSeries": [
{
"matchId": "cs2-match-2399737",
"date": "2026-10-26",
"opponent": "FUT",
"totals": [
{
"market": "kills_maps_1_2",
"value": 39
},
{
"market": "headshots_maps_1_2",
"value": 15
}
]
},
{
"matchId": "cs2-match-2399729",
"date": "2026-10-25",
"opponent": "The MongolZ",
"totals": [
{
"market": "k
…Try the CS2 Player Props 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/props?market=kills_maps_1_2&limit=5" \
-H "x-api-key: YOUR_API_KEY"