Sign in
Платежі та виплати/Статичні гаманці

Статичні гаманці

Постійні депозитні адреси, прив'язані до конкретного замовлення або користувача, ідеальні для повторюваних та довгострокових платежів.

Статичні гаманці — це постійні адреси для прийому криптовалютних платежів. Вони пов'язані з конкретним order_id і є унікальними за комбінацією project_id + order_id + currency + network.

Використовуйте статичні гаманці для:

  • Повторюваних депозитів від одного й того самого користувача
  • Довгострокових платіжних адрес, що відображаються у профілі користувача
  • Високооб'ємних потоків депозитів, де ви хочете мати стабільну адресу для кожного користувача

Створити статичний гаманець

POST/v1/static-wallet

Параметри запиту

ПолеТипОбов'язковеОпис
currencystringтакКриптовалюта (USDT, BTC, ETH тощо)
networkstringтакКод мережі
order_idstringтакВаш ID замовлення/користувача (до 255 символів)
labelstringніМітка гаманця (до 255 символів)
url_callbackstringтакURL для webhook-сповіщень
invite_codestringніКод реферера

Приклад запиту

JSON
{
  "currency": "USDT",
  "network": "TRX-TRC20",
  "order_id": "USER-123",
  "label": "User deposit #123",
  "url_callback": "https://your-site.com/webhook/static"
}

Приклад відповіді

JSON
{
  "state": 0,
  "result": {
    "uuid": "019b2265-34d8-7001-a230-8f97de90d481",
    "address": "TXYZabc123...",
    "currency": "USDT",
    "network": "TRX-TRC20",
    "label": "User deposit #123",
    "order_id": "USER-123",
    "status": "active",
    "url": "https://go.2328.io/static/019b2265-34d8-7001-a230-8f97de90d481",
    "created_at": "2026-01-20T12:00:00Z",
    "qr": "data:image/png;base64,iVBORw0..."
  }
}

Інформація про гаманець

Отримайте інформацію про статичний гаманець за uuid або address.

POST/v1/static-wallet/info

Параметри запиту

ПолеТипОбов'язковеОпис
uuidstringтак*UUID статичного гаманця
addressstringтак*Блокчейн-адреса гаманця

Принаймні одне з полів uuid або address є обов'язковим.

Приклад відповіді

JSON
{
  "state": 0,
  "result": {
    "uuid": "019b2265-34d8-7001-a230-8f97de90d481",
    "address": "TXYZabc123...",
    "currency": "USDT",
    "network": "TRX-TRC20",
    "status": "active",
    "total_received": "1250.50",
    "transactions_count": 3,
    "created_at": "2026-01-20T12:00:00Z",
    "qr": "data:image/png;base64,iVBORw0..."
  }
}
  • total_received — сума всіх депозитів, отриманих цим гаманцем, у currency.
  • transactions_count — кількість отриманих депозитів на цей момент.
  • qr — QR-код депозитної адреси, закодований у base64 (data URI) (завжди присутній для статичних гаманців, адресу призначають під час створення).

Список гаманців

POST/v1/static-wallet/list

Параметри запиту

ПолеТипОбов'язковеОпис
statusstringніФільтрувати за статусом (active, inactive)
currencystringніФільтрувати за валютою
networkstringніФільтрувати за мережею
order_idstringніФільтрувати за order_id
pageintніНомер сторінки (за замовчуванням: 1)
per_pageintніЕлементів на сторінці (за замовчуванням: 20, максимум: 100)

Приклад відповіді

JSON
{
  "state": 0,
  "result": {
    "items": [
      {
        "uuid": "019b2265-...",
        "address": "TXYZabc123...",
        "currency": "USDT",
        "network": "TRX-TRC20",
        "status": "active",
        "total_received": "1250.50",
        "transactions_count": 3
      }
    ],
    "paginate": {
      "count": 1,
      "current_page": 1,
      "per_page": 20,
      "total": 1,
      "total_pages": 1,
      "has_more": false
    }
  }
}

Увімкнути / вимкнути гаманець

Перемикає, чи приймає статичний гаманець нові платежі.

POST/v1/static-wallet/disable
POST/v1/static-wallet/enable

Запит

Обидва endpoints приймають єдиний параметр:

JSON
{
  "uuid": "019b2265-34d8-7001-a230-8f97de90d481"
}

