Per-Market Price History
Per-market historical price series for an item: the same time buckets as /v1/pricing/:marketHashName/history, but split into one series per marketplace instead of a single cross-market aggregate. Filter to specific venues with markets. Prices are integer USD cents.
The per-market companion to item price history: instead of one blended series, you get series[] with one entry per marketplace, each carrying its own history[] of buckets (avgPrice, bestBidCents / bestAskCents, spreadBps, and so on). Use it to compare how a single item trades across venues.
Pass a markets CSV (e.g. buff163,csfloat) to limit which venues come back; omit it for every covered market. from / to / interval / listingType / salesWindow behave exactly like the aggregate history endpoint.
Game-scoped variant: GET /v2/pricing/:marketHashName/history/markets serves both games with a required game=cs2|rust parameter - see Games: CS2 & Rust.
Parameters
buff163,csfloat. Omit for every covered market.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, snapping to the nearest stored rollup (MINUTE_5/MINUTE_15 → 10m, HOUR_1/HOUR_6 → 1h, DAY_1 → 1d); effectiveInterval in the response reports the width served. An unknown value returns 400.Response fields
SELL_OFFER | BUY_ORDER | SALE_HISTORY.10m | 1h | 1d. Can differ from the requested interval, which snaps to these stored rollups.Nested and shared shapes link to the API Objects reference.
Errors
interval / listingType, or an invalid date range.Authorization header, unsupported scheme, or a key that is unknown, inactive, expired, or revoked.Guides using this endpoint
export SKINPRICER_API_KEY="sp_live_•••"
curl -G "https://pricing.skinpricer.com/v1/pricing/AK-47%20%7C%20Redline%20(Field-Tested)/history/markets" \
--data-urlencode "interval=DAY_1" \
-H "Authorization: ApiKey $SKINPRICER_API_KEY"// npm i @skinpricer/sdk
import { SkinpricerClient } from "@skinpricer/sdk";
const client = new SkinpricerClient({
apiKey: process.env.SKINPRICER_API_KEY!,
authScheme: "ApiKey",
});
const { series } = await client.history.byMarket("AK-47 | Redline (Field-Tested)", { interval: "DAY_1" });
for (const s of series) console.log(s.market, s.history.length, "buckets");import os
import requests
res = requests.get(
"https://pricing.skinpricer.com/v1/pricing/AK-47%20%7C%20Redline%20(Field-Tested)/history/markets",
params={"interval": "DAY_1"},
headers={"Authorization": f"ApiKey {os.environ['SKINPRICER_API_KEY']}"},
timeout=10,
)
res.raise_for_status()
print(res.json())Authenticated endpoint: call it with your API key from your own client (see the code sample).
{
"canonicalItemId": "cmlofczf90qj401vsd80dskd1",
"name": "AK-47 | Redline (Field-Tested)",
"listingType": "SELL_OFFER",
"salesWindow": null,
"effectiveInterval": "1d",
"series": [
{
"market": "buff163",
"history": [
{
"timestamp": "2026-09-22T00:00:00.000Z",
"avgPrice": 3343,
"medianPrice": 2942,
"minPrice": 2532,
"maxPrice": 5565,
"listingCount": 8472,
"totalQuantity": null,
"volume": null,
"bestBidCents": 2584,
"bestAskCents": 2532,
"spreadBps": -203
}
]
},
{
"market": "csfloat",
"history": [
{
"timestamp": "2026-09-22T00:00:00.000Z",
"avgPrice": 2524,
"medianPrice": 2526,
"minPrice": 2495,
"maxPrice": 2526,
"listingCount": 3655,
"totalQuantity": null,
"volume": null,
"bestBidCents": 2500,
"bestAskCents": 2495,
"spreadBps": -20
}
]
}
]
}