Access on request. Instant Sell is enabled per-account. Your API key can read
GET /v1/sell/status out of the box, but quoting and selling return selling_not_enabled until access is granted. Contact support to request access.How it works
- Quote —
POST /v1/sell/quoteswith a Steam trade URL returns every item in that inventory we are ready to buy, with the exact USD amount you will be credited per item. - Create an order —
POST /v1/sell/orderswith the chosenasset_ids. A bot from the CSBoard network sends a Steam trade offer to the seller’s trade URL. Large baskets may split into up to 3 offers from different bots — the order’soffers[]array tracks each one. - Seller accepts — the order moves to
received. Steam’s trade protection hold now runs (about 8 days). The pending amount is visible inGET /v1/balanceunderincoming_hold. - Settlement — when the hold clears, the order completes and the full amount is credited to your CSBoard balance. There is no other payout destination: funds always settle to the balance of the API key that created the order.
Verify offers to your users
Every offer exposes the sending bot’s profile and the Steam trade offer id:trade_offer_id and bot steam_id before accepting — that check defeats impersonation scams regardless of which bot ships the offer.
Endpoints
All endpoints live under/v1/sell and use the same csb_pub_ Bearer key as the rest of the API.
GET /v1/sell/status
Feature discovery. Works for every key.POST /v1/sell/quotes
POST /v1/sell/orders
min_total_usd— optional price-drift floor. If the live total drops below it between quote and execution, the order is rejected withprice_driftand no side effects.external_id— your idempotency id, unique per key. Retrying with the sameexternal_idreturns the original order instead of creating a duplicate.Idempotency-Keyheader — request-level replay protection, same semantics asPOST /v1/orders.
GET /v1/sell/orders/:id
Also available asGET /v1/sell/orders?external_id=….
credited_usd grows as offers settle — a split order can settle partially while the remaining offers are still in hold.
POST /v1/sell/orders/:id/cancel
Allowed while the order ispending or offer_sent (before the seller accepts). Later stages return 409 not_cancellable.
Order lifecycle
Errors
Errors follow the standard{ "code", "detail" } envelope. Sell-specific codes: invalid_trade_url, private_inventory, inventory_unavailable, item_not_in_inventory, item_not_tradable, no_eligible_items, price_drift, too_many_items, active_order_exists, too_many_active_orders, daily_cap_exceeded, offer_declined, offer_expired, sell_disabled, selling_not_enabled, rate_limited.
Limits
- Quotes: 10 requests/min per key (inventory scans are expensive).
- Orders: 5 creations/min per key, 10 active orders, $2,000/day default volume cap. Caps are raised per-account — ask support.