Увійти

Документація API
  • Головний
  • Отримання ключів APIФормат запиту
  • Виплати
    Починаємо Створення рахунку -фактури Створення статичного гаманця Генерувати QR-код Блокуйте статичний гаманець Повернення платежів за заблокованою адресою Інформація про оплату Зустріньте WebHook Тестовий webhook Список послуг Історія платежів Webhook Статус платежу Посилання на боротьбу з відмиванням грошей
    Виплата
    Починаємо Розрахунок суми виведення Створення виплат Інформація про виплату Повернути Історія виплат Статус виплат Webhook Список послуг Перекладіть на особистий гаманець Перейдіть на бізнес -гаманець
  • Інтеграція Host to host(white label)
  • SDK
    PHP GO PYTHON NODEJS
  • Модулі CMS
  • Оплата знижок
    Список знижок Встановіть знижку на метод оплати
  • Список обмінних курсівБалансуватиДовідник

Головний

/

Інтеграція Host to host (white label)

Копіювати сторінку
FAQAPIКонтакти

Ⓒ 2026 Heleket

Privacy policy

Terms of use

AML

FAQAPIКонтакти

Host-to-Host (H2H) інтеграція Heleket для мерчантів

Ця інструкція описує приймання криптоплатежів через пряму серверну взаємодію (server-to-server) з API Heleket. На відміну від інтеграції через готову платіжну сторінку, ваш бекенд створює інвойси, отримує платіжні реквізити та обробляє сповіщення про статус платежу. Ви можете відображати платіжну форму на своєму боці або використовувати URL, повернений у відповіді API.

1. Що потрібно перед початком

Для приймання платежів вам потрібні два значення з особистого кабінету:

ЗначенняДе взяти
Merchant IDUUID мерчанта. Розділ Бізнес → Мерчанти → Налаштування мерчанта.
API-ключ платежівГенерується в налаштуваннях мерчанта після проходження модерації.

Де взяти

UUID мерчанта. Розділ Бізнес → Мерчанти → Налаштування мерчанта.

Де взяти

Генерується в налаштуваннях мерчанта після проходження модерації.

Як отримати API-ключ платежів

  1. Перейдіть до Бізнес → Мерчанти → Створити мерчанта та вкажіть назву.
  2. Подайте заявку, вкажіть URL сайту та підтвердьте домен.
  3. Дочекайтеся модерації мерчанта.
  4. Після схвалення скопіюйте API-ключ платежів і Merchant ID у розділі Налаштування.

API-ключ виплат видається окремо в Налаштування → API, потребує підключеної двофакторної автентифікації та не потрібен для приймання платежів.

Базовий endpoint усіх запитів:

https://api.heleket.com/
Копіювати

Усі запити надсилаються методом POST у форматі JSON і мають бути підписані.

2. Автентифікація та підпис запиту

Кожен запит автентифікується двома HTTP-заголовками:

ЗаголовокЗначення
merchantВаш Merchant ID (UUID).
signПідпис тіла запиту.
Content-Typeapplication/json

Значення

Ваш Merchant ID (UUID).

Значення

Підпис тіла запиту.

Значення

application/json

Підпис — це MD5-хеш base64-кодованого JSON-тіла запиту, об’єднаного з вашим API-ключем.

$body = json_encode($data);
$sign = md5(base64_encode($body) . $API_KEY);
Копіювати

Для запитів без параметрів у тілі обчислюйте підпис від порожнього рядка:

$sign = md5(base64_encode('') . $API_KEY);
Копіювати

Важливо про екранування слешів. PHP за замовчуванням екранує / у JSON (\/), а багато інших мов — ні. Підпис обчислюється від того самого рядка, який надсилається в тілі, тому рядок для підпису й тіло запиту мають бути байт у байт ідентичними. У стеках не на PHP екрануйте слеші вручну, інакше підпис не збігатиметься (та сама проблема виникає під час перевірки вебхуків, див. розділ 5).

Приклад підписаного запиту

curl https://api.heleket.com/v1/payment \
  -X POST \
  -H 'merchant: 8b03432e-385b-4670-8d06-064591096795' \
  -H 'sign: fe99035f86fa436181717b302b95bacff1' \
  -H 'Content-Type: application/json' \
  -d '{"amount":"15","currency":"USD","order_id":"1"}'
Копіювати

