/v1/pricing/:marketHashName/history
Time-bucketed historical price series for an item (avg/median/min/max plus best bid/ask in cents). Filter by from/to (ISO), listingType (SELL_OFFER | BUY_ORDER | SALE_HISTORY), and salesWindow. Granularity is chosen automatically from the range unless you pin it with interval. For one series per market instead of the cross-market aggregate, see history by market.
Returns a series of time buckets, oldest to newest. Each bucket summarizes the prices seen in that window (avg / median / min / max) plus the best bid, best ask, and spread at the time: the shape behind a price chart.
listingType picks what you're charting: SELL_OFFER (asks, the default), BUY_ORDER (bids), or SALE_HISTORY (completed sales, paired with salesWindow). Bucket granularity is chosen automatically from your from/to range unless you pin it with interval.
volume and totalQuantity are null for now, because trade-volume ingest isn't live end-to-end yet, so don't chart them as zero.
Parameters
SELL_OFFER | BUY_ORDER | SALE_HISTORY. Default: SELL_OFFER.24h | 7d | 30d | 90d. Only when listingType=SALE_HISTORY.MINUTE_5 | MINUTE_15 | HOUR_1 | HOUR_6 | DAY_1. Overrides the granularity otherwise derived from from/to. An unknown value returns 400.Response fields
SELL_OFFER | BUY_ORDER | SALE_HISTORY.Nested and shared shapes link to the API Objects reference.
Response 200
{
"canonicalItemId": "cmlofca920lka01yozajhixt3",
"name": "Glock-18 | Water Elemental (Factory New)",
"listingType": "SELL_OFFER",
"salesWindow": null,
"history": [
{
"timestamp": "2026-05-25T00:00:00.000Z",
"avgPrice": 4923,
"medianPrice": 4222,
"minPrice": 3522,
"maxPrice": 8805,
"listingCount": 1442,
"totalQuantity": null,
"volume": null,
"bestBidCents": null,
"bestAskCents": 3522,
"spreadBps": null
}
]
}Errors
interval / listingType, or an invalid date range.curl "https://pricing.skinpricer.com/v1/pricing/:marketHashName/history" \
-H "Authorization: ApiKey sk_live_•••••••••••"