
Journal
How to accept crypto payments in a Telegram bot
A Telegram bot can sell access, subscriptions and goods for crypto without a static wallet: one invoice per purchase, a link in the chat, a webhook that unlocks the product.
Telegram users are used to paying inside the app, and a bot is a natural place to sell. The trap is a single wallet address pasted into the chat: you cannot tell who paid what. A better design is one invoice per purchase.
The flow
- The user chooses a plan or a product in the bot.
- Your bot backend creates an invoice through the API and puts the user id into order_id.
- The bot sends the pay_url link in the chat. The customer chooses a coin and a network, and sees an address and a QR code.
- When the transfer is confirmed, your server receives a webhook. The bot adds the user to the channel or unlocks the feature.
Which networks to offer
TON is convenient for customers who pay from a Telegram wallet, and TRON is where most USDT lives. Cheap networks such as BNB Chain, Polygon, Base or Solana keep the fee low on small purchases. The customer picks the network on the payment page, so you can leave all of them open.
Details that matter
- Set ttl_minutes to match the purchase: a short lifetime for a quick sale, a longer one for a subscription renewal.
- A crypto transfer is always made by the customer, so a subscription renewal is a new invoice each period. Send the user a reminder with a fresh link.
- Verify the webhook signature before you grant access.
- Test everything in sandbox mode first.
Any backend works: it is a plain HTTP API, so Python, Node.js or PHP are equally fine.
Accept crypto, receive USDT
Create a merchant, issue an invoice, try the sandbox. Live accepting opens after review.