National Best Bid & Offer
National Best Bid & Offer across all indexed marketplaces for a single CS2 item, with freshness metadata, a basis-points spread, and a confidence score. Query by id (canonical id) or market_hash_name, optionally narrowed to a markets CSV. Prices are integer USD cents.
NBBO answers one question: across every market at once, what's the best price to buy at and the best to sell at? bestAsk is the lowest ask anywhere (and names its source market); bestBid is the highest bid anywhere; the gap between them is spreadBps, in basis points.
Not every item has a two-sided market. When no venue exposes a buy order, bestBid and spreadBps come back null, which is normal, not an error (see Nulls & partial data). confidence (0 to 1) blends how many markets contributed, how fresh they are, and how much they agree, so you can down-weight a thin or stale read.
locked (bid == ask) and crossed (the bid, net of the selling venue's estimated commission, above the ask) flag the rare moments a quote inverts across markets, usually because one leg went stale a beat before the other refreshed. Filter on them if you're acting on the spread.
By default bestBid only considers cash-executable venues (Steam wallet-credit and trade-credit markets are excluded), so the default cross-market bid is one you could actually realize in cash. Pass a markets CSV to include every requested venue's bid instead. /v1/pricing applies the same default, so the two agree unless you pass markets.
spreadBps is clamped to null above 10000 bps (±100%) to drop garbage bids. Negative (crossed) spreads are kept here, alongside the crossed flag; pricing reads return null on a crossed book instead. For a realistic execution spread rather than a sticker-price spread, read the nullable executionAdjusted block: it re-prices both sides after fees and an executability discount and carries its own spreadBps and executableConfidence.
Want the full per-market breakdown instead of just the best two sides? Use /v1/pricing/:marketHashName. Want order-book depth beyond the top of book? Use /v1/nbbo/depth.
Game-scoped variant: GET /v2/nbbo serves both games with a required game=cs2|rust parameter - same shape, auth, and quotas. See Games: CS2 & Rust.
Parameters
id (400 if neither).market_hash_name (400 if neither).csfloat,buff163. Passing this also overrides the default cash-executable bestBid filter: every requested venue's bid is then considered verbatim.Response fields
Nested and shared shapes link to the API Objects reference.
Errors
market_hash_name nor id supplied.Authorization header, unsupported scheme, or a key that is unknown, inactive, expired, or revoked.Guides using this endpoint
- How to find the best bid and ask for a CS2 skin across every market
- Steam Market vs cash-market prices: how to compare them correctly
- How to estimate what a CS2 skin is really worth
- How to get Steam Community Market prices without scraping
- How to get Rust skin prices with an API
- How to get CS2 Doppler phase prices, from Phase 1 to Emerald
- How to read CS2 order-book depth across every marketplace
- How to build a CS2 price alert bot for Discord
export SKINPRICER_API_KEY="sp_live_•••"
curl -G "https://pricing.skinpricer.com/v1/nbbo" \
--data-urlencode "market_hash_name=AK-47 | Redline (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 quote = await client.nbbo.get({ marketHashName: "AK-47 | Redline (Field-Tested)" });
if (quote.bestAsk && quote.bestBid) {
console.log(formatUsd(quote.bestBid.price), "bid /", formatUsd(quote.bestAsk.price), "ask");
}import os
import requests
res = requests.get(
"https://pricing.skinpricer.com/v1/nbbo",
params={"market_hash_name": "AK-47 | Redline (Field-Tested)"},
headers={"Authorization": f"ApiKey {os.environ['SKINPRICER_API_KEY']}"},
timeout=10,
)
res.raise_for_status()
print(res.json()){
"marketHashName": "Glock-18 | Water Elemental (Factory New)",
"canonicalItemId": "cmlofca920lka01yozajhixt3",
"bestAsk": {
"market": "csfloat",
"price": 4373,
"updatedAt": "2026-09-25T11:20:00.981Z",
"isStale": false
},
"bestBid": {
"market": "marketcsgo",
"price": 4486,
"updatedAt": "2026-09-25T11:20:03.070Z",
"isStale": false
},
"spreadBps": -252,
"marketCount": 16,
"freshMarketCount": 15,
"locked": false,
"crossed": false,
"confidence": 0.88,
"executionAdjusted": {
"bestAsk": {
"market": "csfloat",
"price": 4373,
"rawPrice": 4373,
"appliedFeeBps": 0,
"executability": 0.51,
"updatedAt": "2026-09-25T11:20:00.981Z",
"isStale": false,
"reasons": [
"unknown_executable_depth"
]
},
"bestBid": {
"market": "buff163",
"price": 4256,
"rawPrice": 4365,
"appliedFeeBps": 250,
"withdrawalFlatUsdCents": 0,
"executability": 0.51,
"updatedAt": "2026-09-25T11:20:11.402Z",
"isStale": false,
"reasons": [
"unknown_executable_depth"
]
},
"spreadBps": 275,
"locked": false,
"crossed": false,
"executableConfidence": 0.7,
"reasons": [
"unknown_executable_depth"
],
"feeModelVersion": "exec-fees-v1-estimated",
"calculatedAt": "2026-09-25T11:28:40.236Z"
},
"calculatedAt": "2026-09-25T11:28:40.236Z"
}