Перейти к основному содержанию
POST
/
orders
Buy listings from your balance
curl --request POST \
  --url https://csboard.com/v1/orders \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "item_ids": [
    "itm_8841201",
    "itm_8841340"
  ],
  "max_price_usd": 30,
  "idempotency_key": "6f9c2b10-1a2b-4c3d-8e4f-5a6b7c8d9e0f"
}
'
{
  "order_id": "ord_01J9Z3K8Q2",
  "status": "processing",
  "items": [
    {
      "item_id": "itm_8841201",
      "charged_usd": 14.37,
      "delivery": "hold"
    },
    {
      "item_id": "itm_8841340",
      "charged_usd": 12.1,
      "delivery": "instant"
    }
  ],
  "total_charged_usd": 26.47,
  "balance_after_usd": 73.53,
  "created_at": "2026-06-29T17:12:04Z"
}
Эндпоинт orders позволяет покупать от 1 до 10 листингов в одном атомарном запросе. Списание производится с вашего баланса CSBoard по живой цене продажи в момент исполнения — не по той цене, которую вы видели при запросе /v1/listings. Чтобы защититься от движений цены между запросом и покупкой, всегда указывайте max_price_usd как верхнюю границу итога. Эндпоинт идемпотентен: повтор с тем же Idempotency-Key воспроизводит исходный заказ, а не создаёт дубликат списания. Требуется аутентификация. Отправьте ключ как Authorization: Bearer csb_pub_.... Требуется возможность торговли. Для API-ключа должны быть включены покупки. Настройте это в профиле CSBoard.

Предварительные условия

Перед оформлением заказа убедитесь, что:
  1. Ключ с включённой торговлей — покупки должны быть включены для вашего API-ключа в настройках профиля CSBoard.
  2. Привязанный аккаунт Steam и trade URL — к аккаунту CSBoard должен быть привязан аккаунт Steam с валидным trade URL, чтобы предметы можно было доставить.
  3. Достаточный баланс — баланс CSBoard должен покрывать суммарную стоимость предметов по их живым ценам.

Заголовки запроса

Idempotency-Key
string
Необязательно. Уникальная строка (например, UUID), идентифицирующая эту попытку заказа. Если вы повторяете запрос с тем же ключом, сервер воспроизводит исходный ответ заказа вместо повторного исполнения покупки. Используйте это для безопасного повтора при сетевых таймаутах без риска двойного списания.

Тело запроса

item_ids
string[]
обязательно
Массив из 1–10 уникальных ID листингов для покупки. Получайте их из поля id ответов GET /v1/listings. Каждый ID должен встречаться в запросе только один раз.
max_price_usd
number
Верхняя граница итоговой цены в USD, проверяется атомарно в момент исполнения. Если живой итог по всем предметам превышает это значение, весь заказ отклоняется с ошибкой price_moved и списания не происходит. Настоятельно рекомендуется — без него у вас нет защиты от переплаты.
idempotency_key
string
Альтернатива заголовку Idempotency-Key. Если переданы оба, заголовок имеет приоритет. Используйте что-то одно.

Поля ответа

order_id
string
обязательно
Уникальный идентификатор этого заказа, например ord_01J9Z3K8Q2.
status
string
обязательно
Текущий статус заказа: processing, completed или failed.
items
object[]
Разбивка заказа по предметам.
total_charged_usd
number
обязательно
Сумма всех списаний по предметам. Это итоговая сумма, списанная с вашего баланса.
balance_after_usd
number
Ваш баланс CSBoard сразу после списания.
created_at
datetime
Временная метка ISO 8601 создания заказа.

Пример запроса

curl -X POST https://csboard.com/v1/orders \
  -H "Authorization: Bearer csb_pub_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f9c2b10-1a2b-4c3d-8e4f-5a6b7c8d9e0f" \
  -d '{
    "item_ids": ["itm_8841201", "itm_8841340"],
    "max_price_usd": 30.00
  }'

Пример ответа

{
  "order_id": "ord_01J9Z3K8Q2",
  "status": "processing",
  "items": [
    {
      "item_id": "itm_8841201",
      "charged_usd": 14.37,
      "delivery": "hold"
    },
    {
      "item_id": "itm_8841340",
      "charged_usd": 12.10,
      "delivery": "instant"
    }
  ],
  "total_charged_usd": 26.47,
  "balance_after_usd": 73.53,
  "created_at": "2026-06-29T17:12:04Z"
}

Коды ошибок

HTTP-статусКодЗначение
409price_movedЖивой итог по предметам превысил max_price_usd. Заказ отклонён; списания не было. Ответ включает current_total_usd с фактической ценой.
402insufficient_balanceБаланса недостаточно для покрытия суммы заказа.
400steam_account_requiredК аккаунту CSBoard не привязан Steam-аккаунт или нет валидного trade URL.
403trading_not_enabledДля API-ключа не включены покупки. Включите их в профиле.
401unauthorizedОтсутствует или некорректный API-ключ.
429rate_limit_exceededБолее 30 запросов/мин. Перед повтором подождите время, указанное в заголовке Retry-After.
Всегда указывайте max_price_usd в запросе. Цены на живом маркетплейсе могут измениться между моментом запроса /v1/listings и моментом исполнения заказа. Без этой верхней границы с баланса может быть списана более высокая сумма, чем вы планировали, и автоматического отката нет.
Предметы, доставляемые в режиме hold, попадают под торговый холд Steam. Проверяйте поле tradable_at исходного листинга (из GET /v1/listings), чтобы узнать, когда именно удерживаемый предмет станет доступен для обмена в вашем инвентаре Steam.

Авторизации

Authorization
string
header
обязательно

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

Заголовки

Idempotency-Key
string

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

Тело

application/json
item_ids
string[]
обязательно

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.

Ответ

Order accepted and debited.

order_id
string
обязательно
status
enum<string>
обязательно
Доступные опции:
processing,
completed,
failed
total_charged_usd
number
обязательно
items
object[]
balance_after_usd
number
created_at
string<date-time>