Skip to main content
POST
/
market
/
buy
Buy and deliver to a Steam trade URL
curl --request POST \
  --url https://csboard.com/v1/market/buy \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "item_ids": [
    "itm_8841201",
    "itm_8841340"
  ],
  "partner": "447383001",
  "token": "Ab3xZ9Qp",
  "max_price_usd": 30,
  "custom_id": "batch-2026-06-29-01",
  "skip_unavailable": false
}
'
{
  "data": {
    "purchase_id": "pur_01J9Z3K8Q2",
    "steam_id": "76561198000000000",
    "created_at": "2026-06-29T17:12:04Z",
    "custom_id": "batch-2026-06-29-01",
    "skins": [
      {
        "name": "AK-47 | Redline (Minimal Wear)",
        "price": 14.37,
        "status": "delivering",
        "return_reason": null,
        "steam_trade_offer_id": "5512345678"
      }
    ]
  }
}
This endpoint lets you buy and deliver items directly to any Steam trade URL you supply — not just the trade URL linked to your account. The trade URL is built from the partner and token fields. Purchases are funded only from your settled (reversal-safe) balance, making it suitable for wholesale volume and automated delivery workflows. The endpoint is idempotent via the custom_id body field: retrying with the same custom_id replays the original purchase rather than buying twice, and the replayed response carries the header Idempotent-Replayed: true.
This endpoint ships behind a kill-switch and requires a trading-enabled, reversal-clean account. When the kill-switch is off it returns 403 external_buy_disabled.
Authentication required. Send your key as Authorization: Bearer csb_pub_.... Trading capability required. Buying must be enabled for the key, and the account must be reversal-clean.

Request body

item_ids
string[]
required
1–100 unique listing ids to buy.
partner
string
required
Steam trade URL partner value (1–32 chars). Together with token, forms the destination trade URL items are delivered to.
token
string
required
Steam trade URL token value (1–32 chars). Together with partner, forms the destination trade URL.
max_price_usd
number
Total price ceiling in USD. If the live total exceeds it, the order is rejected with price_moved and nothing is charged. Strongly recommended.
custom_id
string
Idempotency key (1–128 chars). A retry with the same custom_id replays the original purchase; the replay response carries Idempotent-Replayed: true.
skip_unavailable
boolean
default:"false"
If true, skip items that are no longer available instead of failing the whole request.

Response fields

data
object
required

Example request

curl -X POST https://csboard.com/v1/market/buy \
  -H "Authorization: Bearer csb_pub_..." \
  -H "Content-Type: application/json" \
  -d '{
    "item_ids": ["itm_8841201", "itm_8841340"],
    "partner": "447383001",
    "token": "Ab3xZ9Qp",
    "max_price_usd": 30.00,
    "custom_id": "batch-2026-06-29-01",
    "skip_unavailable": false
  }'

Example response

{
  "data": {
    "purchase_id": "pur_01J9Z3K8Q2",
    "steam_id": "76561198000000000",
    "created_at": "2026-06-29T17:12:04Z",
    "custom_id": "batch-2026-06-29-01",
    "skins": [
      {
        "name": "AK-47 | Redline (Minimal Wear)",
        "price": 14.37,
        "status": "delivering",
        "return_reason": null,
        "steam_trade_offer_id": "5512345678"
      }
    ]
  }
}

Error codes

HTTP statusCodeMeaning
400invalid_requestMalformed body (e.g. item_ids empty or over 100).
400unsupported_itemOne or more items cannot be delivered via this endpoint (e.g. ss_live_* ids).
400invalid_trade_urlpartner + token do not form a valid Steam trade URL.
401invalid_api_keyMissing or invalid API key.
402insufficient_settled_balanceSettled balance below the order total. Includes required_usd and settled_usd.
402insufficient_balanceBalance below the order total.
403external_buy_disabledKill-switch is off; the endpoint is currently disabled.
403trading_not_enabledBuying is not enabled for this key.
403account_restrictedThe endpoint requires a reversal-clean account.
409item_unavailableOne or more items are no longer available. Includes unavailable_ids[].
409price_movedLive total exceeded the ceiling. Includes quoted_max_usd, current_total_usd, and items[].
409idempotency_in_progressA request with this custom_id is still being processed.
409price_updatingPrices are refreshing; retry shortly.
429rate_limit_exceededToo many requests. Back off for the Retry-After header value.
500order_failedThe purchase could not be completed.
Funds come exclusively from your settled balance. Check settled_balance_usd on GET /v1/balance before a large batch, and always send max_price_usd as overcharge protection.

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.

Body

application/json
item_ids
string[]
required

1–100 unique listing ids to buy.

Required array length: 1 - 100 elements
partner
string
required

Steam trade URL partner value. With token, forms the destination trade URL.

Required string length: 1 - 32
token
string
required

Steam trade URL token value. With partner, forms the destination trade URL.

Required string length: 1 - 32
max_price_usd
number

Total ceiling in USD. Order is rejected with price_moved if the live total exceeds it.

custom_id
string

Idempotency key. A retry with the same value replays the original purchase.

Required string length: 1 - 128
skip_unavailable
boolean
default:false

If true, skip items that are no longer available instead of failing the whole request.

Response

Purchase accepted and debited from settled balance.

data
object
required