BUFF sale history is now available - POST /v1/archive/buff returns sale prices and daily total supply since September 2024.

POST /v1/market/csfloat/orderbook/history

Returns CSFloat buy order snapshots over time (daily or hourly intervals). This endpoint is the same shape as GET /v1/market/csfloat/orderbook/latest.

Data begins on August 10, 2026. Max 100 items per request.

Each interval contains the newest data observed inside that interval. For example, requesting the 1h interval would return the newest data for that hour.

Access#

Requires a Scale or Enterprise API key.

Supported intervals#

IntervalMax range
1h365 days
1dUnlimited

Request#

POSTapi.cs2.sh/v1/market/csfloat/orderbook/history
curl -X POST https://api.cs2.sh/v1/market/csfloat/orderbook/history \
  -H "Authorization: Bearer <<YOUR_API_KEY>>" \
  -H "Accept-Encoding: gzip" --compressed \
  -H "Content-Type: application/json" \
  -d '{
  "items": [
    "★ Karambit | Doppler (Factory New)"
  ],
  "start": "2026-08-10",
  "end": "2026-08-23",
  "interval": "1h"
}'

Parameters#

FieldTypeRequiredDescription
itemsstring[]YesList of base or Doppler/Gamma Doppler phase market_hash_name values (max 100).
startstringNoStart date/time as YYYY-MM-DD or RFC3339, inclusive. Data begins 2026-08-10.
endstringNoEnd date/time as YYYY-MM-DD or RFC3339, exclusive. Defaults to now.
intervalstringNoDefault: 1h. Allowed: 1h, 1d. Bucket interval. 1h is limited to 365 days; 1d is unlimited.

Response#

{
  "response_time": "2026-08-23T22:00:11.929760469Z",
  "currency": "USD",
  "start": "2026-08-20T00:00:00Z",
  "end": "2026-08-22T00:00:00Z",
  "interval": "1h",
  "items": {
    "★ Karambit | Doppler (Factory New)": {
      "market_hash_name": "★ Karambit | Doppler (Factory New)",
      "count": 48,
      "data": [
        {
          "bucket": "2026-08-20T00:00:00Z",
          "updated_at": "2026-08-20T00:55:11.258Z",
          "collected_at": "2026-08-20T00:56:10.301Z",
          "top_generic_bid": null,
          "orders": [
            {
              "price": 6550,
              "quantity": 1,
              "kind": "paint_index",
              "conditions": {
                "paint_index": 417
              }
            },
            {
              "price": 4290,
              "quantity": 1,
              "kind": "paint_index",
              "conditions": {
                "paint_index": 416
              }
            }
          ]
        }
      ],
      "variants": {
        "Phase 2": {
          "market_hash_name": "★ Karambit | Doppler (Factory New)",
          "name": "★ Karambit | Doppler (Factory New) | Phase 2",
          "display_name": "Phase 2",
          "version": "p2",
          "count": 46,
          "data": [
            {
              "bucket": "2026-08-20T00:00:00Z",
              "updated_at": "2026-08-20T00:57:14.824Z",
              "collected_at": "2026-08-20T00:58:10.396Z",
              "top_generic_bid": 1230,
              "orders": [
                {
                  "price": 1630,
                  "quantity": 1,
                  "kind": "paint_index",
                  "conditions": {
                    "paint_index": 419
                  }
                },
                {
                  "price": 1620,
                  "quantity": 1,
                  "kind": "paint_index",
                  "conditions": {
                    "paint_index": 419
                  }
                }
              ]
            }
          ]
        }
      }
    }
  }
}

Response fields#

CSFloatBuyOrdersHistoryResponse 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. Inclusive.
endstring (date-time)YesEffective end of the queried range, ceiled to the interval boundary. Exclusive.
intervalstringYesAllowed: 1h, 1d. Requested bucket interval.
itemsRecord<string, CSFloatBuyOrdersHistoryItem>YesMap of market_hash_name to returned buy-order book history.
errorsItemError[]NoPer-item failures alongside successful results (partial success).

Sampled buckets#

FieldDescription
items.<name>.countNumber of buckets with data.
items.<name>.data[]Buy-order books: the newest observation inside each bucket.
items.<name>.variantsDoppler and Gamma Doppler phase series, keyed by display name.
data[].ordersThe buy-order ladder, price descending, same shape as GET /v1/market/csfloat/orderbook/latest.
data[].top_generic_bidHighest order price with no conditions; null when only conditional orders stand.
data[].updated_at, collected_atCSFloat's update time and cs2.sh's fetch time.
  • A request naming only a phase (e.g. ★ Karambit | Doppler (Factory New) | Phase 2) returns that phase nested under its base entry.

Buy-order conditions#

kindMeaning
genericNo conditions. conditions is {}.
paint_indexThe listing's paint index must match.
floatThe listing's float value must be within the supplied bounds.
stickerThe listing must have the specified sticker requirements.
keychain_patternThe applied charm's pattern value must be within the supplied bounds.
paint_seedsThe listing's paint seed must be one of the supplied values.
keychainThe listing must have the specified charm.
mixedThe listing must satisfy all supplied condition families.
conditions keyTypeMeaning
paint_indexintegerThe listing's paint index must equal this value.
min_floatnumberThe listing's float value must be at least this value.
max_floatnumberThe listing's float value must be at most this value.
stickersCSFloatStickerCondition[]The listing must satisfy every sticker requirement. Repeating an sId requires multiple copies.
min_keychain_patternintegerThe applied charm's pattern value must be at least this value.
max_keychain_patternintegerThe applied charm's pattern value must be at most this value.
paint_seedsinteger[]The listing's paint seed must equal one of these values.
keychainsCSFloatKeychainCondition[]The listing must have every charm identified in this array.

If multiple condition fields are present, the listing must satisfy all of them. mixed orders can also include additional CSFloat condition keys verbatim.

Sticker requirement:

FieldTypeRequiredMeaning
sIdintegerYesNumeric CSFloat ID of the sticker the listing must have.
sintegerNoZero-based slot that must contain this sticker. If omitted, the sticker may be in any slot.

Charm requirement:

FieldTypeRequiredMeaning
sIdintegerYesNumeric CSFloat ID of the charm the listing must have.

Full schemas: CSFloatBuyOrdersHistoryItem, CSFloatBuyOrdersHistoryVariant, CSFloatBuyOrdersHistoryPoint, CSFloatBuyOrder, CSFloatBuyOrderConditions, CSFloatStickerCondition, CSFloatKeychainCondition.

Errors#

When only some item names fail, the endpoint returns 200 with the successful series and errors[]. Variants without a CSFloat paint index (Marble Fade, Case Hardened, and other pattern-priced families) use unsupported_variant. See Partial success and Request errors.