Skip to main content
GET/v1/nbboDEVELOPER+

NBBO:全市场最优买卖价

单件 CS2 饰品在所有已接入市场上的 NBBO(全市场最优买卖价),附新鲜度元数据、基点价差与置信度评分。可按 id(规范 id)或 market_hash_name 查询,可选用 markets CSV 收窄范围。价格为整数美分。

NBBO 回答一个问题:同时看*所有*市场,现在买入的最优价是多少、卖出的最优价是多少?bestAsk 是全场最低在售价(并标明来源市场);bestBid 是全场最高求购价;两者之间的差就是 spreadBps,以基点计。

并非每件饰品都有双边市场。当没有任何市场存在求购单时,bestBid 与 spreadBps 返回 null——这是正常情况,不是错误(见 null 与部分数据)。confidence(0 到 1)综合了参与市场数量、数据新鲜度与跨市场一致性,可用来对单薄或过期的读数做降权。

locked(求购价 == 在售价)与 crossed(扣除卖方平台预估佣金后的求购价 > 在售价)标记跨市场报价倒挂的罕见时刻,通常是一边的报价先于另一边刷新而过期。若你的策略依赖价差,请据此过滤。

默认情况下 bestBid 只统计可现金变现的市场(Steam 钱包余额与以物易物额度类平台被排除),因此默认的跨市场求购价是真正能变现的价格。传入 markets CSV 则改为逐字采信每个被请求平台的求购价。/v1/pricing 采用同样的默认规则,因此除非传入 markets,两者一致。

spreadBps 超过 10000 基点(±100%)时会被置为 null 以剔除垃圾求购价。本接口保留交叉(负)价差并同时给出 crossed 标志;定价类读取在交叉盘口时则返回 null。若要的是可实际执行的价差而非标价价差,请读取可为 null 的 executionAdjusted 块:它在扣除手续费并按可执行性折价后对双边重新定价,并带有自己的 spreadBps 与 executableConfidence。

想要完整的按市场拆解而不只是最优两边?用 /v1/pricing/:marketHashName。想看盘口之下的挂单深度?用 /v1/nbbo/depth。

按游戏区分的版本:GET /v2/nbbo 通过必填参数 game=cs2|rust 同时服务两款游戏,响应结构、认证与配额均相同。见游戏:CS2 与 Rust。

参数

market_hash_namestring可选
查询参数。精确的 market hash name。此参数与 id 二选一(都缺失返回 400)。
idstring可选
查询参数。规范饰品 id。此参数与 market_hash_name 二选一(都缺失返回 400)。
marketsstring可选
查询参数。用于限定响应的市场 id CSV,例如 csfloat,buff163。传入后还会覆盖默认的"仅现金变现市场"的 bestBid 过滤规则:所有被请求平台的求购价将被逐字采信。

响应字段

NbboResponse单件饰品在所有已接入市场上的最优求购价 + 最优在售价。
marketHashNamestring
饰品的 Steam market hash name。
canonicalItemIdstring
SkinPricer 的规范饰品 id。
bestAskQuotenullable
全市场最低在售价。无新鲜在售价时为 null。
bestBidQuotenullable
全市场最高求购价。默认(全市场)视图下仅统计可现金变现的市场,见下方 bestBid 说明。没有符合条件的求购价时为 null。
spreadBpsintegernullable
bestAsk − bestBid,以基点计。缺少任一边时为 null;超过 10000 基点(±100% 价差,几乎总是过期/异常求购价)时也被置为 null。负(交叉)价差会保留。
marketCountinteger
提供报价的市场数。
freshMarketCountinteger
其中仍新鲜的市场数。
lockedboolean
bestBid == bestAsk(零价差)时为 true。
crossedboolean
bestBid 扣除卖方平台预估佣金后仍高于 bestAsk(短暂倒挂)时为 true。仅在扣费前更高的求购价不会触发。
confidencenumber
由覆盖度、新鲜度与一致性得出的 0 到 1 置信度。
executionAdjustedExecutionAdjustedNbbonullable
扣费并按可执行性折价后的"真实最优市场"(SP-261)。无法计算时为 null。详见专属对象。
calculatedAtstring (date-time)
本次 NBBO 的计算时间。

嵌套与共享结构链接到 API 对象 参考页。

错误

400market_hash_name 与 id 均未提供。
404饰品不存在。
401缺少 Authorization 头、认证方案不支持,或密钥未知、未激活、已过期、已吊销。
403密钥有效,但订阅未激活/已过期,或套餐不含此接口。
429超出速率限制;见 Retry-After 与 X-RateLimit-* 响应头。配额按账号合并计算,所有密钥共享。
5xx上游快照不可用或服务端问题。请退避后重试。

使用此端点的指南(英文)

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())
响应 200
{
  "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"
}
响应头
X-RateLimit-Limit: <每分钟配额,由套餐决定>
X-RateLimit-Remaining: <本分钟剩余次数>
X-RateLimit-Reset: <距重置的秒数>
X-RateLimit-Remaining-Month: <本月剩余次数,仅限有月度上限的套餐>
X-Request-ID: req_xxxxxxxxxxxxxxxx

使用与许可

API 及其数据的使用受我们的服务条款(英文)约束:不得转售或再分发数据,不得用于构建竞争性服务, 不得超出套餐的速率限制;在条款允许展示数据的场景下须注明数据来源为 SkinPricer。滥用行为可能被限流或封禁。