Приклад відповіді

JSON
{
  "state": 0,
  "result": {
    "uuid": "019b2265-34d8-7001-a230-8f97de90d481",
    "status": "inactive",
    "message": "Static wallet disabled successfully"
  }
}

Для enable status дорівнює "active", а message"Static wallet enabled successfully".

Транзакції гаманця

Отримайте список усіх депозитів, отриманих статичним гаманцем.

POST/v1/static-wallet/transactions

Параметри запиту

ПолеТипОбов'язковеОпис
uuidstringтакUUID статичного гаманця
date_fromdateніПочаткова дата (YYYY-MM-DD)
date_todateніКінцева дата (YYYY-MM-DD)
pageintніНомер сторінки (за замовчуванням: 1)
per_pageintніЕлементів на сторінці (за замовчуванням: 15, максимум: 5000)

Приклад відповіді

JSON
{
  "state": 0,
  "result": {
    "items": [
      {
        "uuid": "abc123-def456-...",
        "order_id": "USER-123",
        "amount": "100.00",
        "currency": "USDT",
        "payment_status": "paid",
        "txid": "0xabc123def456...",
        "fee_amount": "3.00",
        "net_amount": "97.00",
        "created_at": "2026-01-20T15:30:00Z"
      }
    ],
    "paginate": {
      "count": 1,
      "hasPages": true,
      "perPage": 15,
      "page": 1
    }
  }
}
  • fee_amount — платформна комісія, утримана з цього депозиту, у currency.
  • net_amount — сума, зарахована на мерчант-баланс після комісії.

Webhooks статичних гаманців

Коли на статичний гаманець надходить платіж, система надсилає webhook на url_callback.

Формат webhook для статичних гаманців відрізняється від звичайних webhooks платежів. Зокрема, webhooks статичних гаманців містять поле merchant_amount, яке слід використовувати для зарахування.

Payload webhook

JSON
{
  "uuid": "a28b293f-5c76-4053-8062-ae9ca4ab784b",
  "order_id": "USER-7666308594",
  "amount": "10.00000000",
  "currency": "USDT",
  "amount_usd": "10.00000000",
  "exchange_rate": "1.00000000",
  "payer_currency": "USDT",
  "payer_amount": "10.00000000",
  "network": "TRX-TRC20",
  "address": "TMU9Tgpchvgbywkbj5SdC8KJS73t5m3M7G",
  "payment_status": "paid",
  "txid": "8369ede26a0da05b1bae154b4bb4072eb2453db30ba86b21831902670929454f",
  "tx_explorer_url": "https://tronscan.org/#/transaction/8369ede26a0da05b1bae154b4bb4072eb2453db30ba86b21831902670929454f",
  "payment_amount": "10.00000000",
  "merchant_amount": "9.920000000000000000",
  "created_at": "2026-05-09T16:13:04+03:00",
  "sign": "dd958d1405febce670a9a196e9141784b9f2a5f39cd6d1832d6f3f68d0de1e10"
}

Webhooks статичних гаманців не містять url та expires_at (оскільки адреса є постійною, а не сесією). Вони містять exchange_rate та created_at.

Опис полів

ПолеТипОпис
uuidstringUUID транзакції (рахунка) для цього депозиту
order_idstringВаш order_id статичного гаманця
amountdecimal (8 dp)Отримана сума криптовалюти
currencystringОтримана криптовалюта (відповідає currency гаманця)
amount_usddecimal (8 dp)Вартість у USD на момент отримання
exchange_ratedecimalВикористаний курс crypto / USD
payer_currencystringТе саме, що й currency, для статичних гаманців
payer_amountdecimal (8 dp)Те саме, що й amount, для статичних гаманців
networkstringБлокчейн-мережа
addressstringАдреса статичного гаманця
payment_statusstring???????? ?????? ????????; ???????? paid, ??? AML-????????? ???? ???? aml_lock, ???? ?? ????? ???????????? ???????????
txidstringХеш блокчейн-транзакції
tx_explorer_urlstring | nullПосилання на транзакцію в блокчейн-експлорері. null, якщо txid відсутній або переказ є внутрішнім P2P.
payment_amountdecimal (8 dp)Те саме, що й amount
merchant_amountdecimal (18 dp)Сума після утримання комісії — використовуйте її для зарахування
created_atstring (ISO 8601)Коли депозит було отримано
signstring (hex)Підпис HMAC-SHA256 payload

