Перейти до основного вмісту

Структура Payload

Кожна подія містить об’єкт data з даними на момент події. Структура payload однакова для всіх типів подій, але значення полів відрізняються залежно від типу транзакції та етапу її життєвого циклу.
{
  id: "uuid",                          // Ідентифікатор транзакції
  externalId: "string",                // Зовнішній ідентифікатор
  type: "Buy" | "Sale",                // "Buy" = виведення, "Sale" = поповнення
  status: "TransactionStatus",         // Поточний статус

  // Валюта та пара
  pair: "string",                      // Торгова пара: "USDT/TRX" (виведення) або "BTC/USDT" (поповнення)
  currency: "string",                  // Цільова валюта
  network: "string",                   // Блокчейн-мережа: "TRC20", "ERC20", "Bitcoin" тощо

  // Суми (див. розділ "Пояснення полів сум" нижче)
  requestedAmount: "string",           // Чиста сума, яку отримує користувач (виведення) або очікує внести (поповнення)
  expectedAmount: "string",            // Загальна сума з комісією мережі (виведення) або те саме, що requestedAmount (поповнення)
  amount: "string | null",             // Кумулятивна фактична сума. null до обробки.
  usdtTotal: "string | null",          // USDT зарезервовані з утриманням (виведення) або кумулятивна сума USDT зарахована (поповнення)
  exchangeRate: "string | null",       // Попередній курс при створенні, фактичний курс після конвертації
  dealFee: "string | null",            // Комісія, нарахована за транзакцію

  // Інформація про отриманий депозит (тільки для події `deposit_received` поповнення)
  receivedCurrency: "string | null",   // Фактично внесена криптовалюта (цей депозит)
  receivedNetwork: "string | null",    // Мережа отриманого депозиту
  receivedAmount: "string | null",     // Сума окремого депозиту в receivedCurrency (НЕ кумулятивна)

  // Блокчейн
  address: "string",                   // Адреса призначення (виведення) або адреса депозиту (поповнення)
  hash: "string | null",               // Хеш блокчейн-транзакції, порожній рядок до появи
  memo: "string | null",               // Memo/tag для мереж, які цього потребують (XRP, XLM тощо)

  // Метадані
  merchantId: "uuid",                  // Ідентифікатор мерчанта
  cancelReason: "string | null",       // Причина скасування (тільки для подій скасування/помилки)
  createdAt: "ISO 8601",               // Час створення транзакції
  updatedAt: "ISO 8601",               // Час останнього оновлення
  completedAt: "ISO 8601 | null"       // Час завершення, null до фіналізації
}

Пояснення полів сум

Є чотири поля, пов’язані з сумами, і вони мають різне призначення залежно від типу транзакції.

Виведення (Buy)

ПолеЗначенняПриклад
requestedAmountЧиста сума, яку користувач отримає в блокчейні"25" TRX
expectedAmountЗагальна сума з комісією мережі: requestedAmount + networkFee"25.5" TRX
amountФактична надіслана сума (повідомляється після відправки в блокчейн)"25" TRX
usdtTotalUSDT зарезервовані з балансу, включаючи буфер утримання 1.25%"7.52" USDT
Якщо інтегратор передає includeFeeInAmount: true, розрахунок змінюється на зворотний: expectedAmount = початкова сума, requestedAmount = початкова сума - networkFee. Співвідношення завжди: expectedAmount = requestedAmount + networkFee. usdtTotal розраховується так: конвертувати expectedAmount в USDT за попереднім курсом, потім додати буфер утримання 1.25%. Це загальна сума USDT, що списується з балансу мерчанта. Після конвертації надлишок утримання повертається. Приклад:
Ви запитує: вивести 25 TRX
  requestedAmount = "25"       ← що отримає користувач
  expectedAmount  = "25.5"     ← 25 + 0.5 комісія мережі
  exchangeRate    = "0.2971"   ← попередній курс USDT/TRX
  usdtTotal       = "7.68"    ← (25.5 × 0.2971) × 1.0125 буфер утримання

Після відправки в блокчейн:
  amount          = "25"       ← фактично надіслано

Поповнення (Sale)

ПолеЗначенняПриклад
requestedAmountСума, яку інтегратор очікує отримати як депозит"0.001" BTC
expectedAmountТе саме, що requestedAmount"0.001" BTC
amountКумулятивна фактична сума депозитів за всіма частковими внесками"0.0012" BTC
receivedAmountСума окремого депозиту в receivedCurrency (тільки при deposit_received)"0.0005" BTC
usdtTotalКумулятивна сума USDT, зарахована на баланс мерчанта (після комісій)"45.30" USDT
Для поповнення requestedAmount та expectedAmount завжди однакові. Поле amount показує фактичну загальну отриману суму. Порівнюючи amount з expectedAmount, система визначає статус транзакції: Paid (сума рівна), Overpaid (сума більше), Underpaid (сума менше). Приклад:
Ви створює замовлення: депозит 0.001 BTC
  requestedAmount = "0.001"    ← очікуваний депозит
  expectedAmount  = "0.001"    ← те саме значення
  amount          = null       ← депозиту ще немає
  usdtTotal       = null

