Статичні гаманці
Постійні депозитні адреси, прив'язані до конкретного замовлення або користувача, ідеальні для повторюваних та довгострокових платежів.
Статичні гаманці — це постійні адреси для прийому криптовалютних платежів. Вони пов'язані з конкретним order_id і є унікальними за комбінацією project_id + order_id + currency + network.
Використовуйте статичні гаманці для:
- Повторюваних депозитів від одного й того самого користувача
- Довгострокових платіжних адрес, що відображаються у профілі користувача
- Високооб'ємних потоків депозитів, де ви хочете мати стабільну адресу для кожного користувача
Створити статичний гаманець
/v1/static-walletПараметри запиту
| Поле | Тип | Обов'язкове | Опис |
|---|---|---|---|
currency | string | так | Криптовалюта (USDT, BTC, ETH тощо) |
network | string | так | Код мережі |
order_id | string | так | Ваш ID замовлення/користувача (до 255 символів) |
label | string | ні | Мітка гаманця (до 255 символів) |
url_callback | string | так | URL для webhook-сповіщень |
invite_code | string | ні | Код реферера |
Приклад запиту
{
"currency": "USDT",
"network": "TRX-TRC20",
"order_id": "USER-123",
"label": "User deposit #123",
"url_callback": "https://your-site.com/webhook/static"
}Приклад відповіді
{
"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.
/v1/static-wallet/infoПараметри запиту
| Поле | Тип | Обов'язкове | Опис |
|---|---|---|---|
uuid | string | так* | UUID статичного гаманця |
address | string | так* | Блокчейн-адреса гаманця |
Принаймні одне з полів uuid або address є обов'язковим.
Приклад відповіді
{
"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) (завжди присутній для статичних гаманців, адресу призначають під час створення).
Список гаманців
/v1/static-wallet/listПараметри запиту
| Поле | Тип | Обов'язкове | Опис |
|---|---|---|---|
status | string | ні | Фільтрувати за статусом (active, inactive) |
currency | string | ні | Фільтрувати за валютою |
network | string | ні | Фільтрувати за мережею |
order_id | string | ні | Фільтрувати за order_id |
page | int | ні | Номер сторінки (за замовчуванням: 1) |
per_page | int | ні | Елементів на сторінці (за замовчуванням: 20, максимум: 100) |
Приклад відповіді
{
"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
}
}
}Увімкнути / вимкнути гаманець
Перемикає, чи приймає статичний гаманець нові платежі.
/v1/static-wallet/disable/v1/static-wallet/enableЗапит
Обидва endpoints приймають єдиний параметр:
{
"uuid": "019b2265-34d8-7001-a230-8f97de90d481"
}Приклад відповіді
{
"state": 0,
"result": {
"uuid": "019b2265-34d8-7001-a230-8f97de90d481",
"status": "inactive",
"message": "Static wallet disabled successfully"
}
}Для enable status дорівнює "active", а message — "Static wallet enabled successfully".
Транзакції гаманця
Отримайте список усіх депозитів, отриманих статичним гаманцем.
/v1/static-wallet/transactionsПараметри запиту
| Поле | Тип | Обов'язкове | Опис |
|---|---|---|---|
uuid | string | так | UUID статичного гаманця |
date_from | date | ні | Початкова дата (YYYY-MM-DD) |
date_to | date | ні | Кінцева дата (YYYY-MM-DD) |
page | int | ні | Номер сторінки (за замовчуванням: 1) |
per_page | int | ні | Елементів на сторінці (за замовчуванням: 15, максимум: 5000) |
Приклад відповіді
{
"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
{
"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.
Опис полів
| Поле | Тип | Опис |
|---|---|---|
uuid | string | UUID транзакції (рахунка) для цього депозиту |
order_id | string | Ваш order_id статичного гаманця |
amount | decimal (8 dp) | Отримана сума криптовалюти |
currency | string | Отримана криптовалюта (відповідає currency гаманця) |
amount_usd | decimal (8 dp) | Вартість у USD на момент отримання |
exchange_rate | decimal | Використаний курс crypto / USD |
payer_currency | string | Те саме, що й currency, для статичних гаманців |
payer_amount | decimal (8 dp) | Те саме, що й amount, для статичних гаманців |
network | string | Блокчейн-мережа |
address | string | Адреса статичного гаманця |
payment_status | string | ???????? ?????? ????????; ???????? paid, ??? AML-????????? ???? ???? aml_lock, ???? ?? ????? ???????????? ??????????? |
txid | string | Хеш блокчейн-транзакції |
tx_explorer_url | string | null | Посилання на транзакцію в блокчейн-експлорері. null, якщо txid відсутній або переказ є внутрішнім P2P. |
payment_amount | decimal (8 dp) | Те саме, що й amount |
merchant_amount | decimal (18 dp) | Сума після утримання комісії — використовуйте її для зарахування |
created_at | string (ISO 8601) | Коли депозит було отримано |
sign | string (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 повинна робити звірку швидкою, але звірка має бути повною.