POST/v1/liquidity/batchPRO+
Batch Liquidity
Score up to 100 items in one call. POST a marketHashNames[] body; returns results[] (each the full liquidity shape) plus a notFound[] of untracked names. Returns 200.
Score up to 100 items in one POST. The body is { marketHashNames: [...] }; results[] holds the full liquidity shape per tracked item and notFound[] lists names that aren't tracked. Returns 200 (not 201).
Parameters
marketHashNamesstring[]required
Body. Market hash names to score, max 100. Required.marketstringoptional
Body. Restrict every estimate to one market: skinport | marketcsgo | dmarket | csfloat | steamcommunity.Response fields
LiquidityBatchResponseLiquidity scored for many items in one call.
resultsLiquidityResponse[]
One full liquidity result per tracked item.notFoundstring[]
Requested names that are not tracked.requestedinteger
Number of items requested.calculatedAtstring (date-time)
When the batch was computed.Errors
400No
marketHashNames supplied, or more than 100.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 -X POST "https://pricing.skinpricer.com/v1/liquidity/batch" \
-H "Authorization: ApiKey $SKINPRICER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"marketHashNames":["AK-47 | Redline (Field-Tested)","AWP | Asiimov (Field-Tested)"]}'// npm i @skinpricer/sdk
import { SkinpricerClient } from "@skinpricer/sdk";
const client = new SkinpricerClient({
apiKey: process.env.SKINPRICER_API_KEY!,
authScheme: "ApiKey",
});
const { results, notFound } = await client.liquidity.batch({
marketHashNames: ["AK-47 | Redline (Field-Tested)", "AWP | Asiimov (Field-Tested)"],
});
console.log(results.length, "scored,", notFound.length, "not found");import os
import requests
res = requests.post(
"https://pricing.skinpricer.com/v1/liquidity/batch",
json={"marketHashNames":["AK-47 | Redline (Field-Tested)","AWP | Asiimov (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).
Response 200
{
"results": [
{
"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:17.768Z"
}
],
"notFound": [],
"requested": 2,
"calculatedAt": "2026-06-23T22:07:17.768Z"
}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