3. Схема H2H-потоку

  1. Клієнт оформлює замовлення у вас → ви фіксуєте order_id на своєму боці
  2. Ваш сервер → POST /v1/payment → Heleket повертає uuid, адресу, суму, url
  3. Ви показуєте клієнту реквізити / адресу / QR (або посилання url)
  4. Клієнт платить у блокчейні
  5. Heleket → POST на ваш url_callback (webhook) під час кожної зміни статусу
  6. Ви перевіряєте підпис вебхука → оновлюєте замовлення
  7. (Підстраховка) періодично опитуєте POST /v1/payment/info за order_id

Не покладайтеся лише на вебхук: завжди майте fallback через /v1/payment/info (розділ 6) на випадок, якщо callback не надійшов.

4. Створення платежу

Endpoint:

POST
https://api.heleket.com/v1/payment
Копіювати

Основні параметри запиту

ПараметрТипОбов’яз.Опис
amountstringтакСума до сплати. Дробова частина через крапку, напр. 10.28.
currencystringтакКод валюти інвойсу (фіат або криптовалюта), напр. USD, USDT, BTC.
order_idstringтакВаш ідентифікатор замовлення. Лише літери, цифри, _ і -. Має бути унікальним.
networkstringніКод блокчейн-мережі, напр. tron, bsc, eth.
to_currencystringніЦільова криптовалюта для перерахунку суми (завжди код криптовалюти, не фіат).
url_callbackstringніURL, на який Heleket надсилає вебхуки зі статусом. Фактично обов’язковий для H2H.
url_returnstringніКуди повернути клієнта з платіжної форми до оплати.
url_successstringніКуди повернути клієнта після успішної оплати.
lifetimeintegerніТермін дії інвойсу в секундах (300–43200, за замовчуванням 3600).
subtractintegerніЯкий відсоток комісії покласти на клієнта (0–100).
accuracy_payment_percentnumericніДопустима недоплата у % (0–5): інвойс закриється як оплачений, якщо недоплата в цих межах.
is_payment_multiplebooleanніДозволити доплату залишку. За замовчуванням true.
additional_datastringніДовільний рядок для вас (клієнту не видно), до 255 символів.
currenciesarrayніБілий список валют/мереж для оплати.
except_currenciesarrayніЧорний список валют/мереж.
discount_percentintegerніЗнижка (додатна) або націнка (від’ємна), від -99 до 100.
is_refreshbooleanніОновити прострочений інвойс із тим самим order_id (нова адреса й термін).

Тип

string

Обов’яз.

так

Опис

Сума до сплати. Дробова частина через крапку, напр. 10.28.

Тип

string

Обов’яз.

так

Опис

Код валюти інвойсу (фіат або криптовалюта), напр. USD, USDT, BTC.

Тип

string

Обов’яз.

так

Опис

Ваш ідентифікатор замовлення. Лише літери, цифри, _ і -. Має бути унікальним.

Тип

string

Обов’яз.

ні

Опис

Код блокчейн-мережі, напр. tron, bsc, eth.

Тип

string

Обов’яз.

ні

Опис

Цільова криптовалюта для перерахунку суми (завжди код криптовалюти, не фіат).

Тип

string

Обов’яз.

ні

Опис

URL, на який Heleket надсилає вебхуки зі статусом. Фактично обов’язковий для H2H.

Тип

string

Обов’яз.

ні

Опис

Куди повернути клієнта з платіжної форми до оплати.

Тип

string

Обов’яз.

ні

Опис

Куди повернути клієнта після успішної оплати.

Тип

integer

Обов’яз.

ні

Опис

Термін дії інвойсу в секундах (300–43200, за замовчуванням 3600).

Тип

integer

Обов’яз.

ні

Опис

Який відсоток комісії покласти на клієнта (0–100).

Тип

numeric

Обов’яз.

ні

Опис

Допустима недоплата у % (0–5): інвойс закриється як оплачений, якщо недоплата в цих межах.

Тип

boolean

Обов’яз.

ні

Опис

Дозволити доплату залишку. За замовчуванням true.

Тип

string

Обов’яз.

ні

Опис

Довільний рядок для вас (клієнту не видно), до 255 символів.

Тип

array

Обов’яз.

ні

Опис

Білий список валют/мереж для оплати.

Тип

array

Обов’яз.

ні

Опис

Чорний список валют/мереж.

Тип

integer

Обов’яз.

ні

Опис

Знижка (додатна) або націнка (від’ємна), від -99 до 100.

Тип

boolean

