Настройка
Включите торговлю для ключа
Перейдите в API-профиль и переключите тумблер buying для нужного ключа. До этого каждый вызов
POST /v1/orders будет возвращать 403 trading_not_enabled.Привяжите аккаунт Steam и trade URL
Ордера доставляются напрямую в Steam, поэтому в профиле должны быть привязаны Steam-аккаунт и действующий trade URL. Без этого API возвращает
400 steam_account_required.Пополните баланс CSBoard
Покупки списываются с вашего существующего баланса CSBoard. Пополняйте его на сайте — через сам API нет пути оплаты картой или криптовалютой.
Найдите листинги для покупки
Запросите
GET /v1/listings, чтобы найти предметы и собрать их поля id. Каждое значение id в ответе — это стабильная ссылка, которую вы передаёте непосредственно в эндпоинт ордеров.Защита от перерасхода
Вам всегда списывается актуальная цена в момент исполнения, а не цена, которую вы видели при просмотре листингов. Рынки движутся — листинг, который вы получили 30 секунд назад, мог быть перевыставлен по более высокой цене к моменту исполнения ордера. Используйтеmax_price_usd как потолок общей суммы. Списание атомарно: если на момент исполнения актуальная сумма превышает ваш потолок, весь ордер отклоняется с 400 price_moved — ничего не списывается и ни один предмет не передаётся.
Если цена изменилась и вы получили 400, в теле ответа есть current_total_usd, чтобы вы могли решить, перепосылать ли запрос с более высоким потолком или прервать сделку:
Идемпотентность
Сетевые сбои случаются. Без идемпотентности повтор после таймаута может купить один и тот же предмет дважды. Чтобы этого избежать, отправляйте уникальный заголовокIdempotency-Key с каждым запросом ордера.
- Если сервер получает два запроса с одинаковым ключом, он воспроизводит исходный результат ордера — покупка никогда не выполняется повторно.
- Также можно передать
idempotency_keyв теле запроса вместо заголовка; эффект одинаковый. - Используйте UUID v4, сгенерированный на каждую попытку ордера, а не на каждый повтор.
Пример ответа
Успешный ордер возвращает200 с деталями ордера и вашим оставшимся балансом:
Доставка
Каждый предмет в ответе ордера содержит полеdelivery:
instant— предмет торгуем прямо сейчас и будет отправлен по вашему Steam trade URL немедленно.hold— предмет находится под trade hold в Steam. Смотрите полеtradable_atлистинга (ISO 8601 timestamp), чтобы узнать, когда он станет торгуемым.
Справочник ошибок
| Код | HTTP-статус | Значение |
|---|---|---|
price_moved | 400 | Актуальная цена превысила max_price_usd — ответ содержит current_total_usd |
insufficient_balance | 402 | Ваш баланс CSBoard ниже общей суммы ордера |
steam_account_required | 400 | К профилю не привязан Steam-аккаунт или trade URL |
trading_not_enabled | 403 | У API-ключа не включена покупка |