Buy-order prices must be a multiple of a step that grows with the price: $0.01 below $5, $0.05 from $5, $0.10 from $10, $1 from $100, $5 from $500, $10 from $1000. Create and edit (v1 and v2) refuse other prices with code invalid_price_step; an edit is checked only when its price changes.
Buy orders v2: CS2 filters and automatic fills; v1 answers as v2
Breaking
New buy-order routes: POST /v2/create-buy-order (JSON body; CS2 filters for float, paint seeds, Doppler phase, stickers with slot and charm with pattern; allow_trade_locked; amount 1 to 250; any number of orders per item), POST /v2/edit-buy-order (price and amount; filled is kept, an amount at or below filled closes the order), GET /v2/buy-orders, POST /v2/remove-buy-order, POST /v2/remove-all-orders and GET /v2/buy-order-history (fills and cancellations with kind, reason, item_id and order_id). Orders fill automatically from listings already for sale and from new ones; an order whose owner cannot pay is cancelled with reason insufficient_funds. Limits: unit price up to your balance, open orders up to 10 × your balance, at most 1000 open orders, 10 writes per 10 seconds. Refusals are HTTP 200 with a stable code. Breaking: the v1 buy-order paths are deprecated and answer with the v2 contract: v2 validation, refusal messages and codes, no one-order-per-item rule, filled kept on edit, filtered orders in the public list and cancellations in the history. Successful v1 answers keep v1's field names (id, msg, offers, count, item_name, last_updated) next to v2's. GET /v1/buy-orders/snapshot is unchanged.
Bulk availability, history filters and inspect on Socket.IO
Non-breaking
POST /v1/check-availability answers up to 1000 item_ids with each listing's CSV snapshot fields plus float, paint_index, phase and sticker_names, read live. POST /v1/my-history and /v2/my-history filter trades by status and reason (start and end required, at most 31 days apart) and return reason, reversed_by and penalties on every trade. Socket.IO game item events carry inspect and delivery.
CSV delivery column, merchant column, and include_manual
Non-breaking
GET /v1/prices/snapshot?format=csv now returns a 12-column header: item_id,name,price,auto,inspect,unlock_at,send_until,class_id,instance_id,steam_id,merchant,delivery. Column 11 (merchant, 2026-09-28): supply-source identifier; empty when unknown. Column 12 (delivery, 2026-09-29): hold, instant, regular, or manual. New opt-in include_manual=1 (CSV only, same rules as include_hold) adds Waxpeer-operated 12-hour manual-delivery P2P rows with delivery=manual and empty merchant. Columns are append-only — positional readers of columns 1–10 keep working.
GET /v1/prices/snapshot?format=csv returns one gzip CSV row per listing. The CSV and its include_hold=1 twin share one header: item_id,name,price,auto,inspect,unlock_at,send_until,class_id,instance_id,steam_id (header later extended with merchant and delivery columns). include_hold=1 fills unlock_at and send_until on trade-locked rows (those columns are always present). compact is JSON-only. Pass include_hold=1 on prices, dopplers, snapshot, search-by-name, check-availability, get-items-list, and mass-info to also receive trade-locked listings. Buy one only by exact item_id with allow_trade_locked. A reservation stays at steamTrade stage 11; unlock_at comes from the buy response.
Partner API updates: cursor pagination, v2 history, and highest offer
Non-breaking
Added GET /v2/get-items-list with cursor pagination for deep pages. next_cursor is present only when has_more is true. POST /v2/my-history matches v1, is faster on long histories, and returns the price you paid on buy rows. New history flags: project_id, orig_price, ignoreSteamid, and all. GET /v1/prices accepts highest_offer. GET /v1/list-items-steam adds escrow and unlock_at (null on a regular listing). Removed ignored params minified_stickers and steam_price from GET /v2/search-items-by-name.
Path-based docs replace ?method= URLs. Unique SEO per method, View as Markdown, /llms.txt, /llms-full.txt, and in-browser Try it via a CORS proxy. Old links redirect.
Additive /v2/merchant/* endpoints: create deposit, load a user Steam inventory, create a Steam offer, deposit status, list deposits, webhooks and resend.
One call updates tradelink, Steam access token, proxy, Steam API key, and webhook — useful for partners managing accounts waiting on trade verification.
Funds from sales are credited 7 days after the item is delivered to the buyer. Until then, they remain in hold: visible on the trade page but unavailable for withdrawal. If the item is returned by the buyer (reason = "Reversed by buyer"), a 30% penalty is applied. New fields: is_released (boolean), release_date (timestamp).
escrow_status exists only on the website history pages. The public API does not return it on check-many-steam, check-many-project-id, or my-history. Use numeric status with is_released and release_date for Steam Trade Protection.