POST /v1/archive/history

Returns long-term listing-price history from BUFF, Youpin, C5Game, and an aggregate series. Data begins in 2023 and updates ~1-2x per day. Max 100 items per request.

Within each bucket, prices, listing volumes, and total_supply are the last observed values. hourly_volume is an approximate sale count: the hourly estimate in 1h responses, and the sum of those hourly estimates in each 1d bucket.

Access#

Requires a Scale or Enterprise API key.

Supported intervals#

IntervalBucket
1hHourly archive buckets
1dDaily archive buckets

Supported sources#

SourceFields
aggregateask, bid, ask_volume, bid_volume, hourly_volume, total_supply
buffask, bid, ask_volume, bid_volume
youpinask, bid, ask_volume, bid_volume
c5gameask, bid, ask_volume, bid_volume

By default, only aggregate is returned.

Request#

POSTapi.cs2.sh/v1/archive/history
curl -X POST https://api.cs2.sh/v1/archive/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": "2024-01-01",
  "end": "2026-07-26",
  "sources": [
    "aggregate",
    "buff"
  ],
  "interval": "1d"
}'

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: aggregate only.
intervalstringNoDefault: 1d. Allowed: 1h, 1d. Aggregation interval

Response#

{
  "response_time": "2026-07-26T18:54:19.138233339Z",
  "currency": "USD",
  "start": "2026-04-27T00:00:00Z",
  "end": "2026-07-25T00:00:00Z",
  "interval": "1d",
  "items": {
    "USP-S | Printstream (Factory New)": {
      "market_hash_name": "USP-S | Printstream (Factory New)",
      "count": 89,
      "data": [
        {
          "bucket": "2026-04-27T00:00:00Z",
          "aggregate": {
            "time": "2026-04-27T23:59:07Z",
            "ask": 130.05,
            "ask_volume": 1225,
            "bid": 130.19,
            "bid_volume": 133,
            "hourly_volume": 27,
            "total_supply": 31291,
            "sample_count": 24
          },
          "buff": {
            "time": "2026-04-27T23:53:24Z",
            "ask": 133.12,
            "ask_volume": 405,
            "bid": 130.19,
            "bid_volume": 45,
            "sample_count": 24
          },
          "youpin": {
            "time": "2026-04-27T23:59:07Z",
            "ask": 130.05,
            "ask_volume": 510,
            "bid": 128.59,
            "bid_volume": 63,
            "sample_count": 24
          },
          "c5game": {
            "time": "2026-04-27T23:57:07Z",
            "ask": 132.21,
            "ask_volume": 139,
            "bid": 213.58,
            "bid_volume": 24,
            "sample_count": 24
          }
        }
      ]
    }
  }
}

Response fields#

ArchiveHistoryResponse 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: 1h, 1d. Archive bucket size.
itemsRecord<string, ArchiveHistoryItem>YesMap of market_hash_name to archive time-series.
errorsItemError[]NoPer-item failures alongside successful results (partial success).

Buckets#

FieldDescription
items.<name>.countNumber of buckets with data.
items.<name>.data[]Archive buckets.
data[].bucketBucket boundary.
data[].<platform>Last-observed ask/bid and ask_volume/bid_volume, with time and sample_count. Platforms: aggregate, buff, youpin, c5game.
data[].aggregate.hourly_volumeApproximate sales for the bucket. Hourly for 1h; summed across the day for 1d.
data[].aggregate.total_supplyApproximate cumulative supply of the item. aggregate only.
  • bucket is present on every archive bucket.
  • Per-platform objects appear only when that platform has data in the bucket.
  • Valid requested items with no archive data return not_in_archive.

Full schemas: ArchiveHistoryItem, ArchiveHistoryBucket, ArchiveHistoryPlatformData.

Errors#

404 not_found means none of the requested valid items have archive data. Partial results return 200 with errors[]; possible item codes are unknown_item, invalid_format, and not_in_archive. See Partial success and Request errors.