Setup
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.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.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.
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.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 400 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 successful order returns200 with the order details and your remaining balance:
Delivery
Each item in the order response includes adelivery field:
instant— the item is tradable now and will be sent to your Steam trade URL immediately.hold— the item is under a Steam trade hold. Check the listing’stradable_atfield (ISO 8601 timestamp) to see when it becomes tradable.
Error reference
| Code | HTTP Status | Meaning |
|---|---|---|
price_moved | 400 | Live price exceeded max_price_usd — response includes current_total_usd |
insufficient_balance | 402 | Your CSBoard balance is below the order total |
steam_account_required | 400 | No Steam account or trade URL linked to your profile |
trading_not_enabled | 403 | The API key does not have buying enabled |