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 (six tiers from EXTREMELY_LIQUID to EXTREMELY_ILLIQUID, or INSUFFICIENT_DATA when there is not enough evidence for an estimate, which is not the same as no trading) 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
skinport | marketcsgo | dmarket | csfloat | steamcommunity.Response fields
EXTREMELY_LIQUID | VERY_LIQUID | LIQUID | ILLIQUID | VERY_ILLIQUID | EXTREMELY_ILLIQUID, or INSUFFICIENT_DATA when there is no supported estimate (time-to-sell fields are then null). INSUFFICIENT_DATA does not assert zero trading. Older cached responses may still carry the legacy UNTRADED.HIGH | MEDIUM | LOW | CRITICAL.full | partial | none market coverage.sales_data_stale:marketcsgo.Nested and shared shapes link to the API Objects reference.
Errors
Authorization header, unsupported scheme, or a key that is unknown, inactive, expired, or revoked.Companion endpoints
A slim badge-only view of the same model: liquidityBadge, a lowercase liquidity label, a human estimatedSaleTime, confidence, and a 0 to 100 score. Built for quick lookups.
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.
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.
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.
Guides using this endpoint
export SKINPRICER_API_KEY="sp_live_•••"
curl "https://pricing.skinpricer.com/v1/liquidity/AK-47%20%7C%20Redline%20(Field-Tested)" \
-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 liq = await client.liquidity.get("AK-47 | Redline (Field-Tested)");
console.log(liq.liquidityBadge, liq.medianTimeToSellHours ?? "not enough sales", "h median");import os
import requests
res = requests.get(
"https://pricing.skinpricer.com/v1/liquidity/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())Authenticated endpoint: call it with your API key from your own client (see the code sample).
{
"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:dmarket",
"sales_data_stale:csfloat",
"sales_data_stale:marketcsgo",
"thin_sales:marketcsgo",
"thin_sales:skinport"
],
"calculatedAt": "2026-06-23T22:07:16.813Z"
}