Back to Blog
Billing

Telegram Bot Crypto Payments: 2026 Setup Guide (USDT, BTC, USDC)

How to accept crypto payments inside a Telegram bot in 2026 — CryptoBot, Telegram Payments 2.0 API, USDC payment links, and the simplest no-code path.

May 20, 20268 min read
P
PayRequest Team
Payments Experts

A creator runs a Telegram channel with 12,000 subscribers selling premium signal access for $30/month. Half her audience is in countries where Stripe doesn't operate. PayPal froze her account in 2024 for "high-risk activity." Wire transfers from Argentina cost the customer more than the subscription itself.

She switched to crypto-only payments inside her Telegram bot. Customers tap a button in the chat, pay $30 in USDT through CryptoBot's wallet, and the bot adds them to the premium channel automatically. Conversion went from 3% to 11%, churn dropped by half, and she stopped getting "I can't pay" messages.

This pattern — Telegram + crypto — is one of the fastest-growing payment categories in 2026. It's especially common for creators, online education, software unlocks, and any service where the customer base is global and crypto-comfortable. This guide breaks down exactly how to set it up, the three integration paths, and which one fits your use case.

Key Takeaways

  • Three integration paths: hosted payment link (easiest), CryptoBot + Telegram Payments 2.0 API (most native), custom Web3 with Telegram Mini Apps (most flexible)
  • CryptoBot is Telegram's de facto crypto provider — supports BTC, ETH, USDT, TON, and a handful of altcoins; lives inside Telegram as a bot
  • USDC is not native to CryptoBot — to accept USDC inside Telegram, generate a payment link from an external billing platform and send it as a bot message
  • You don't need to run a node or deploy smart contracts — modern bot frameworks (grammy, python-telegram-bot) plus a payment provider token are enough
  • Webhook verification is critical — always check the signature on payment confirmation callbacks to prevent fake "paid" events

Why Telegram Bots and Crypto Are Such a Good Fit

Three things make Telegram unusually well-suited for crypto payments compared to Discord, WhatsApp, or Slack.

The Bot Payments 2.0 API ships native UI

Telegram's payment API (since 2018, expanded in 2.0) gives bots a standard "Pay" button that renders natively in the chat. The user taps Pay, sees the amount, taps Confirm, and the transaction happens — no leaving Telegram, no opening a browser, no copy-pasting wallet addresses. Discord and WhatsApp have no equivalent.

CryptoBot solved the in-chat crypto wallet problem

