Skip to main content
GET/v1/liquidity/:marketHashNamePRO+

Liquidity & Time-to-Sell

Liquidity and expected time-to-sell for an item, from cross-market order-book depth and sales velocity. Returns a liquidity badge, median/p90 time-to-sell, the best market to list on, and a per-market breakdown. Prices are integer USD cents; times are in hours.

Answers how fast an item will sell and where. liquidityBadge (a 7-value scale from EXTREMELY_LIQUID to UNTRADED) plus medianTimeToSellHours / p90TimeToSellHours come from cross-market order-book depth and sales velocity; bestMarketToList is where it clears fastest. Pass askPrice to estimate against a hypothetical list price.

The marketWide* fields are a whole-market saturation view (time for ALL supply to clear at the aggregate sale rate), not the per-listing time-to-sell. metrics[] breaks every covered market down; notes[] flags stale inputs. For a slim badge-only payload use the summary companion; score many items at once with the batch companion.

Parameters

marketHashNamestringrequired
Path segment. URL-encoded market_hash_name.
askPriceintegeroptional
Query. Hypothetical ask price in USD cents to estimate against. Defaults to each market's current best ask.
marketstringoptional
Query. Restrict to one market: skinport | marketcsgo | dmarket | csdeals | csfloat.

Response fields

LiquidityResponseLiquidity + expected time-to-sell for an item. Times in hours, prices in cents.
canonicalItemIdstring
Canonical item id.
marketHashNamestring
Market hash name.
liquidityBadgestring
EXTREMELY_LIQUIDUNTRADED (7-value scale).
confidencestring
HIGH | MEDIUM | LOW | CRITICAL.
coveragestring
full | partial | none market coverage.
medianTimeToSellHoursnumbernullable
Median time-to-sell on the best market.
p90TimeToSellHoursnumbernullable
p90 time-to-sell on the best market.
bestMarketToListstringnullable
Market with the lowest expected time-to-sell.
salesPerDaynumbernullable
Sales/day on the best market (rolling 24h).
activeListingsintegernullable
Active listings on the best market.
referenceAskUsdCentsintegernullable
The ask price the estimate assumes.
marketWideSalesPerDaynumbernullable
Summed sales/day across covered markets.
marketWideListingsintegernullable
Summed active listings across covered markets.
marketsWithSalesinteger
Covered markets with a positive sale rate.
marketsWithDepthinteger
Covered markets with positive supply.
marketWideMedianTimeToSellHoursnumbernullable
Time for the whole cross-market supply to clear (saturation index).
marketWideP90TimeToSellHoursnumbernullable
p90 of the saturation index.
Per-market breakdown.
notesstring[]
Data-quality flags, e.g. sales_data_stale:marketcsgo.
calculatedAtstring (date-time)
When it was computed.

Nested and shared shapes link to the API Objects reference.

Response 200

{
  "canonicalItemId": "cmlofca920lka01yozajhixt3",
  "marketHashName": "Glock-18 | Water Elemental (Factory New)",
  "liquidityBadge": "VERY_ILLIQUID",
  "confidence": "LOW",
  "coverage": "full",
  "medianTimeToSellHours": 244.92,
  "p90TimeToSellHours": 273.19,
  "bestMarketToList": "csfloat",
  "salesPerDay": 13,
  "activeListings": 132,
  "referenceAskUsdCents": 6500,
  "marketWideSalesPerDay": 20,
  "marketWideListings": 233,
  "marketsWithSales": 3,
  "marketsWithDepth": 3,
  "marketWideMedianTimeToSellHours": 280.4,
  "marketWideP90TimeToSellHours": 304.57,
  "metrics": [
    {
      "market": "skinport",
      "salesPerDay": 3,
      "activeListings": 40,
      "bestAskUsdCents": 6516,
      "medianTimeToSellHours": 325.34,
      "p90TimeToSellHours": 395.1,
      "salesDataAgeMinutes": 7,
      "listingsDataAgeMinutes": 15
    }
  ],
  "notes": [
    "no_sales_data:csdeals",
    "no_sales_data:dmarket",
    "sales_data_stale:csfloat",
    "sales_data_stale:marketcsgo",
    "thin_sales:marketcsgo",
    "thin_sales:skinport"
  ],
  "calculatedAt": "2026-06-23T22:07:16.813Z"
}

Errors

404Item not found.
401 / 403Missing, invalid, or insufficient-plan API key.
429Rate limit exceeded; see Retry-After + X-RateLimit-* headers.
5xxUpstream snapshot unavailable or a server-side issue. Retry with backoff.

Companion endpoints

GET/v1/liquidity/summary/:marketHashName

A slim badge-only view of the same model: liquidityBadge, a lowercase liquidity label, a human estimatedSaleTime, confidence, and a 0–100 score. Built for quick lookups.

Full reference →
POST/v1/liquidity/batch

Score up to 100 items in one call. POST a marketHashNames[] body; returns results[] (the full liquidity shape) plus a notFound[] of untracked names. Returns 200.

Full reference →
GET/v1/liquidity/items

Enterprise: the whole-catalog liquidity map (market_hash_name to badge, label, score, best market), rematerialized every 10 minutes. Send If-None-Match with the last version for a 304; 503 until the first snapshot is built.

Full reference →
GET/v1/liquidity/items/manifest

Enterprise: a cheap change-probe for the bulk map, returning just { version, calculatedAt, cadence, markets, itemCount }. Compare version against your cached copy before refetching the full map.

Full reference →
curl "https://pricing.skinpricer.com/v1/liquidity/:marketHashName" \
  -H "Authorization: ApiKey sk_live_•••••••••••"

Authenticated endpoint — call it with your API key from your own client (see the code sample).

Response headers
X-RateLimit-Limit: <per-minute, set by your plan>
X-RateLimit-Remaining: <remaining this minute>
X-RateLimit-Reset: <seconds to reset>
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.