Skip to main content

修复

购买超时现在返回 504 而非 500 当市场在购买过程中停止响应时,结果确实是未知的——购买仍可能已经完成。POST /market/buyPOST /orders 现在为此返回 504 upstream_timeout,并明确说明这一点。关键在于:幂等声明现在会被保留而不是释放。重新发送相同的 custom_id / Idempotency-Key 会重放原始结果,而不会再次购买;在原请求尚未确定时发送的重试将返回 409 idempotency_in_progress。在将 504 视为失败之前,请先轮询订单列表。确定性错误(价格变动、余额不足、商品不可用)保持不变。并发冲突现在返回 409 concurrent_update 当两个订单同时涉及相同商品时,失败方的事务会完整回滚——未扣款、未预留。此前这会表现为 500,现在是带 Retry-After409,因为此时重试正是正确的做法。

新功能

不要再轮询新挂单——直接订阅在今天之前,发现新库存的唯一方式就是更频繁地轮询 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 跟踪生命周期(pendingoffer_sentreceivedcompleted)及结算金额。大批量物品可能被拆分到最多 3 个机器人处理。
  • 每个报价都会公开发送方机器人的 Steam 个人资料和 trade_offer_id,方便您向出售方展示防冒充校验信息。
  • 访问权限按账户单独开通 —— 调用 GET /v1/sell/status 查询当前状态,如需申请开通请联系客服。
完整流程请参阅 极速出售指南

Fixes

Precise 402 error codes on POST /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.
Both responses now include 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/ordersPOST /v1/market/buy 上设置 autoclaim: true,每个持有订单都会在其持有窗口结束的瞬间自动释放,无需为每个订单单独调用。该标志在账户级别持久生效。listings 和 prices 接口支持精确 name 过滤GET /v1/listingsGET /v1/prices 传递 name 查询参数,按精确的 market_hash_name 获取单个物品(不区分大小写)。与 search 不同,后者执行模糊词匹配,可能在重叠名称(例如 Spectrum CaseSpectrum 2 Case)上发生冲突;name 只返回您请求的物品。当同时提供两个参数时,name 优先生效 —— 无需再对响应做后续过滤。使用示例请参阅 市场数据