Обов’яз.

ні

Опис

Оновити прострочений інвойс із тим самим order_id (нова адреса й термін).

Про order_id: якщо інвойс із таким order_id уже існує, новий створено не буде — повернуться реквізити наявного. Це зручно для ідемпотентності: повторний запит для того самого замовлення безпечний.

Коли адреса гаманця надходить одразу. Поле address заповнюється під час створення, лише якщо валюту оплати визначено однозначно: задано криптовалюту + мережу (to_currency + network) або криптовалюта має єдину мережу (напр. BTC). Інакше клієнт вибирає валюту/мережу на платіжній сторінці, а address з’явиться пізніше.

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

Мінімальний інвойс на 15 USD (клієнт сам вибере криптовалюту й мережу):

{ "amount": "15", "currency": "USD", "order_id": "1" }
Копіювати

Інвойс на 20 USDT у мережі TRON — адреса буде одразу:

{ "amount": "20", "currency": "USDT", "order_id": "1", "network": "tron" }
Копіювати

Інвойс на 25 USD, оплата лише в USDT у будь-якій мережі:

{ "amount": "25", "currency": "USD", "order_id": "1", "to_currency": "USDT" }
Копіювати

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

{
1  "state": 0,
2  "result": {
3    "uuid": "1ec87133-b22d-4643-988f-cac29a6ac85d",
4    "order_id": "3",
5    "amount": "20000.00",
6    "payment_amount": null,
7    "payer_amount": "254.92",
8    "payer_currency": "USDT",
9    "currency": "RUB",
10    "merchant_amount": "249.82816502",
11    "network": "bsc",
12    "address": "0x2b...",
13    "txid": null,
14    "payment_status": "check",
15    "url": "https://pay.heleket.com/pay/1ec87133-b22d-4643-988f-cac29a6ac85d",
16    "expired_at": 1753202502,
17    "is_final": false,
18    "commission": "5.09853397",
19    "address_qr_code": "data:image/png;base64 ..."
20  }
21}
Копіювати

Ключові поля відповіді

ПолеПризначення
uuidUUID інвойсу в Heleket. Збережіть його разом із замовленням.
addressАдреса гаманця для оплати. Може бути null, доки валюту не вибрано.
payer_amountСума до сплати в payer_currency з урахуванням знижки або націнки.
payer_currencyВалюта оплати. null означає, що клієнт її ще не вибрав.
merchant_amountСума, яка буде зарахована на ваш баланс після вирахування комісій.
payment_statusПоточний статус (див. розділ 7).
urlПосилання на платіжну сторінку Heleket, якщо ви не відображаєте форму самостійно.
address_qr_codeQR-код платіжної адреси у форматі base64.
expired_atUnix-мітка часу завершення строку дії інвойсу.
is_finalОзнака того, що інвойс закритий і більше не може бути оплачений.

Призначення

UUID інвойсу в Heleket. Збережіть його разом із замовленням.

Призначення

Адреса гаманця для оплати. Може бути null, доки валюту не вибрано.

Призначення

Сума до сплати в payer_currency з урахуванням знижки або націнки.

Призначення

Валюта оплати. null означає, що клієнт її ще не вибрав.

Призначення

Сума, яка буде зарахована на ваш баланс після вирахування комісій.

Призначення

Поточний статус (див. розділ 7).

Призначення

Посилання на платіжну сторінку Heleket, якщо ви не відображаєте форму самостійно.

Призначення

QR-код платіжної адреси у форматі base64.

Призначення

Unix-мітка часу завершення строку дії інвойсу.

Призначення

Ознака того, що інвойс закритий і більше не може бути оплачений.

state: 0 означає успіх. У разі помилок валідації state: 1 (розділ 8).

5. Webhook: сповіщення про статус платежу

Heleket надсилає POST webhook щоразу, коли змінюється статус інвойсу.

Основні поля webhook

ПолеОпис
typeТип: payment або wallet.
uuidUUID платежу.
order_idВаш ідентифікатор замовлення — за ним знаходите замовлення.
amountСума інвойсу.
payment_amountСкільки фактично сплатив клієнт.
payment_amount_usdФактично сплачено в USD.
merchant_amountЗараховано на баланс за вирахуванням комісії.
commissionКомісія Heleket.
is_finalЧи закритий інвойс остаточно.
statusСтатус платежу (див. розділ 7).
fromАдреса гаманця платника.
networkМережа платежу.
currencyВалюта інвойсу.
payer_currencyВалюта, якою фактично оплатили.
txidХеш транзакції в блокчейні (може бути відсутнім при p2p/ручному закритті).
signПідпис вебхука для перевірки.

