Размещение заказов
Размещение заказов
Создайте заказ, а затем отслеживайте его до терминального статуса
Размещение заказа — это единственный вызов POST /api/v1/orders. Он списывает
средства с баланса вашего аккаунта и сразу возвращает 201 со status: "pending". Выполнение происходит асинхронно — окончательный результат приходит
на ваш webhook и всегда доступен для чтения из
GET /api/v1/orders/{id}.
Типы товаров
Каждый товар каталога имеет тип продукта, который определяет, что вы должны отправить:
item_id товара, тип продукта, границы количества и определения полей вы
узнаёте из экспорта каталога — отдельного канала данных, а не части этого
API. API не предоставляет эндпоинта для просмотра каталога.
Поля запроса
item_id(целое число, обязательно) — числовой id товара из каталога.quantity(число) — см. таблицу типов товаров выше. Должно быть в пределах диапазона min/max товара.key: целое количество (по умолчанию1).topup: десятичная сумма (обязательно).service: пропустите — оно всегда1.
merchant_order_id(строка, необязательно) — ваш собственный идентификатор, уникальный в пределах аккаунта. Используйте его для идемпотентности и для связывания событий webhook с вашими записями.fields(объект) — обязательны только для товаровtopupиservice, индексированы по именам полей товара. Товарыkeyне принимаютfields.
Значения полей: текст против выбора
Каждое поле товара является либо текстовым полем, либо полем выбора:
- Текстовое поле → отправляйте значение как строку (например,
"player_id": "123456789"). - Поле выбора → отправляйте числовой id выбора, а не метку (например,
"server": 17, где17— это id выбора «Europe (EU-West)»).
В ответах отправленные fields возвращаются с рендерингом значений выбора как
их читабельных отображаемых названий (например, "server": "Europe (EU-West)"), даже если вы отправили числовой id. Это только для отображения —
при создании продолжайте отправлять числовые id выбора.
Создание заказа
cURL
Python
Успешное создание возвращает 201 с заказом в состоянии pending:
Жизненный цикл заказа
Заказ начинается в состоянии pending, может ненадолго перейти в processing,
а затем завершается одним из трёх терминальных статусов:
codes— строки доставленных ключей, для товаров типаkey.refund_amount— сумма, возвращённая за недоставленные единицы для заказаpartialилиfailed.error/error_message— устанавливаются, когдаstatusравенfailed(например,error: "OUT_OF_STOCK").
Товар, которого нет в наличии на момент создания, отклоняется сразу как
ошибка валидации 400 («Item is not available»). Если запас или выполнение дают
сбой после принятия заказа, заказ завершается терминальным
status: "failed" (отображается на вашем webhook) — а не HTTP-ошибкой. См.
Ошибки.
Чтение заказа
Получите текущее состояние любого из своих заказов с помощью
GET /api/v1/orders/{id}:
cURL
Python
GET /api/v1/orders/{id} возвращает 404 (code: "not_found") для заказа,
который не существует или не принадлежит вашему аккаунту. В API нет
эндпоинта для получения списка заказов — просматривайте заказы в дашборде.
Webhook против опроса
Предпочитайте webhook: Voodoo Center отправляет терминальное событие
на ваш URL, как только заказ завершается — опрос не нужен. Опрос
GET /api/v1/orders/{id} — это приемлемый запасной вариант (например, если
доставка webhook была пропущена), но webhook — это путь с меньшей задержкой и
меньшей нагрузкой.