Шаг 1 — создать заказ (зафиксировать цену). Депозит НЕ списывается.

POST/api/reseller/order/create
curl -X POST https://hexpay.live/api/reseller/order/create \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "custom_id": "a4cee2fe-ce8c-448b-bf2c-000000000001",
    "product": "stars",
    "recipient_username": "durov"
  }'
Paste your key in the menu and it will replace <YOUR_API_KEY>.
{
  "success": true,
  "custom_id": "a4cee2fe-ce8c-448b-bf2c-000000000001",
  "status": "created",
  "total_to_pay_rub": 132.07,
  "total_to_pay_nano": 132070,
  "expires_at": "2026-08-21T12:30:00Z"
}

Authorization

Header Authorization: Bearer <key> on every request. The key is issued in the cabinet and shown once. It spends your deposit: keep it on the server.

Request body

custom_idstringrequired

UUID, придумываете вы — ключ идемпотентности

productstringrequired
one of:starspremium_3mpremium_6mpremium_12mgiftsteamneuralgameapplespotify_pairingspotify_auto
recipient_usernamestringrequired

Telegram-юзернейм для stars/premium/gift; ЛОГИН аккаунта для steam. Для neural, game и apple не нужен — коды выдаются вам.

quantityintegeroptional

Смысл зависит от товара: • stars — количество звёзд (50…1 000 000) • steam — СУММА ПОПОЛНЕНИЯ В РУБЛЯХ (50…50 000) • game — количество пакетов (1…10) • apple — количество карт (1…10, точные границы и шаг — в каталоге) • premium/gift/neural — не передаётся

stars_countintegeroptional

семантичный алиас quantity для product=stars

amount_rubintegeroptional

семантичный алиас quantity для product=steam (сумма пополнения)

packages_countintegeroptional

семантичный алиас quantity для product=game

cards_countintegeroptional

семантичный алиас quantity для product=apple

gift_idstringoptional

Только для product=gift. Берётся из GET /api/reseller/gifts.

messagestringoptional

Только для product=gift. Открытка — текст, который получатель увидит вместе с подарком. Длина считается в UTF-16 code units, как это делает Telegram (эмодзи занимает два). Длиннее — 400, обрезать молча мы не будем.

hide_namebooleanoptional

Только для product=gift. Скрыть отправителя — получатель увидит подарок анонимным.

codestringoptional

Только для product=neural. Код позиции из GET /api/reseller/neural.

product_refstringoptional

Готовая строка из каталога: • game — <game>:<region>:<service_id> из GET /api/reseller/games • apple — <COUNTRY>:<service_id> из GET /api/reseller/apple • spotify — <mode>:<plan>:<months> из GET /api/reseller/spotify

fieldsobjectoptional

• игры с delivery=topup — ключи из массива fields каталога игр (например account_number, zone_id); • Spotify — email аккаунта, а для spotify_auto ещё и password. В режиме pairing пароль присылать НЕЛЬЗЯ: запрос вернёт 400. Так сделано намеренно — молча проигнорированный пароль остался бы в ваших логах в уверенности, что он был нужен.

callback_urlstringoptional

https, опционально — вебхук о доставке

Response fields

successbooleanoptional
custom_idstringoptional
statusstringoptional
total_to_pay_rubnumberoptional
total_to_pay_nanointegeroptional
expires_atstringoptional

до этого момента держится зафиксированная цена; потом неоплаченный заказ отменяется (status=cancelled) и его надо создавать заново с новым custom_id

When it fails

400
401
409Позиции нет в наличии — заказ не создан, деньги не тронуты
503Товар временно недоступен
Собираем анонимную аналитику посещений. Подробнее