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

How to Get Steam Listing Price History for CS2

Updated

Endpoints used: POST /v1/prices/history

Related pages: Steam price API & CS2 price history API

cs2.sh's POST /v1/prices/history with sources: ["steam"] returns OHLC candles for the Steam Community Market's lowest sell listing and highest buy order, with active order counts, from December 24, 2025.

Steam shows a price graph on every Community Market item page, but that graph is completed sales, not listings. These are two different series and they answer two different questions. This one tracks the live order book; the graph on the page is POST /v1/archive/steam.

What cs2.sh provides for Steam listing history#

Property Value
Endpoint POST /v1/prices/history with sources: ["steam"]
Coverage From December 24, 2025
Intervals 5m, 30m, 1h, 1d
Fields ask and bid OHLC, ask_volume, bid_volume, sample_count
Items per request 100
Variants Not supported on any Steam endpoint
Access Requires a Scale or Enterprise API key

Steam publishes both order counts, so unlike CSFloat and Skinport, its bid candles come with bid_volume attached.

Request the series#

bash
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",
  "sources": ["steam"],
  "interval": "1h"
}'
Interval Maximum request range
5m 14 days
30m 90 days
1h 365 days
1d Unlimited

The limit applies per request. A full year of 30m candles is four stitched requests, not a rejected one.

The response shape#

Each bucket carries a steam object:

json
{
  "bucket": "2026-07-20T00:00:00Z",
  "steam": {
    "open_ask": 161.62,
    "high_ask": 162.9,
    "low_ask": 161.4,
    "close_ask": 162.1,
    "ask_volume": 69,
    "open_bid": 155.43,
    "high_bid": 155.9,
    "low_bid": 155.0,
    "close_bid": 155.43,
    "bid_volume": 2940,
    "sample_count": 11,
    "open_time": "2026-07-20T00:04:22Z",
    "close_time": "2026-07-20T00:54:22Z"
  }
}
Field Type Description
open_ask / high_ask / low_ask / close_ask number Sell-listing OHLC for the bucket.
open_bid / high_bid / low_bid / close_bid number Buy-order OHLC for the bucket.
ask_volume / bid_volume integer Active sell listing and buy-order counts.
sample_count integer Observations behind the candle.
open_time / close_time string (date-time) First and last real observations inside the bucket.

Reading the data correctly#

Keep listings and sales apart. close_ask is where the cheapest listing ended the bucket; the price in POST /v1/archive/steam is Steam's own median of what sold. They are different statistics on different populations and a chart that plots them on one unlabelled axis is misleading.

Order counts are snapshots of resting orders. ask_volume falling does not mean that many items sold: listings can be cancelled or repriced. Steam's purchase count lives in the archive endpoint as volume.

Steam values settle to Steam Wallet funds rather than cash. A Steam series placed beside BUFF or CSFloat needs an explicit conversion assumption held separately from the raw numbers.

Steam supports no variants anywhere, because the Community Market does not distinguish a Doppler phase from its base item. Requesting one returns unsupported_variant.

bucket is the aligned boundary while open_time and close_time are the real observation window, and sample_count tells you how much sat behind the candle. A one-sample bucket has identical OHLC values and should not be read as a still market.

When items and variants fail#

Item-level failures arrive in errors[] beside successful results. unsupported_variant is the one to expect here, since Steam supports no variants on any endpoint. unknown_item and invalid_format cover naming problems.

Request-level failures carry error, message, and a request_id. A 403 means history is not included in your plan; a 400 covers malformed requests, more than 100 items, or a range wider than the interval allows.

Worked example: seller and buyer pressure around an event#

Request 1h Steam candles across the hours either side of a case release or update, then request 1h buckets from POST /v1/archive/steam for the same window, which is available for any date from May 9, 2026.

Join on bucket. Compare close_ask against the archive price for the seller premium, and close_bid against the same price for buyer pressure. Track ask_volume and bid_volume across the window to see whether the move came with orders arriving or leaving, and keep sample_count and volume visible so thin hours are recognisable as thin.

Full request and response reference: POST /v1/prices/history. Steam sale history: POST /v1/archive/steam. History endpoints need a Scale or Enterprise key.