修复
购买超时现在返回504 而非 500。 当市场在购买过程中停止响应时,结果确实是未知的——购买仍可能已经完成。POST /market/buy 和 POST /orders 现在为此返回 504 upstream_timeout,并明确说明这一点。关键在于:幂等声明现在会被保留而不是释放。重新发送相同的 custom_id / Idempotency-Key 会重放原始结果,而不会再次购买;在原请求尚未确定时发送的重试将返回 409 idempotency_in_progress。在将 504 视为失败之前,请先轮询订单列表。确定性错误(价格变动、余额不足、商品不可用)保持不变。并发冲突现在返回 409 concurrent_update。 当两个订单同时涉及相同商品时,失败方的事务会完整回滚——未扣款、未预留。此前这会表现为 500,现在是带 Retry-After 的 409,因为此时重试正是正确的做法。新功能
不要再轮询新挂单——直接订阅在今天之前,发现新库存的唯一方式就是更频繁地轮询GET /v1/listings,而这种开销无法在客户端之间分摊:十个接入方各自每分钟 300 次请求,就是对同一张表进行十次独立的深度扫描,返回的还几乎是相同的行。更糟的是,大家轮询的东西根本回答不了这个问题——sort=newest 是按记录创建时间排序的,因此从已取消订单、过期交易报价和解除冻结中回到目录的商品永远不会浮到顶部,无论轮询多快。三项新增,全部向后兼容:- 新端点
GET /v1/listings/stream——Server-Sent Events。一个连接即可取代任何轮询循环,并且除new之外还会推送gone事件。后者是轮询无法表达的:轮询方只能在尝试购买并失败后才发现商品已售出。通过标准的Last-Event-ID请求头可实现无缝重连,包括在我们发布新版本期间。 GET /v1/listings新增查询参数available_after——把轮询变成增量读取。通常的响应是一个空页面。请将水位线回退约 60 秒并按id去重;参数文档解释了为什么这个回退不是可选项。- 每个
Listing新增字段listed_at——商品进入目录的时间,也正是sort=newest现在的排序依据。重新上架的商品会与真正的新库存一起浮现。
sort=newest 保留了名称和排序方向,只是不再隐藏重新上架的商品。修复
修正文档中的速率限制此前公布的限额偏低,影响了您的吞吐:定点读取为 每分钟 100 次,而非 30 次;POST /v1/orders 为 每分钟 250 次,而非 30 次。如果您按旧数字设计了客户端,实际余量比您以为的更大——如果您正打算申请提额,请先试试 available_after 或流式订阅。新功能
极速出售 API(仅限受邀访问)通过 CSBoard 的机器人网络以程序化方式出售 CS2 饰品。对 Steam 库存进行报价、创建出售订单,待 Steam 的交易保护冻结期结束(约 8 天)后,款项将结算到您的 CSBoard 余额。- 使用
POST /v1/sell/quotes对任意 Steam 库存进行报价 —— 每一件符合条件的物品都会返回您将获得入账的准确美元金额。 - 使用
POST /v1/sell/orders创建订单,可选传入min_total_usd以防范价格波动,并通过external_id实现幂等性。 - 使用
GET /v1/sell/orders/:id跟踪生命周期(pending→offer_sent→received→completed)及结算金额。大批量物品可能被拆分到最多 3 个机器人处理。 - 每个报价都会公开发送方机器人的 Steam 个人资料和
trade_offer_id,方便您向出售方展示防冒充校验信息。 - 访问权限按账户单独开通 —— 调用
GET /v1/sell/status查询当前状态,如需申请开通请联系客服。
Fixes
Precise 402 error codes onPOST /v1/market/buyThe endpoint now distinguishes the two out-of-funds cases instead of always returning insufficient_settled_balance:insufficient_balance— the account balance is simply lower than the order total. Top up and retry.insufficient_settled_balance— the balance covers the total, but part of it is still inside the reversal window and cannot fund external delivery yet.
balance_usd alongside required_usd and settled_usd, so a bot can tell the cases apart programmatically. If your integration matched on the insufficient_settled_balance code for generic low-funds handling, match on HTTP 402 instead.Held orders also gained a small post-unlock grace before claimable flips to true — claiming at the exact unlock instant previously failed on the marketplace side.新功能
通过 API 领取持有订单对于进入市场持有状态的订单(status: "hold" 并带有 hold_until 时间戳),现在可以通过程序释放它们。当 hold_until 过后,调用 POST /v1/orders/:id/claim 即可领取订单。成功领取后,市场会发送一个 Steam 交易报价,您的机器人必须在约 15 分钟内接受。部分持有订单会自动交付 —— 此时该调用为无害的空操作。autoclaim 账户设置在 POST /v1/orders 或 POST /v1/market/buy 上设置 autoclaim: true,每个持有订单都会在其持有窗口结束的瞬间自动释放,无需为每个订单单独调用。该标志在账户级别持久生效。listings 和 prices 接口支持精确 name 过滤向 GET /v1/listings 或 GET /v1/prices 传递 name 查询参数,按精确的 market_hash_name 获取单个物品(不区分大小写)。与 search 不同,后者执行模糊词匹配,可能在重叠名称(例如 Spectrum Case 与 Spectrum 2 Case)上发生冲突;name 只返回您请求的物品。当同时提供两个参数时,name 优先生效 —— 无需再对响应做后续过滤。使用示例请参阅 市场数据。