Reading prices: ask, bid & NBBO
How to interpret the price fields the API returns.
Ask vs bid
ask is the lowest current sell offer (what you'd pay to buy now); bid is the highest standing buy order (what you'd receive selling now). The spread is ask − bid.
NBBO
National Best Bid & Offer is the best ask and best bid taken across every indexed marketplace at once, not within a single market. bestAsk and bestBid each name their source market. spreadBps expresses the spread in basis points (100 bps = 1%).
In the default (all-markets) view, the NBBO bestBid is restricted to cash-executable venues (markets that actually pay out in cash). Steam wallet credit and trade-credit venues are excluded by default, since their bids are denominated in non-cash balances and would otherwise produce economically-false crossed books. Pass an explicit markets CSV to override this and consider every requested venue's bid verbatim. The same default applies to the bestBid on /v1/pricing, item search, and recommendations, so those reads agree with the NBBO unless you pass markets.
spreadBps and its null-clamp
spreadBps on /v1/nbbo and /v1/pricing is null when a side is missing, and also clamped to null when it would exceed 10000 bps (±100%), which almost always means a stale or garbage bid. The two differ on a crossed book (bid above ask): /v1/nbbo keeps the negative spread and sets its explicit crossed flag, while /v1/pricing, item search, and recommendations return spreadBps: null. Note the /v1/nbbo/depth spreadBps is NOT clamped and can be large or negative.
Execution-adjusted NBBO
Raw bestAsk / bestBid are sticker prices. The nullable executionAdjusted block on /v1/nbbo re-ranks venues by what you'd actually pay (ask + buyer fee) versus net receive (bid − commission − withdrawal), each scaled by an executability discount for freshness and depth, and exposes its own spreadBps plus an executableConfidence. Use the raw NBBO for a display spread; use executionAdjusted for a realistic execution spread.
Cents, not dollars
Every price field is an integer number of USD cents, so 1550 means $15.50. Divide by 100 only at display time to avoid floating-point drift.
locked & crossed
locked is true when the best bid equals the best ask (zero spread). crossed is true when the best bid, net of the selling venue's estimated commission, still exceeds the best ask: a cross-market inversion that usually means one leg went stale a beat before the other refreshed. A bid that only looks higher before fees does not set it, so the raw spreadBps can be negative while crossed is false. Both are flags so you can filter or discount those reads.