Після підтвердження депозиту:
  amount          = "0.0012"   ← фактично отримано (переплата)
  usdtTotal       = "45.30"   ← зараховано USDT після комісій
  exchangeRate    = "37750"    ← використаний курс BTC/USDT
  status          = "Overpaid"
Підсумок
ПолеВиведенняЕквайринг
requestedAmountЧиста сума до отримання (без комісії)Очікувана сума депозиту
expectedAmountПовна сума (з комісією мережі)Те саме, що requestedAmount
amountСумаКумулятивна фактична сума депозитів
usdtTotalЗарезервовані USDT (з утриманням 1.25%)Кумулятивна сума зарахованих USDT

Значення статусів

StatusВикористовується вОпис
QueuedВиведенняВ черзі на обробку
NewПоповненняЗамовлення створено, очікується депозит
WaitingПоповненняПідтвердження в блокчейні в процесі
PaidПоповненняДепозит відповідає очікуваній сумі
OverpaidПоповненняДепозит перевищує очікувану суму
UnderpaidПоповненняДепозит менший за очікувану суму
CanceledОбидваТранзакцію скасовано / відхилено / помилка
CurrencyMismatchПоповненняВнесено невірну криптовалюту
CanceledButPaidПоповненняЗамовлення прострочено/відхилено, але отримано точний депозит
CanceledButOverpaidПоповненняЗамовлення прострочено/відхилено, але отримано переплату
CanceledButUnderpaidПоповненняЗамовлення прострочено/відхилено, але отримано недоплату

Логіка валют

Поле currency відображає те, що очікувалося, а не те, що було фактично отримано:
  • Виведення: цільова криптовалюта, що купується (наприклад, "TRX", "BTC")
  • Поповнення: очікувана криптовалюта для депозиту з конфігурації замовлення (наприклад, "BTC")
Фактично отримана криптовалюта вказується в receivedCurrency (див. нижче).

Поля отримання (receivedCurrency, receivedNetwork, receivedAmount)

Ці три поля відображають те, що фактично було внесено в блокчейн для конкретного депозиту. Вони заповнюються тільки для події deposit_received і завжди null для всіх інших подій.
  • receivedAmount містить суму окремого депозиту з конкретного вебхуку, а НЕ кумулятивний підсумок (використовуйте amount для кумулятивного)
  • receivedCurrency — тікер криптовалюти конкретного депозиту
  • receivedNetwork — блокчейн-мережа депозиту
СценарійreceivedCurrencyreceivedNetworkreceivedAmount
Виведення (будь-яка подія)nullnullnull
Поповнення — deposit_receivedфактичний тікер криптовалютимережа депозитусума окремого депозиту
Поповнення — всі інші подіїnullnullnull

Деталі полів за подіями

Події виведення

Полеcreatedcompleteddeclinedfailedcanceled
statusQueuedфінальний статусCanceledCanceledCanceled
amountnullфінальна сумаз БДз БДз БД
hash""хеш блокчейнухешможе бути ""може бути ""
usdtTotalсума резервуфінальне значенняз БДз БДз БД
exchangeRateпопередній курсфактичний курсз БДз БДз БД
dealFee"0"розрахованоз БДз БДз БД
cancelReasonnullnullпричинаповідомлення про помилкупричина відкату
completedAtnullмітка часуnullnullnull
received*nullnullnullnullnull

Події поповнення

Полеcreatedconfirmation_starteddeposit_receivedcompleted / overpaid / underpaid / currency_mismatchdeclinedcanceled
statusNewWaitingзалежитьзалежитьзалежитьCanceled
currencyочікувана криптовалютаочікувана криптовалютаочікувана криптовалютаочікувана криптовалютаочікувана криптовалютаочікувана криптовалюта
receivedCurrencynullnullфактична криптовалютаnullnullnull
receivedNetworknullnullмережа депозитуnullnullnull
receivedAmountnullnullсума окремого депозитуnullnullnull
amountnullnullкумулятивнакумулятивнакумулятивна або nullnull
hash""хеш блокчейнухешхешхеш""
usdtTotalnullnullкумулятивна USDTкумулятивна USDTкумулятивна або nullnull
exchangeRatenullnullзважене середнєзважене середнєз БДnull
dealFeenullnullрозрахованорозрахованоз БДnull
completedAtnullnullякщо доступноякщо доступноякщо доступноnull
cancelReasonnullnullnullnullnullnull
Примітки:
  • deposit_received завжди відправляється разом з одним із: completed, overpaid, underpaid або currency_mismatch
  • declined може мати або не мати дані депозиту, залежно від того, чи були отримані депозити до відхилення
  • Суми поповнення є кумулятивними за кількома депозитами (кожен вебхук was_final_exchange додається до загальної суми)
  • Для currency_mismatch поле currency показує, що очікувалося, а receivedCurrency — що було фактично надіслано