Найкращі практики

  • Унікальний order_id — використовуйте унікальний order_id для кожного користувача або замовлення
  • Ідемпотентність — перевіряйте txid перед обробкою, щоб уникнути дублювання зарахувань
  • Перевіряйте підписи — ЗАВЖДИ перевіряйте підпис sign перед зарахуванням коштів
  • Використовуйте merchant_amount — зараховуйте користувачам на основі merchant_amount, а не payment_amount

Життєвий цикл та ідемпотентність

Статичний гаманець — це багаторазовий ідентифікатор депозиту, а не рахунок-фактура. Він не має очікуваної суми та терміну дії. Одна адреса може створювати будь-яку кількість депозитних транзакцій протягом свого існування.

Створення є ідемпотентним для того самого проекту продавця, order_id, currency і network: повертається існуючий гаманець. Зберігайте цей кортеж стабільним і зберігайте повернений гаманець uuid; не використовуйте новий order_id кожного разу, коли той самий клієнт відкриває екран депозиту.

Ідемпотентність депозиту відрізняється від ідемпотентності гаманця:

  • order_id ідентифікує відношення багаторазового гаманця/клієнта;
  • гаманець uuid ідентифікує постійний запис гаманця;
  • вебхук uuid ідентифікує одну виявлену транзакцію депозиту;
  • txid ідентифікує трансфер у ланцюзі та є основним ключем для уникнення дублювання при нарахуванні.

Використовуйте обмеження унікальності бази даних для обробленої ідентичності ланцюга/мережі/txid і фіксуйте це в тій же транзакції, яка нараховує внутрішній баланс клієнта.

Увімкнути та вимкнути семантику

Вимкнення гаманця заважає застосунку обробляти його як активну ціль депозиту; це не видаляє адресу або її історію і не може зупинити трансфер блокчейну, вже здійснений користувачем.

Ніколи не кажіть користувачам, що кошти, надіслані на неактивну адресу, автоматично повертаються. Транзакції в блокчейні є незворотними. Деактивуйте адресу лише після видалення її з вашого інтерфейсу та забезпечте наявність діючої процедури відновлення для пізніх депозитів.

Повторне увімкнення зберігає ту ж ідентичність гаманця та адресу. Не створюйте заміну лише для зміни мітки; мітки не є ідентифікаторами розрахунків.

Статичні випадки використання гаманця

СитуаціяПравильне поводження
Дублюючий запит на створенняПрийміть наявний гаманець і перевірте його збережену пару замість очікування нової адреси.
Кілька депозитів на одну адресуСтворюйте окремий локальний рядок депозиту для кожної транзакції uuid/txid; ніколи не позначайте сам гаманець як «оплачено.»
Дубльований вебхукПовертайте HTTP 200 після знаходження вже зафіксованого txid; більше ніколи не зараховувати.
Затримка підтвердження або повторне спостереження блокчейнуЗберігайте обробку ідемпотентною та звіряйте з /v1/static-wallet/transactions.
Депозит менший за мінімальний автоматичний конвертованийОчікуйте зарахування валюти джерела без завершеного блоку convert.
Автоматичне конвертування успішнеЗберігайте значення платежу джерела та результат цільового convert окремо.
Неправильний токен або неправильна мережаНе створюйте кредит. Записуйте докази та передавайте на підтримку/відновлення, оскільки можливість відновлення залежить від конкретного ланцюга.
Ланцюг на основі мемо/тегуВідображайте та перевіряйте всі поля призначення, які повертає платформа; адреси однієї може бути недостатньо, коли потрібне мемо.
AML блокуванняНе нараховуйте кошти кінцевому користувачу до того часу, поки авторитетний статус не буде підтверджено через процес дотримання.
Гаманець відключено після показу адресиНегайно видаліть його з інтерфейсу, але продовжуйте моніторити операційні сповіщення щодо пізніх трансферів.

Модель звірки

Запустіть періодичну задачу, яка переглядає /v1/static-wallet/transactions, оновлює депозити за txid і порівнює їхні merchant_amount, статус та необов’язковий результат конверсії з вашим внутрішнім реєстром. Доставка через Webhook повинна робити звірку швидкою, але звірка має бути повною.