Опис

Тип: payment або wallet.

Опис

UUID платежу.

Опис

Ваш ідентифікатор замовлення — за ним знаходите замовлення.

Опис

Сума інвойсу.

Опис

Скільки фактично сплатив клієнт.

Опис

Фактично сплачено в USD.

Опис

Зараховано на баланс за вирахуванням комісії.

Опис

Комісія Heleket.

Опис

Чи закритий інвойс остаточно.

Опис

Статус платежу (див. розділ 7).

Опис

Адреса гаманця платника.

Опис

Мережа платежу.

Опис

Валюта інвойсу.

Опис

Валюта, якою фактично оплатили.

Опис

Хеш транзакції в блокчейні (може бути відсутнім при p2p/ручному закритті).

Опис

Підпис вебхука для перевірки.

Приклад корисного навантаження webhook

{
1  "type": "payment",
2  "uuid": "62f88b36-a9d5-4fa6-aa26-e040c3dbf26d",
3  "order_id": "97a75bf8eda5cca41ba9d2e104840fcd",
4  "amount": "3.00000000",
5  "payment_amount": "3.00000000",
6  "merchant_amount": "2.94000000",
7  "commission": "0.06000000",
8  "is_final": true,
9  "status": "paid",
10  "from": "THgEWubVc8tPKXLJ4VZ5zbiiAK7AgqSeGH",
11  "network": "tron",
12  "currency": "TRX",
13  "payer_currency": "TRX",
14  "txid": "6f0d9c8374db57cac0d806251473de754f361c83a03cd805f74aa9da3193486b",
15  "sign": "a76c0d77f3e8e1a419b138af04ab600a"
16}
Копіювати

Обов’язкова перевірка webhook

Оскільки на основі вебхука ви видаєте товар або поповнюєте баланс користувача, потрібно переконатися, що запит надійшов саме від Heleket. Перевіряйте обома способами:

  1. Дозволяйте callback-запити лише з IP-адреси Heleket: 31.133.220.8.
  2. Перевірка підпису. Підпис обчислюється за тим самим алгоритмом, що й для запитів, але перевіряється так:
// 1. Зчитуємо сире тіло запиту
1$data = json_decode(file_get_contents('php://input'), true);
2
3// 2. Дістаємо й видаляємо підпис із масиву
4$sign = $data['sign'];
5unset($data['sign']);
6
7// 3. Обчислюємо хеш від тіла (без sign) + ваш API-ключ платежів
8$hash = md5(base64_encode(json_encode($data, JSON_UNESCAPED_UNICODE)) . $apiPaymentKey);
9
10// 4. Звіряємо
11if (!hash_equals($hash, $sign)) {
12    // підпис неправильний — відхилити
13    http_response_code(400);
14    exit;
15}
Копіювати

