POST /v1/prices/history
Returns high-frequency OHLC (open, high, low, close) price history aggregated from the same snapshots as latest prices. Historical coverage begins December 24, 2025. Each request accepts up to 100 items.
Items with Doppler, Gamma Doppler, or Case Hardened history can include variants.
Access
Requires a Scale or Enterprise API key.
Supported intervals
| Interval | Max range |
|---|---|
5m | 14 days |
30m | 90 days |
1h | 365 days |
1d | Unlimited |
Supported sources
| Source | Fields |
|---|---|
buff | ask, bid, ask_volume, bid_volume |
youpin | ask, bid, ask_volume, bid_volume |
csfloat | ask, bid, ask_volume |
skinport | ask, ask_volume |
steam | ask, bid, ask_volume, bid_volume |
c5game | ask, bid, ask_volume |
By default, all sources are returned.
bucket is the UTC interval boundary. open_time and close_time are the actual first and last observations inside the bucket; see Using the API.
Request
curl -X POST https://api.cs2.sh/v1/prices/history \
-H "Authorization: Bearer <<YOUR_API_KEY>>" \
-H "Accept-Encoding: gzip" --compressed \
-H "Content-Type: application/json" \
-d '{
"items": [
"USP-S | Printstream (Factory New)"
],
"start": "2026-07-20",
"end": "2026-07-23",
"sources": [
"buff",
"csfloat"
],
"interval": "1h"
}'Parameters
| Field | Type | Required | Description |
|---|---|---|---|
items | string[] | Yes | List of market_hash_name values (max 100) |
start | string | Yes | Start date (YYYY-MM-DD or RFC3339) |
end | string | No | End date (YYYY-MM-DD or RFC3339). Default: now |
sources | string[] | No | Filter to specific sources. Default: all sources |
interval | string | No | Default: 5m. Allowed: 5m, 30m, 1h, 1d. Aggregation interval |
Response
{
"response_time": "2026-07-26T18:54:17.003186292Z",
"currency": "USD",
"start": "2026-07-20T00:00:00Z",
"end": "2026-07-23T00:00:00Z",
"interval": "1h",
"items": {
"USP-S | Printstream (Factory New)": {
"market_hash_name": "USP-S | Printstream (Factory New)",
"count": 72,
"data": [
{
"bucket": "2026-07-20T00:00:00Z",
"buff": {
"open_ask": 115.16,
"high_ask": 115.16,
"low_ask": 115.16,
"close_ask": 115.16,
"ask_volume": 466,
"open_bid": 112.21,
"high_bid": 112.21,
"low_bid": 112.21,
"close_bid": 112.21,
"bid_volume": 42,
"sample_count": 75,
"open_time": "2026-07-20T00:00:51Z",
"close_time": "2026-07-20T00:58:51Z"
},
"youpin": {
"open_ask": 113.54,
"high_ask": 113.54,
"low_ask": 113.54,
"close_ask": 113.54,
"ask_volume": 505,
"open_bid": 112.5,
"high_bid": 112.5,
"low_bid": 112.5,
"close_bid": 112.5,
"bid_volume": 64,
"sample_count": 12,
"open_time": "2026-07-20T00:04:07Z",
"close_time": "2026-07-20T00:58:07Z"
},
"csfloat": {
"open_ask": 109.85,
"high_ask": 109.85,
"low_ask": 109.85,
"close_ask": 109.85,
"ask_volume": 229,
"open_bid": 107,
"high_bid": 107,
"low_bid": 107,
"close_bid": 107,
"sample_count": 60,
"open_time": "2026-07-20T00:00:25.313Z",
"close_time": "2026-07-20T00:44:01.71Z"
},
"skinport": {
"open_ask": 122.71,
"high_ask": 122.71,
"low_ask": 122.71,
"close_ask": 122.71,
"ask_volume": 43,
"sample_count": 60,
"open_time": "2026-07-20T00:00:29.985Z",
"close_time": "2026-07-20T00:59:29.996Z"
},
"steam": {
"open_ask": 161,
"high_ask": 161.62,
"low_ask": 161,
"close_ask": 161.62,
"ask_volume": 69,
"open_bid": 155.43,
"high_bid": 155.43,
"low_bid": 155.43,
"close_bid": 155.43,
"bid_volume": 2940,
"sample_count": 9,
"open_time": "2026-07-20T00:02:52.014Z",
"close_time": "2026-07-20T00:54:22.006Z"
},
"c5game": {
"open_ask": 116.34,
"high_ask": 116.34,
"low_ask": 116.19,
"close_ask": 116.19,
"ask_volume": 147,
"open_bid": 232.98,
"high_bid": 232.98,
"low_bid": 232.98,
"close_bid": 232.98,
"sample_count": 12,
"open_time": "2026-07-20T00:02:49.997Z",
"close_time": "2026-07-20T00:37:50.106Z"
}
}
]
}
}
}Response fields
HistoryResponse fields:
| Field | Type | Required | Description |
|---|---|---|---|
response_time | string (date-time) | Yes | When the response was generated. |
currency | string | Yes | Currency code (always USD). |
start | string (date-time) | Yes | Effective start of the queried range, floored to the interval boundary. |
end | string (date-time) | Yes | Effective end of the queried range, ceiled to the interval boundary. Exclusive. |
interval | string | Yes | Allowed: 5m, 30m, 1h, 1d. OHLC bucket size. |
items | Record<string, HistoryItem> | Yes | Map of market_hash_name to OHLC time-series. |
errors | ItemError[] | No | Per-item failures alongside successful results (partial success). |
Buckets
| Field | Description |
|---|---|
items.<name>.count | Number of buckets with data. |
items.<name>.data[] | OHLC buckets. |
data[].bucket | UTC-aligned interval boundary. |
data[].<source> | OHLC values, plus the real observation window (open_time/close_time) and sample_count. |
items.<name>.variants | The same bucketed shape per variant. |
bucketis present on every history bucket.- Per-source objects appear only when that source has data in the bucket.
csfloatcarries ask and bid OHLC withoutbid_volume;skinportis ask-only.- Valid requested items with no buckets in the requested range are omitted from
items.
Full schemas: HistoryItem, HistoryBucket, and the per-source types under OHLC Source Data.
Errors
When only some item names fail, the endpoint returns 200 with the successful series and errors[]. Valid items with no buckets in the requested range are omitted without an item error. See Partial success and Request errors.