POST /v1/market/csfloat/history
Returns CSFloat buy order snapshots over time (daily or hourly intervals). This endpoint is the same shape as GET /v1/market/csfloat/latest.
Data begins on August 10, 2026. Max 100 items per request.
This endpoint is a snapshot and selects the newest successful data for the specific interval. For example, requesting the 1h interval will return the newest data for that item for any given hour.
Access
Requires a Scale or Enterprise API key.
Supported intervals
| Interval | Max range |
|---|---|
1h | 365 days |
1d | Unlimited |
Request
curl -X POST https://api.cs2.sh/v1/market/csfloat/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",
"currency": "USD"
}'Parameters
| Field | Type | Required | Description |
|---|---|---|---|
items | string[] | Yes | List of base or Doppler/Gamma Doppler phase market_hash_name values (max 100). |
start | string | No | Start date/time as YYYY-MM-DD or RFC3339, inclusive. Data begins 2026-08-10. |
end | string | No | End date/time as YYYY-MM-DD or RFC3339, exclusive. Defaults to now. |
interval | string | No | Default: 1h. Allowed: 1h, 1d. Bucket interval. 1h is limited to 365 days; 1d is unlimited. |
currency | string | No | Default: USD. Allowed: AUD, CAD, CHF, CNY, EUR, GBP, JPY, NZD, SGD, USD. Currency for every price in the response. |
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:
| Field | Type | Required | Description |
|---|---|---|---|
response_time | string (date-time) | Yes | When the response was generated. |
currency | string | Yes | Currency code for every price in the response. Matches the requested currency; defaults to USD. |
start | string (date-time) | Yes | Effective start of the queried range, floored to the interval boundary. Inclusive. |
end | string (date-time) | Yes | Effective end of the queried range, ceiled to the interval boundary. Exclusive. |
interval | string | Yes | Allowed: 1h, 1d. Requested bucket interval. |
items | Record<string, CSFloatBuyOrdersHistoryItem> | Yes | Map of market_hash_name to returned buy-order book history. |
errors | ItemError[] | No | Per-item failures alongside successful results (partial success). |
Sampled buckets
| Field | Description |
|---|---|
items.<name>.count | Number of buckets with data. |
items.<name>.data[] | Buy-order books: the newest observation inside each bucket. |
items.<name>.variants | Doppler and Gamma Doppler phase series, keyed by display name. |
data[].orders | The buy-order ladder, price descending, same shape as GET /v1/market/csfloat/latest. |
data[].top_generic_bid | Highest observed order price with no conditions; null when no generic order was observed. |
data[].updated_at, collected_at | Collection-round completion time (legacy books use observation time) and cs2.sh's collection 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
kind | Meaning |
|---|---|
generic | No conditions. conditions is {}. |
paint_index | The listing's paint index must match. |
float | The listing's float value must be within the supplied bounds. |
sticker | The listing must have the specified sticker requirements. |
keychain_pattern | The applied charm's pattern value must be within the supplied bounds. |
paint_seeds | The listing's paint seed must be one of the supplied values. |
keychain | The listing must have the specified charm. |
mixed | The listing must satisfy all supplied condition families. |
conditions key | Type | Meaning |
|---|---|---|
paint_index | integer | The listing's paint index must equal this value. |
min_float | number | The listing's float value must be at least this value. |
max_float | number | The listing's float value must be at most this value. |
stickers | CSFloatStickerCondition[] | The listing must satisfy every sticker requirement. Repeating an sId requires multiple copies. |
min_keychain_pattern | integer | The applied charm's pattern value must be at least this value. |
max_keychain_pattern | integer | The applied charm's pattern value must be at most this value. |
paint_seeds | integer[] | The listing's paint seed must equal one of these values. |
keychains | CSFloatKeychainCondition[] | 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:
| Field | Type | Required | Meaning |
|---|---|---|---|
sId | integer | Yes | Numeric CSFloat ID of the sticker the listing must have. |
s | integer | No | Zero-based slot that must contain this sticker. If omitted, the sticker may be in any slot. |
Charm requirement:
| Field | Type | Required | Meaning |
|---|---|---|---|
sId | integer | Yes | Numeric 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.