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#

IntervalMax range
5m14 days
30m90 days
1h365 days
1dUnlimited

Supported sources#

SourceFields
buffask, bid, ask_volume, bid_volume
youpinask, bid, ask_volume, bid_volume
csfloatask, bid, ask_volume
skinportask, ask_volume
steamask, bid, ask_volume, bid_volume
c5gameask, 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#

POSTapi.cs2.sh/v1/prices/history
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#

FieldTypeRequiredDescription
itemsstring[]YesList of market_hash_name values (max 100)
startstringYesStart date (YYYY-MM-DD or RFC3339)
endstringNoEnd date (YYYY-MM-DD or RFC3339). Default: now
sourcesstring[]NoFilter to specific sources. Default: all sources
intervalstringNoDefault: 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:

FieldTypeRequiredDescription
response_timestring (date-time)YesWhen the response was generated.
currencystringYesCurrency code (always USD).
startstring (date-time)YesEffective start of the queried range, floored to the interval boundary.
endstring (date-time)YesEffective end of the queried range, ceiled to the interval boundary. Exclusive.
intervalstringYesAllowed: 5m, 30m, 1h, 1d. OHLC bucket size.
itemsRecord<string, HistoryItem>YesMap of market_hash_name to OHLC time-series.
errorsItemError[]NoPer-item failures alongside successful results (partial success).

Buckets#

FieldDescription
items.<name>.countNumber of buckets with data.
items.<name>.data[]OHLC buckets.
data[].bucketUTC-aligned interval boundary.
data[].<source>OHLC values, plus the real observation window (open_time/close_time) and sample_count.
items.<name>.variantsThe same bucketed shape per variant.
  • bucket is present on every history bucket.
  • Per-source objects appear only when that source has data in the bucket.
  • csfloat carries ask and bid OHLC without bid_volume; skinport is 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.