Та сама проблема зі слешами, що й у розділі 2: під час кодування JSON поза PHP екрануйте / вручну (JSON.stringify(data).replace(/\//g, "\\/") у JS), інакше підпис не збігатиметься.

Рекомендації з обробки webhook

  • Ідемпотентність. Той самий статус може надійти повторно (зокрема через ручне повторне надсилання). Прив’язуйтеся до order_id + status і не видавайте товар двічі.
  • Реагуйте на фінальні статуси (paid, paid_over), а не на проміжні.
  • Повертайте HTTP 200 лише після успішної обробки webhook.
  • Порівнюйте payment_amount і merchant_amount з очікуваною сумою замовлення.

6. Опитування статусу як резервний механізм для webhook

Endpoint:

POST
https://api.heleket.com/v1/payment/info
Копіювати

Передайте uuid або order_id (якщо передати обидва — пріоритет у order_id).

curl https://api.heleket.com/v1/payment/info \
  -X POST \
  -H 'merchant: 8b03432e-385b-4670-8d06-064591096795' \
  -H 'sign: <підпис тіла>' \
  -H 'Content-Type: application/json' \
  -d '{"order_id":"1"}'
Копіювати

Відповідь містить той самий об’єкт платежу з актуальними payment_status та is_final. Використовуйте цей метод для періодичної звірки «завислих» замовлень, а не як основний механізм (вебхуки швидші й потребують менше запитів).

7. Статуси платежу

СтатусФінальнийЗначення
checkніОчікування появи транзакції в блокчейні.
processніПлатіж обробляється.
confirm_checkніТранзакцію видно, очікуємо потрібну кількість підтверджень мережі.
wrong_amount_waitingніНедоплата з можливістю доплатити залишок.
paidтакСплачено рівно необхідну суму. Видавайте товар.
paid_overтакСплачено більше, ніж було потрібно. Видавайте товар.
wrong_amountтакКлієнт заплатив менше, ніж було потрібно.
failтакПомилка під час оплати.
cancelтакПлатіж скасовано, клієнт не оплатив.
system_failтакСистемна помилка.
lockedтакКошти заблоковано за програмою AML.
refund_processніПовернення обробляється.
refund_paidтакПовернення виконано.
refund_failтакПомилка під час повернення.

Фінальний

ні

Значення

Очікування появи транзакції в блокчейні.

Фінальний

ні

Значення

Платіж обробляється.

Фінальний

ні

Значення

Транзакцію видно, очікуємо потрібну кількість підтверджень мережі.

Фінальний

ні

Значення

Недоплата з можливістю доплатити залишок.

Фінальний

так

Значення

Сплачено рівно необхідну суму. Видавайте товар.

Фінальний

так

Значення

Сплачено більше, ніж було потрібно. Видавайте товар.

Фінальний

так

Значення

Клієнт заплатив менше, ніж було потрібно.

Фінальний

так

Значення

Помилка під час оплати.

Фінальний

так

Значення

Платіж скасовано, клієнт не оплатив.

Фінальний

так

Значення

Системна помилка.

Фінальний

так

Значення

Кошти заблоковано за програмою AML.

Фінальний

ні

Значення

Повернення обробляється.

Фінальний

так

Значення

Повернення виконано.

Фінальний

так

Значення

Помилка під час повернення.

Вважайте paid і paid_over успішними платежами. confirm_check також може надходити у webhook як проміжний статус.

8. Обробка помилок

Помилки валідації — HTTP 422, state: 1:

{ "state": 1, "errors": { "amount": ["validation.required"] } }
Копіювати

Поширені повідомлення (state: 1, поле message):

ПовідомленняПричина
The network was not foundПередано непідтримуваний код мережі.
The currency was not foundПередано непідтримуваний код валюти.
Not found service to_currencyДля to_currency немає доступного платіжного сервісу.
Minimum amount 0.5 USDTСума нижча за мінімальну для валюти.
Maximum amount 10000000 USDTСума перевищує максимальну для валюти.
Wallet not foundНемає активного гаманця мерчанта для валюти платежу.
You are forbiddenПлатежі заблоковані. Зверніться до служби підтримки.
Gateway error / Server errorСталася тимчасова технічна помилка, і платіж недоступний.

Причина

Передано непідтримуваний код мережі.

Причина

Передано непідтримуваний код валюти.

Причина

Для to_currency немає доступного платіжного сервісу.

Причина

Сума нижча за мінімальну для валюти.

Причина

Сума перевищує максимальну для валюти.

Причина

Немає активного гаманця мерчанта для валюти платежу.

Причина

Платежі заблоковані. Зверніться до служби підтримки.

Причина

Сталася тимчасова технічна помилка, і платіж недоступний.

Внутрішня помилка — HTTP 500:

{ "message": "Server error, #1", "code": 500, "error": null }
Копіювати

Вважайте Gateway error, Server error і HTTP 500 тимчасовими та повторюйте запит з експоненційною затримкою.

9. Чек-лист інтеграції

  • Мерчант схвалений, Merchant ID і API-ключ платежів отримані.
  • Реалізовано підписування запитів з урахуванням екранування косих рисок.
  • Інвойс створюється через POST /v1/payment з унікальним order_id і заданим url_callback.
  • Endpoint webhook доступний через HTTPS і приймає POST-запити.
  • Webhook перевіряється за IP-адресою та підписом.
  • Обробка webhook є ідемпотентною.
  • Товар або послуга надається лише для paid і paid_over після перевірки суми.
  • Реалізовано резервне опитування через POST /v1/payment/info.
  • uuid, order_id, txid і статуси записуються в журнал.
  • API-ключі зберігаються в секретах, а не в коді або репозиторії.

Довідник кодів валют і мереж, методи повернення, статичні гаманці та виплати наведені у відповідних розділах документації Heleket.