tgpay cryptoAPI
crypto-payinvoicesapiwebhook

Приймання платежів через рахунки

2 хв читанняОновлено 11 серп. 2026 р.

Рахунок — це спосіб виставити оплату користувачу Telegram. Ви створюєте його через API, надсилаєте платнику посилання, і сума зараховується на баланс вашого застосунку в момент підтвердження оплати.

Як це працює

  1. Створіть рахунок методом createInvoice, вказавши актив і суму (або ціну у фіаті — див. нижче).
  2. Надішліть платнику посилання з відповіді. Відкривши його, він потрапляє на екран «Оплата рахунку» в застосунку.
  3. Він підтверджує й платить зі свого балансу — миттєво та без комісії мережі. Платник, якому не вистачає балансу, може профінансувати рахунок із зовнішнього гаманця: рахунок оплатиться автоматично, щойно надійде його переказ, а для вас це виглядає так само.
  4. Ви отримуєте сповіщення. Спрацьовує вебхук invoice_paid, і сума потрапляє на баланс застосунку.
  5. Виконуйте замовлення. Чекати більше нічого — платіж у цей момент остаточний.

Якщо ви віддаєте перевагу опитуванню API, а не прийманню вебхука, getInvoices повертає ваші рахунки з їхнім поточним статусом. Вебхук — швидший шлях; опитування — запасний.

Ціни у фіаті

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

Якщо потрібне тверде котирування, rate_lock_seconds фіксує курси конвертації під час створення рахунка на обмежене вікно — платник бачить рівно зафіксовані суми, а курсовий ризик на ці хвилини берете ви. Подробиці — у довіднику рахунків.

Можна також задати swap_to, щоб вхідні платежі в міру надходження конвертувалися в один актив, — зручно тримати баланс у стейблкоїні, не запускаючи обміни самостійно.

Корисні параметри рахунка

  • description — показується платнику на екрані «Оплата рахунку».
  • hidden_message — відкривається платнику лише після оплати. Так ви доставите код, ключ або посилання без окремого каналу доставки.
  • payload — ваш власний непрозорий рядок, повертається як є у вебхуку. Кладіть сюди ID вашого замовлення.
  • expires_in — строк, після якого рахунок більше не можна оплатити.
  • paid_btn_name / paid_btn_url — кнопка, яку платник бачить після оплати, щоб повернути його у вашого бота, канал або на сторінку товару.
  • open_amount — без фіксованої суми; платник вводить її під час оплати. Природна форма для пожертв і чайових.

Неоплачений рахунок можна скасувати методом deleteInvoice.

Повернення

refundInvoice повертає номінальну суму оплаченого рахунка — або будь-яку її частину — з балансу вашого застосунку тому, хто його оплатив, включно з анонімними платниками, не розкриваючи, хто вони. Часткові повернення накопичуються до номіналу; рахунок відображає їх у refunded_amount. Передавайте spend_id, щоб повтор після тайм-ауту відтворив результат, а не повернув гроші двічі. Комісія платформи не повертається.

⚠️ Перевіряйте підпис вебхука до виконання замовлення

Надіслати POST на ваш вебхук може будь-хто. Перевірте заголовок TgCryptoPay-API-SignatureHMAC-SHA256 від сирого тіла запиту з ключем SHA-256 від вашого API-токена, — перш ніж вважати платіж справжнім, і дедуплікуйте за update_id, щоб повтор доставки не відвантажив замовлення двічі.