Skip to main content
POST
Buy listings from your balance
The orders endpoint lets you buy between 1 and 10 listings in a single atomic request. The charge is debited from your CSBoard balance at the live asking price at the moment of execution — not at the price you saw when you queried /v1/listings. To protect yourself from price movements between lookup and purchase, always include max_price_usd as a total ceiling. The endpoint is idempotent: retrying with the same Idempotency-Key replays the original order rather than creating a duplicate charge. Authentication required. Send your key as Authorization: Bearer csb_pub_.... Trading capability required. The API key must have buying enabled. Configure this in your CSBoard profile.

Prerequisites

Before placing an order, ensure:
  1. Trading-enabled key — buying must be turned on for your API key in your CSBoard profile settings.
  2. Linked Steam account and trade URL — your CSBoard account must have a Steam account connected with a valid trade URL so items can be delivered.
  3. Sufficient balance — your CSBoard balance must cover the total cost of the items at their live prices.

Request headers

string
Optional. A unique string (e.g. a UUID) that identifies this order attempt. If you retry a request with the same key, the server replays the original order response instead of executing a second purchase. Use this to safely retry on network timeouts without risk of double-charging.

Request body

string[]
required
Array of 1–10 unique listing IDs to purchase. Obtain these from the id field of GET /v1/listings responses. Each ID must appear only once per request.
number
Total price ceiling in USD, enforced atomically at execution time. If the live total of all items exceeds this value, the entire order is rejected with a price_moved error and you are not charged. Strongly recommended — without it you have no overcharge protection.
string
Alternative to the Idempotency-Key header. If both are provided, the header takes precedence. Use one or the other, not both.

Response fields

string
required
Unique identifier for this order, e.g. ord_01J9Z3K8Q2.
string
required
Current order status: processing, completed, or failed.
object[]
Per-item breakdown of the order.
number
required
Sum of all per-item charges. This is the total amount debited from your balance.
number
Your CSBoard balance immediately after the debit.
datetime
ISO 8601 timestamp of when the order was created.

Example request

Example response

Error codes

Always include max_price_usd in your request. Prices on a live marketplace can change between the moment you query /v1/listings and the moment your order executes. Without this ceiling, your balance could be debited at a higher price than you intended, and there is no automatic rollback.
Items delivered via hold are subject to a Steam trade hold. Check the tradable_at field on the original listing (from GET /v1/listings) to see exactly when a held item will become tradable in your Steam inventory.

Authorizations

Authorization
string
header
required

Send your key as a Bearer token on every request: Authorization: Bearer csb_pub_.... Generate keys in your CSBoard profile.

Headers

Idempotency-Key
string

Optional. A retried request with the same key replays the original order instead of buying twice.

Body

application/json
item_ids
string[]
required

1–10 unique ids from /v1/listings. Some items can't be combined in a single order — if so the order is rejected and you can split it.

Required array length: 1 - 10 elements
max_price_usd
number

Total ceiling in USD. Strongly recommended — your overcharge protection, enforced atomically inside the locked debit.

idempotency_key
string

Optional; or send the Idempotency-Key header. Replays the original order on retry.

autoclaim
boolean

Sticky per-account setting (not per-order). Send true once to switch your key into auto-claim mode: every held order is then auto-released the moment its hold clears (your bot must auto-accept the Steam trade offer within ~15 minutes). Send false to switch back to manual claiming via POST /orders/{id}/claim. Omit to leave the setting unchanged.

Response

Order accepted and debited.

order_id
string
required
status
enum<string>
required
Available options:
processing,
completed,
failed
total_charged_usd
number
required
items
object[]
balance_after_usd
number
created_at
string<date-time>