Перейти к основному содержанию

Структура 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",     // Фактическая сумма пополнения (НЕ кумулятивная)

  // Блокчейн
  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 — что было фактически отправлено