Setup
1
Enable trading on your key
Go to your API profile and flip the buying toggle for the key you want to use. Until you do this, every call to
POST /v1/orders returns 403 trading_not_enabled.2
Link your Steam account and trade URL
Orders are delivered directly to Steam, so you must have a linked Steam account and a valid trade URL set in your profile. Without one, the API returns
400 steam_account_required.3
Fund your CSBoard balance
Purchases are debited from your existing CSBoard balance. Top up on the site — there is no card or crypto payment path through the API itself.
4
Find listings to buy
Query
GET /v1/listings to find items and collect their id fields. Every id in the response is a stable reference you pass directly to the orders endpoint.5
Place your order
POST the listing IDs to
/v1/orders. Include max_price_usd and an Idempotency-Key — both are explained in detail below.Overcharge protection
You are always charged the live price at execution, not the price you saw when you browsed listings. Markets move — a listing you fetched 30 seconds ago may have been relisted at a higher price by the time your order lands. Usemax_price_usd as a total ceiling. The debit is atomic: if the live total at execution exceeds your ceiling, the entire order is rejected with 409 price_moved — nothing is charged and no items are transferred.
If the price moved and you receive a 400, the response body includes current_total_usd so you can decide whether to re-submit with a higher ceiling or abort:
Idempotency
Network failures happen. Without idempotency, a retry after a timeout could buy the same item twice. Prevent that by sending a uniqueIdempotency-Key header with every order request.
- If the server receives two requests with the same key, it replays the original order result — the purchase is never executed a second time.
- You can also pass
idempotency_keyin the request body instead of the header; both have the same effect. - Use a UUID v4 generated per order attempt, not per retry.
Example response
A new order returns201 with the order details (a replay of the same Idempotency-Key returns 200 with the same body):
Delivery
The order response carries an order-leveldelivery field, plus expected_minutes when we can estimate it:
instant— bot delivery; the trade offer goes to your Steam trade URL within minutes.pending— a seller or supplier still has to send the trade.
delivery and tradable_at before buying. Follow the order with GET /v1/orders/{id}, which reports hold and hold_until, and release it with POST /v1/orders/{id}/claim or the autoclaim setting.