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

/v1/recommendations/:marketHashName

A suggested list/sell price for an item with the strategy, confidence, liquidity score, and the supporting NBBO context. Response is snake_case. Prices are integer USD cents.

Given an item, this returns a single suggested_price to list or sell at, plus the reasoning behind it: the strategy used, a confidence and a liquidity_score (both 0 to 1), and the NBBO context it was derived from.

Watch unstable_reasons: when it's non-empty the inputs were thin or volatile and the suggestion is lower-confidence, so surface that to your users rather than treating every number as equally solid. When there's nothing to price from, strategy is no_data and suggested_price comes back null. Handle that rather than assuming a number is always present. Note this response is snake_case (most pricing endpoints are camelCase).

Parameters

marketHashNamestringrequired
Path segment. URL-encoded market_hash_name.
marketsstringoptional
Query. CSV (repeatable) market filter, e.g. csfloat,buff163.

Response fields

RecommendationResponseSuggested list/sell price with supporting context. snake_case.
canonical_item_idstring
Canonical item id.
market_hash_namestring
Market hash name.
suggested_priceintegernullable
Recommended price in USD cents. Null when there's no data to price from (strategy: "no_data").
strategystring
How it was derived, e.g. midpoint; no_data when no quotes were available (and suggested_price is null).
confidencenumber
0 to 1 confidence in the suggestion.
liquidity_scorenumber
0 to 1 liquidity score for the item.
unstable_reasonsstring[]
Flags when inputs were thin/volatile (empty when stable).
best_askQuoteSnakenullable
Cross-market best ask.
best_bidQuoteSnakenullable
Cross-market best bid.
spread_bpsintegernullable
Spread in basis points.
market_countinteger
Markets contributing.
fresh_market_countinteger
Of those, still fresh.
listing_countinteger
Listings behind the read.
buy_order_countinteger
Distinct buy-order levels.
total_bid_quantityinteger
Summed buy-order quantity.
calculated_atstring (date-time)
When it 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/recommendations/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 rec = await client.recommendations.get("AK-47 | Redline (Field-Tested)");
console.log(rec.strategy, rec.suggested_price === null ? "withheld" : formatUsd(rec.suggested_price));
import os
import requests

res = requests.get(
    "https://pricing.skinpricer.com/v1/recommendations/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).

Response 200
{
  "canonical_item_id": "cmlofca920lka01yozajhixt3",
  "market_hash_name": "Glock-18 | Water Elemental (Factory New)",
  "suggested_price": 6470,
  "strategy": "midpoint",
  "confidence": 0.96,
  "liquidity_score": 0.98,
  "unstable_reasons": [],
  "best_ask": {
    "market": "csfloat",
    "price": 6500,
    "updated_at": "2026-06-23T21:52:27.427Z",
    "is_stale": false
  },
  "best_bid": {
    "market": "buff163",
    "price": 6440,
    "updated_at": "2026-06-23T21:59:48.717Z",
    "is_stale": false
  },
  "spread_bps": 93,
  "market_count": 10,
  "fresh_market_count": 9,
  "listing_count": 710,
  "buy_order_count": 88,
  "total_bid_quantity": 128,
  "calculated_at": "2026-06-23T22:07:15.477Z"
}
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.