New dedicated Steam Community Market endpoints are available! - full historical sale data and full-depth bid/ask orderbook. See docs.

POST /v1/prices/history

Returns continuously updated OHLC price history. Use this endpoint for short-medium term price history. Data begins on December 24, 2025. Prices update every ~5 minutes - data for this endpoint is the same as prices/latest. Max 100 items per request.

Items with Doppler phases or Case Hardened tiers include a variants response; see Response Format.

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, ask_volume
skinportask, ask_volume
steamask, bid, ask_volume, bid_volume
c5gameask, bid, ask_volume

Default source selection: all sources.

bucket is the UTC interval boundary. open_time and close_time are the actual first and last observations inside the bucket; see Response Format.

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": [
    "AK-47 | Redline (Field-Tested)"
  ],
  "start": "2026-01-01",
  "end": "2026-01-08",
  "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#

json
{
  "response_time": "2026-02-28T18:37:20.5984736Z",
  "currency": "USD",
  "start": "2026-01-15T00:00:00Z",
  "end": "2026-02-14T00:00:00Z",
  "interval": "1h",
  "items": {
    "AWP | Asiimov (Field-Tested)": {
      "market_hash_name": "AWP | Asiimov (Field-Tested)",
      "count": 720,
      "data": [
        {
          "bucket": "2026-01-15T00:00:00Z",
          "buff": {
            "open_ask": 121.9,
            "high_ask": 121.9,
            "low_ask": 121.9,
            "close_ask": 121.9,
            "ask_volume": 2122,
            "open_bid": 119.46,
            "high_bid": 119.46,
            "low_bid": 119.46,
            "close_bid": 119.46,
            "bid_volume": 83,
            "sample_count": 12,
            "open_time": "2026-01-15T00:10:00Z",
            "close_time": "2026-01-15T00:50:00Z"
          },
          "youpin": {
            "open_ask": 121.76,
            "high_ask": 121.76,
            "low_ask": 121.76,
            "close_ask": 121.76,
            "ask_volume": 2107,
            "open_bid": 121.47,
            "high_bid": 121.47,
            "low_bid": 121.47,
            "close_bid": 121.47,
            "bid_volume": 47,
            "sample_count": 12,
            "open_time": "2026-01-15T00:01:04Z",
            "close_time": "2026-01-15T00:55:04Z"
          },
          "csfloat": {
            "open_ask": 121.49,
            "high_ask": 121.49,
            "low_ask": 121.49,
            "close_ask": 121.49,
            "ask_volume": 509,
            "sample_count": 12,
            "open_time": "2026-01-15T00:01:49.415Z",
            "close_time": "2026-01-15T00:56:50.478Z"
          },
          "skinport": {
            "open_ask": 127.62,
            "high_ask": 128.02,
            "low_ask": 127.62,
            "close_ask": 128.02,
            "ask_volume": 158,
            "sample_count": 12,
            "open_time": "2026-01-15T00:01:52.946Z",
            "close_time": "2026-01-15T00:56:52.948Z"
          },
          "steam": {
            "open_ask": 175.13,
            "high_ask": 175.13,
            "low_ask": 175.13,
            "close_ask": 175.13,
            "ask_volume": 124,
            "open_bid": 170.45,
            "high_bid": 170.45,
            "low_bid": 170.21,
            "close_bid": 170.21,
            "bid_volume": 58,
            "sample_count": 24,
            "open_time": "2026-01-15T00:04:28Z",
            "close_time": "2026-01-15T00:04:28Z"
          },
          "c5game": {
            "open_ask": 122.9,
            "high_ask": 122.9,
            "low_ask": 122.81,
            "close_ask": 122.81,
            "ask_volume": 582,
            "open_bid": null,
            "high_bid": null,
            "low_bid": null,
            "close_bid": null,
            "sample_count": 12,
            "open_time": "2026-01-15T00:01:45.282Z",
            "close_time": "2026-01-15T00:56:44.104Z"
          }
        }
      ]
    }
  }
}

Returns a HistoryResponse object. See Objects for the full shape.

Response fields#

Each item holds count (buckets with data) and a data[] array of OHLC buckets. bucket is the UTC-aligned interval boundary; each per-source object carries OHLC values plus the real observation window (open_time/close_time) and sample_count. csfloat and skinport are ask-only. Variants nest under variants.

  • bucket is present on every history bucket.
  • Per-source objects appear only when that source has data in the bucket.
  • 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#

StatusWhen
400 validation_errorThe request body or query failed validation (e.g. bad JSON, missing items/start, over 100 items, or a bad interval or date range).
401 / 403Missing key, invalid key, or plan access.
429Rate-limited.
5xxServer-side issue.

When some items resolve and others don't, the request still returns 200 with the resolved items plus an errors[] array. errors[] is for invalid or unresolved item names, not for valid items with no buckets.