Sign in
Платежі та виплати/Payment API

Payment API

Створюйте та керуйте сесіями криптовалютних платежів за допомогою Payment API від 2328.io.

Payment API дозволяє створювати платіжні сесії, перенаправляти клієнтів на хостинговий checkout та відстежувати статус платежу.

Створити платіж

Створює платіжну сесію та повертає URL, за яким клієнт здійснює оплату.

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

ПолеТипОбов'язковеОписЗначення
amountdecimalтакСума платежу у валюті, наприклад, 100.00
currencystringтакФіатна валюта (USD, EUR, RUB, …) або криптовалюта (USDT, TRX, BTC, …)
order_idstringтакВаш ID замовлення, наприклад, ORDER-12345 (до 128 символів)
to_currencystringніПопередньо обрана криптовалюта
networkstringні*Код мережі (обов'язковий, якщо встановлено to_currency або currency є криптовалютою)
url_returnstringніURL перенаправлення після оплати, наприклад, https://your-site.com/return
url_successstringніАльтернатива url_return
url_callbackstringтакURL для webhook-сповіщень, наприклад, https://your-site.com/webhook
invite_codestringніКод реферера
fee_splitdecimalніЧастка мерчант-комісії, що передається платнику, 0–100 (%). 0 = мерчант сплачує повністю, 100 = платник сплачує повністю. Перевизначає налаштування рівня проєкту. Приклад: 30 (платник покриває 30% комісії).
price_markupdecimalніНацінка або знижка на суму рахунку, від −99 до 100 (%). Перевизначає налаштування рівня проєкту. Приклад: 5 (+5%) або -10 (знижка 10%).
descriptionstringніНеобов'язковий опис рахунку (макс. 200 символів). Відображається платнику на сторінці оплати. Приклад: Premium plan — Order #12345.
ttl_secondsintніЧас життя рахунку в секундах, від 300 (5 хвилин) до 86400 (24 годин). Після цього часу рахунок завершується й сплатити його більше не можна. За замовчуванням: 3600 (1 година). Приклад: 3600.

Відповідь

JSON
{
  "state": 0,
  "result": {
    "uuid": "abc123-def456-...",
    "order_id": "ORDER-12345",
    "amount": "100.00",
    "currency": "USD",
    "amount_usd": "100.00",
    "exchange_rate": null,
    "url": "https://2328.io/pay/abc123-def456-...",
    "tg_deeplink": "https://t.me/my2328bot?start=pay_abc123-def456-...",
    "expires_at": "2026-01-11T21:00:00Z",
    "created_at": "2026-01-11T20:00:00Z",
    "payer_currency": "USDT",
    "payer_amount": "100.50",
    "network": "TRX-TRC20",
    "address": "TXYZabc123...",
    "payment_status": "check",
    "txid": null,
    "payment_amount": null,
    "qr": "data:image/png;base64,iVBORw0..."
  }
}
  • Перенаправте клієнта на result.url для завершення оплати.
  • tg_deeplink — deeplink Telegram-бота для оплати через Telegram MiniApp.
  • qr — QR-код депозитної адреси, закодований у base64 (data URI). Присутній, коли адресу вже призначено (коли network встановлено разом із to_currency або коли currency є криптовалютою); інакше null.
  • txid, payment_amountnull, доки клієнт не оплатить. Заповнюються після виявлення транзакції у блокчейні. Слухайте webhook payment_status: paid, щоб дізнатися момент.
  • exchange_ratenull, якщо конвертація ще не застосовна (наприклад, курс фіат → крипто ще не зафіксовано). Заповнюється після вибору валюти платника.
Credentials
RequestPOST/v1/payment
curl -X POST https://api.2328.io/api/v1/payment \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.

Розміщена каса, H2H та точні крипто-суми

Той самий кінцевий пункт підтримує три різних форми рахунків. Оберіть одну свідомо; не змішуйте їх семантику сум.

Розміщена каса з вибором платника

Надішліть amount, currency, order_id та url_callback, але пропустіть to_currency та network. Відповідь містить result.url; address, qr та іноді поля платника залишаються null, поки платник не обере напрямок на розміщеній сторінці.

JSON
{
  "amount": "125.00",
  "currency": "EUR",
  "order_id": "ORDER-2026-1042",
  "url_callback": "https://merchant.example/webhooks/2328",
  "url_return": "https://merchant.example/orders/ORDER-2026-1042"
}

Прямий рахунок H2H

Надішліть обидва to_currency та network. 2328.io створює блокчейн-рахунок під час виклику API, тому успішну відповідь можна відобразити безпосередньо у вашому оформленні замовлення без перенаправлення клієнта.

JSON
{
  "amount": "100.00",
  "currency": "USD",
  "to_currency": "USDT",
  "network": "TRX-TRC20",
  "order_id": "ORDER-2026-1043",
  "url_callback": "https://merchant.example/webhooks/2328"
}

Відображайте ці значення точно так, як вони повернуті:

  • payer_amount та payer_currency — інструкція для оплати;
  • network та address — єдина адреса для цього рахунку;
  • qr — data URI для тієї ж адреси;
  • expires_at — термін дії рахунку;
  • url — корисний розміщений резервний варіант, коли кастомне оформлення замовлення не може бути завершене.

Ніколи не генеруйте та не замінюйте адресу, не використовуйте адресу з іншого рахунку-фактури та не обчислюйте payer_amount за публічною спотовою ціною. Відповідь API є авторитетною.

Рахунок-фактура на точну суму криптовалюти

Помістіть криптовалюту в currency, коли сам рахунок-фактура номінований у криптовалюті:

JSON
{
  "amount": "25.000000",
  "currency": "USDT",
  "network": "TRX-TRC20",
  "order_id": "ORDER-2026-1044",
  "url_callback": "https://merchant.example/webhooks/2328"
}

Запитувана вартість криптовалюти збережена в payer_currency / payer_amount. Сервіс також може підтримувати внутрішню оцінку в USD для обліку та полів курсу; не замінюйте точну інструкцію щодо криптовалюти на цю оцінку. Зберігайте повернені десяткові рядки, включаючи кінцеву точність.

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

Ідемпотентність та повторні спроби

order_id прив'язується до аутентифікованого проекту продавця та слугує ключем ідемпотентності створення. Якщо платіж вже існує, API повертає ту сесію з state: 0.

Повторна спроба з тим самим order_id не not означає «оновити цей рахунок». Змінені сума, валюта, зворотний виклик, націнка, TTL або поля напрямку можуть бути проігноровані, оскільки повертається існуюча сесія. Збережіть перший запит і відхиляйте конфліктні повторні спроби у вашому власному застосунку.

Рекомендований алгоритм створення:

  1. Вставте вашу локальну спробу оплати та унікальний order_id в одну транзакцію бази даних.
  2. Надішліть підписаний API-запит.
  3. Збережіть повернутий uuid та повну відповідь.
  4. Якщо HTTP-результат втрачено, повторіть ідентичний запит або виконайте запит /v1/payment/info за допомогою order_id.
  5. Ніколи не створюйте друге локальне замовлення тільки через те, що запит до зворотного сервера вичерпав час очікування.

Крайні випадки оплати

СитуаціяПравильне оброблення
address / qr є nullНапрямок платника не був ініціалізований. Перенаправте до url або створіть новий правильно вказаний рахунок H2H з новим order_id.
Помилка перевірки HTTP 400Прочитайте поле на рівні errors; не повторюйте спробу з незмінним введенням.
HTTP 429Спробуйте знову з експоненційним відступом з джитером і залиште той самий order_id.
HTTP 503 / direction_disabledОновіть /v1/directions; тимчасово приховайте напрямок або спробуйте пізніше.
Час очікування запиту клієнта минувВважайте результат невідомим. Запитайте за order_id перед створенням чогось іншого.
underpaid_checkЗберігайте часткову подію та очікуйте поповнення або пізнішого статусу. Не нараховуйте двічі, коли надходять додаткові txids.
underpaidОстаточний стан недоплати. Застосовуйте налаштовану політику виконання/ручного перегляду до фактично нарахованої суми.
overpaidУспішна оплата з надлишком коштів. Виконуйте ідемпотентно та зберігайте фактичні суми для політики звірки/повернення.
aml_lockНе здійснюйте автоматичне виконання або випуск коштів; направте до робочого процесу відповідності/підтримки.
cancelРахунок прострочено або скасовано. Не робіть висновків, що пізній он-чейн переказ неможливий; звіряйте будь-яку пізнішу подію з підтримкою.

URL-адреса повернення браузера використовується лише для навігації. Клієнт може відкрити її без оплати, закрити після оплати або переграти пізніше. Лише підтверджений стан API/webhook може завершити замовлення торговця.

Інформація про платіж

Отримати поточний статус платежу за uuid або order_id.

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

ПолеТипОбов'язковеОписЗначення
uuidstringтак*UUID платежу (з result.uuid під час створення)
order_idstringтак*Ваш ID замовлення

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

RequestPOST/v1/payment/info
curl -X POST https://api.2328.io/api/v1/payment/info \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.

Список платежів

Отримати список усіх платежів із фільтрацією та пагінацією.

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

ПолеТипОбов'язковеОписЗначення
statusstringніФільтрувати за статусом платежу (див. References)
date_fromdateніПочаткова дата (YYYY-MM-DD), наприклад, 2026-01-01
date_todateніКінцева дата (YYYY-MM-DD), наприклад, 2026-01-31
pageintніНомер сторінки, за замовчуванням 1
per_pageintніЕлементів на сторінці, за замовчуванням 15, максимум 5000
RequestPOST/v1/payment/list
curl -X POST https://api.2328.io/api/v1/payment/list \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.