CryptoBot (@CryptoBot) is a Telegram-native crypto wallet that other bots can use as a payment provider. Users sign up once (it's just a Telegram bot they message), top up via on-ramp or transfer, and from then on every crypto payment in Telegram is two taps. This is much smoother than the typical "open MetaMask, paste address, confirm gas, return to original app" web3 flow.

TON Foundation actively subsidizes the ecosystem

Telegram's parent ecosystem invests heavily in TON (The Open Network), so Telegram-native crypto payments get first-class API treatment, integration grants, and frequent feature updates. In 2026, TON is the fastest, cheapest chain for Telegram-bound payments — sub-cent fees, sub-second confirmations.

Path 1: Send a Crypto Payment Link as a Bot Message (Easiest)

The simplest integration doesn't use Telegram's payment API at all. Your bot just generates a crypto payment link via a hosted platform and sends it as a regular message.

```javascript // Pseudo-code with grammy framework bot.command("subscribe", async (ctx) => { const link = await payrequest.createPaymentLink({ amount: 30, currency: "USD", methods: ["usdc-base", "usdt-tron"], metadata: { telegram_user_id: ctx.from.id } }) await ctx.reply(`Tap to subscribe: ${link.url}`) })

// Listen for webhook from PayRequest app.post("/webhook", (req, res) => { if (req.body.event === "payment.completed") { const telegramId = req.body.metadata.telegram_user_id bot.api.sendMessage(telegramId, "Payment confirmed! Welcome.") grantChannelAccess(telegramId) } res.send("ok") }) ```

The user taps the link, opens it in their browser (or Telegram's in-app browser), pays from MetaMask/Coinbase Wallet/Phantom, and your webhook handler grants access.

Pros: no Telegram Payments 2.0 setup, works for any crypto asset on any chain, easy to integrate with existing billing platforms. Cons: payment happens in a browser, not in chat — slightly more friction than the native Pay button.

This is the right path if you (a) want to accept USDC or other assets not supported by CryptoBot, (b) already have a billing platform for fiat payments and want crypto on the same dashboard, or (c) don't want to manage a crypto-specific provider relationship.

Path 2: CryptoBot + Telegram Payments 2.0 API (Most Native)

If you want the Pay button to render natively inside the Telegram chat, you'll use Telegram's Bot Payments 2.0 API with CryptoBot as the payment provider.

Steps:

  1. Open @CryptoBot in Telegram, tap "Crypto Pay", and register your bot. You'll receive an API token.
  2. Pass that token to Telegram's BotFather as a payment provider token (the same way you'd register Stripe).
  3. In your bot code, call `sendInvoice` with the title, description, currency code (USDT, BTC, TON), price, and the CryptoBot provider token.
  4. Handle `pre_checkout_query` to confirm the order is still valid.
  5. Handle `successful_payment` to fulfill the order.

```python # python-telegram-bot example async def subscribe(update, context): await context.bot.send_invoice( chat_id=update.effective_chat.id, title="Premium Channel", description="30 days of premium signals", payload="sub-premium-30d", provider_token=CRYPTOBOT_TOKEN, currency="USDT", prices=[LabeledPrice("Subscription", 3000)] # 30.00 USDT, in cents )

async def successful_payment(update, context): user_id = update.message.from_user.id await grant_channel_access(user_id) await update.message.reply_text("Welcome to premium!") ```

Pros: payment happens entirely inside Telegram, no external browser, smooth UX, CryptoBot handles wallet/on-ramp. Cons: limited to CryptoBot-supported assets (no USDC, no Solana, no Polygon), users must have or create a CryptoBot wallet first, and you depend on CryptoBot's uptime and KYC policies.

This is the right path if your audience is already crypto-native and you specifically want the in-chat native Pay button experience.

Path 3: Telegram Mini Apps + Web3 (Most Flexible)

For complex use cases — NFT sales, on-chain subscriptions, multi-asset wallets, DEX-style swaps — you'll build a Telegram Mini App that opens a full web3 interface inside Telegram. The user taps a button, a mini browser opens *inside* Telegram with your dApp, and they connect MetaMask or TonKeeper.

This is the path used by NFT marketplaces, play-to-earn games, and DeFi bots on Telegram. It requires real frontend engineering — React, ethers.js or web3.js, wallet connect integration, smart contract calls — and is overkill for simple "accept crypto for a subscription" use cases. Skip unless you have a specific reason.

How to Verify Payments Are Real (Don't Skip This)

The most common mistake in Telegram crypto bot setups is trusting client-side or unsigned confirmations. Here's the minimum to prevent abuse:

For Path 1 (hosted payment link)
  • Configure your webhook URL in the payment platform's dashboard
  • Verify the webhook signature on every incoming request (HMAC-SHA256 with your webhook secret)
  • Match the `metadata.telegram_user_id` field to the user you originally sent the link to
  • Never trust a payment confirmation that arrives without a signed webhook
For Path 2 (CryptoBot + Telegram Payments API)
  • Telegram automatically signs the `successful_payment` update — trust only updates that come through Telegram's official getUpdates or webhook
  • Verify the `telegram_payment_charge_id` is unique (prevents replay attacks)
  • Store charge IDs in your database with a `processed` flag
For Path 3 (custom Web3)
  • Wait for at least 1 confirmation on TON, 2 confirmations on Polygon/Base, 6 confirmations on Bitcoin before fulfilling
  • Verify the on-chain transaction matches the expected amount, recipient address, and token contract
  • Use a service like Alchemy or QuickNode for reliable webhook delivery

Common Pitfalls

A few things that bite first-time builders:

  • Sending invoices to private chats only: Telegram's Bot Payments API does not work in channels or groups — only in 1:1 chats with the bot. If you're running a paid channel, send the invoice in a private DM from the bot, not in the channel itself.
  • Forgetting pre_checkout_query: Telegram requires your bot to respond to `pre_checkout_query` within 10 seconds. If you don't, the payment fails. Set up a handler even if it just returns `ok=true`.
  • Currency code case mismatch: Telegram expects uppercase currency codes (USDT, BTC, TON). Lowercase will return "invalid currency" errors.
  • Price unit confusion: like Stripe, Telegram expects prices in the smallest unit (cents, satoshis, nanoTONs). 30.00 USDT is 3000, not 30. Double-check the decimals for each asset.
  • Webhook delivery without HTTPS: Telegram only POSTs webhooks to HTTPS endpoints. If you're testing locally, use ngrok or tailscale to expose your local server.

When Crypto Bot Payments Are a Bad Fit

Skip the crypto-in-Telegram pattern if:

  • Your audience is mostly in markets where Stripe/PayPal already work fine (US, UK, NL, DE, FR for B2C)
  • Average order value is under €10 — even cheap chains add UX friction relative to a card tap
  • You need refunds — on-chain transactions are irreversible, and "refund" means sending crypto back manually
  • You're selling regulated goods (alcohol, age-restricted content, financial advice) where on-chain identity verification is required by law

For everyone else — global creators, online education, software unlocks, signal services, B2B services with international clients — Telegram + crypto in 2026 is the lowest-friction way to monetize a chat-native audience.

A Practical First-Week Setup

If you want a working crypto-paying Telegram bot by the end of next week:

  1. Day 1: Build a basic bot with grammy (Node.js) or python-telegram-bot. Get `/start` and `/help` working.
  2. Day 2: Pick your path — link-based (Path 1) for USDC/multi-asset, CryptoBot (Path 2) for native in-chat.
  3. Day 3: For Path 1, sign up for PayRequest and connect a USDC receiving wallet. For Path 2, register your bot with @CryptoBot and grab the API token.
  4. Day 4: Implement the `/subscribe` command that either sends a payment link or calls `sendInvoice`. Add a webhook handler for confirmations.
  5. Day 5: Test with a real €1–5 payment from your own wallet. Verify the bot grants access on confirmation.
  6. Day 6: Add error handling, replay-attack protection, and a fallback message for users without a CryptoBot wallet.
  7. Day 7: Deploy to production. Add a "How to pay" message that explains the flow to first-time users.

How PayRequest Handles Telegram Bot Payments

PayRequest's crypto payment links work with any Telegram bot framework — your bot generates a link via the API, sends it as a message, and gets a webhook when the payment confirms.

What's included:

  • USDC on Base as the default crypto rail (CryptoBot doesn't support USDC; we do)
  • Multi-method links — the same link accepts USDC, card, iDEAL, or PayPal depending on what the customer prefers
  • Webhook signature verification built-in with your platform secret
  • Metadata field for tagging payments with Telegram user IDs so your bot can route confirmations
  • Same dashboard for crypto and fiat — no separate reconciliation for your Telegram revenue stream
  • 2% fee capped at €25/transaction — same as fiat, no crypto-specific markup

For Telegram creators and bot operators who want a USDC + fiat hybrid checkout, connect PayRequest and add crypto payments to your bot in an afternoon.

Frequently Asked Questions

Can a Telegram bot accept cryptocurrency payments in 2026?

Yes. There are three paths: (1) Telegram's native Bot Payments 2.0 API with a crypto-supporting provider like CryptoBot, which gives users a payment button inside the chat; (2) generate a one-time crypto payment link from a billing platform like PayRequest and send it as a message; (3) implement a custom Web3 flow using Telegram Mini Apps with TON or another chain. Option 2 is the simplest and works with USDC, USDT, BTC, and ETH out of the box.

What's CryptoBot and how does it work with Telegram?

CryptoBot (@CryptoBot) is a Telegram-native payment provider built on the TON ecosystem that lets bots accept Bitcoin, Ethereum, USDT, TON, and a handful of altcoins. You register your bot with CryptoBot, get an API token, and use Telegram's standard sendInvoice method with CryptoBot's provider token. Users tap Pay, approve in their CryptoBot wallet (also a Telegram bot), and the funds appear in your merchant balance.

Do I need to write code to accept crypto in a Telegram bot?

Not necessarily. If you use a hosted payment platform like PayRequest, you generate a crypto payment link in the dashboard and your bot just sends that link as a message — no API integration, no smart contracts. If you want native in-chat invoices (with the Pay button inside Telegram), you'll need a basic bot using node-telegram-bot-api, python-telegram-bot, or grammy, plus 30–50 lines of code to call sendInvoice with a crypto provider token.

How does Telegram Bot Payments 2.0 work with cryptocurrency?

Telegram's Bot Payments 2.0 API treats crypto providers the same way it treats traditional payment processors. You request a provider_token from a payment provider (Stripe for fiat, CryptoBot for crypto), then call sendInvoice with a title, description, currency code, and price. Telegram renders the payment UI natively in the chat. For crypto, the currency code is typically the asset ticker (BTC, USDT, TON) and the amount is in the smallest unit.

Is it safe to accept crypto payments through a Telegram bot?

Yes, provided you (1) never hold private keys inside your bot's environment, (2) use a reputable provider like CryptoBot or a hosted payment link service, (3) verify webhook signatures on payment confirmation callbacks, and (4) wait for the required number of on-chain confirmations before fulfilling. The biggest risk in Telegram crypto bots is phishing impersonation — always verify your bot's @username and add a verified badge if possible.

Can I accept USDC instead of TON in a Telegram bot?

Yes. CryptoBot supports USDT but not USDC natively. To accept USDC inside Telegram, the cleanest workflow is generating a payment link from a multi-chain billing platform that supports USDC on Base or Polygon, and sending that link as a bot message. The user taps it, opens MetaMask or Coinbase Wallet, completes the payment, and your bot receives a webhook confirmation when the on-chain transaction is finalized.

Share this article

Ready to get started?

Join thousands of businesses using PayRequest to get paid faster.

Get Started