Skip to main content
GET/v1/pricing/:marketHashNameDEVELOPER+

/v1/pricing/:marketHashName

Full cross-market pricing snapshot for a single CS2 item: per-market quotes, an aggregate (min/max/avg/median/stdDev), best bid/ask, and the NBBO spread. The path segment is the URL-encoded market_hash_name. All prices are integer USD cents.

This is the widest single-item read. You get every market's representative ask in markets[], every standing buy order in buyOrders[], an aggregate (min / max / avg / median / stdDev) over the asks, plus a bestAsk / bestBid / spreadBps summary. Like the default /v1/nbbo, the bestBid here only considers cash-executable venues unless you pass a markets CSV, in which case every requested venue's bid counts. spreadBps is null when a side is missing, when the book is crossed (bid above ask), or above 10000 bps; for the explicit crossed flag, fee-adjusted execution prices, and the executionAdjusted block, use /v1/nbbo.

Each MarketQuote carries fetchedAt (when SkinPricer last fetched it from the market), ingestedAt (when it was stored in our price store) and isStale, plus sourceUpdatedAt where the market states when it produced the price. Use those to discount old quotes rather than dropping them outright. quoteSize is how many listings back the quote.

Buy orders are sparse: only some venues expose a bid side, so buyOrders[] can be short or empty even when markets[] is long. Narrow the response to specific venues with the markets CSV.

Game-scoped variant: GET /v2/pricing/:marketHashName serves both games with a required game=cs2|rust parameter - same shape, auth, and quotas. See Games: CS2 & Rust.

Parameters

marketHashNamestringrequired
Path segment. URL-encoded market_hash_name, e.g. AK-47%20%7C%20Redline%20(Field-Tested).
marketsstringoptional
Query. CSV of market ids to restrict the response, e.g. csfloat,buff163.

Response fields

PricingResponseFull cross-market snapshot: per-market quotes + an aggregate.
canonicalItemIdstring
SkinPricer's canonical item id.
namestring
The item's market hash name.
aggregateAggregatenullable
Summary statistics across all contributing markets. Can be null/omitted when an item has no priced markets (e.g. some rows from item search).
One entry per market with a live ask.
buyOrdersBuyOrder[]
Standing buy orders, by market.
bestAskQuotenullable
Cross-market best ask.
bestBidQuotenullable
Cross-market best bid across ALL venues (unlike /v1/nbbo, which restricts the default bestBid to cash-executable venues). So this can differ from the NBBO bestBid.
spreadBpsintegernullable
Best-ask − best-bid in basis points. Null when a side is missing, when the book is crossed (bid above ask), or when it would exceed 10000 bps.
marketCountinteger
Markets contributing a quote.
freshMarketCountinteger
Of those, still fresh.
calculatedAtstring (date-time)
When the snapshot was computed.

Nested and shared shapes link to the API Objects reference.

Errors

404Item not found.
401Missing Authorization header, unsupported scheme, or a key that is unknown, inactive, expired, or revoked.
403Valid key, but the subscription is inactive/expired or the plan does not include this endpoint.
429Rate limit exceeded; see Retry-After + X-RateLimit-* headers. Pooled per account across all keys.
5xxUpstream snapshot unavailable or a server-side issue. Retry with backoff.

Guides using this endpoint

export SKINPRICER_API_KEY="sp_live_•••"

curl "https://pricing.skinpricer.com/v1/pricing/AK-47%20%7C%20Redline%20(Field-Tested)" \
  -H "Authorization: ApiKey $SKINPRICER_API_KEY"
// npm i @skinpricer/sdk
import { SkinpricerClient, formatUsd } from "@skinpricer/sdk";

const client = new SkinpricerClient({
  apiKey: process.env.SKINPRICER_API_KEY!,
  authScheme: "ApiKey",
});

const item = await client.pricing.get("AK-47 | Redline (Field-Tested)");
console.log(item.markets.length, "markets quoting", item.name);
if (item.bestAsk) console.log("lowest ask:", formatUsd(item.bestAsk.price), "on", item.bestAsk.market);
import os
import requests

res = requests.get(
    "https://pricing.skinpricer.com/v1/pricing/AK-47%20%7C%20Redline%20(Field-Tested)",
    headers={"Authorization": f"ApiKey {os.environ['SKINPRICER_API_KEY']}"},
    timeout=10,
)
res.raise_for_status()
print(res.json())
Response 200
{
  "canonicalItemId": "cmlofca920lka01yozajhixt3",
  "name": "Glock-18 | Water Elemental (Factory New)",
  "aggregate": {
    "minPrice": 6500,
    "maxPrice": 8012,
    "avgPrice": 7102,
    "medianPrice": 7119,
    "stdDev": 439.12,
    "marketCount": 10,
    "freshMarketCount": 9,
    "listingCount": 710,
    "updatedAt": "2026-06-23T21:59:48.717Z"
  },
  "markets": [
    {
      "market": "csfloat",
      "price": 6500,
      "currency": "USD",
      "fetchedAt": "2026-06-23T21:52:27.427Z",
      "ingestedAt": "2026-06-23T21:55:56.923Z",
      "quoteSize": 132,
      "ingestLatencyMs": 209496,
      "isStale": false,
      "sourceUpdatedAt": "2026-06-23T21:01:13.000Z",
      "sourceTimeKind": "last_modified",
      "sourceAgeSeconds": 3074
    }
  ],
  "buyOrders": [
    {
      "market": "buff163",
      "price": 6440,
      "currency": "USD",
      "fetchedAt": "2026-06-23T21:59:48.717Z",
      "ingestedAt": "2026-06-23T21:59:48.000Z",
      "quoteSize": 47,
      "totalQuantity": 47,
      "ingestLatencyMs": 0,
      "isStale": false
    }
  ],
  "bestAsk": {
    "market": "csfloat",
    "price": 6500,
    "updatedAt": "2026-06-23T21:52:27.427Z",
    "isStale": false
  },
  "bestBid": {
    "market": "buff163",
    "price": 6440,
    "updatedAt": "2026-06-23T21:59:48.717Z",
    "isStale": false
  },
  "spreadBps": 93,
  "marketCount": 10,
  "freshMarketCount": 9,
  "calculatedAt": "2026-06-23T22:07:13.752Z"
}
Response headers
X-RateLimit-Limit: <per-minute, set by your plan>
X-RateLimit-Remaining: <remaining this minute>
X-RateLimit-Reset: <seconds to reset>
X-RateLimit-Remaining-Month: <left this month, capped plans>
X-Request-ID: req_xxxxxxxxxxxxxxxx

Usage & licensing

Access to the API and its data is governed by our Terms of Service. You may not resell or redistribute the data, use it to build a competing service, or exceed your plan’s rate limits, and you must attribute SkinPricer as the source wherever the Terms permit you to display it. Abuse may be throttled or suspended.