How to Accept TON Payments: A Developer and Merchant Guide
Learn how to effectively accept TON payments using gateways and SDKs. Streamline your checkout process and automate order fulfillment today!
Learn how to effectively accept TON payments using gateways and SDKs. Streamline your checkout process and automate order fulfillment today!

The fastest way to accept TON payments is a dedicated crypto payment gateway or the TON Pay SDK with TON Connect. Both get you to production faster than building against a raw wallet. If you only need to receive occasional payments, a direct wallet address works, but it skips the automation that makes crypto checkout usable at volume. Whatever route you choose, two things aren’t optional: webhook-driven order fulfillment and testnet validation before you touch mainnet.
Accepting TON payments reliably requires a gateway or the TON Pay SDK, verified webhooks with HMAC-SHA256, and full testnet validation before mainnet launch.
| Point | Details |
|---|---|
| Choose the right model | Use a gateway or TON Pay SDK for production; reserve direct wallets for occasional, low-volume receipts. |
| Test on testnet first | Validate transfers, webhooks, and edge cases like mismatched amounts before switching to mainnet. |
| Verify every webhook | Check the X-TonPay-Signature header with HMAC-SHA256 and reject anything over plain HTTP. |
| Build in idempotency | Use the transaction reference to prevent duplicate webhooks from double-fulfilling orders. |
| Cryptopayr as the turnkey path | Cryptopayr offers no-KYC onboarding, multiple coins, and hosted checkout for merchants who want TON live fast. |
Toncoin (TON) is the native coin of the TON blockchain. When merchants talk about accepting “TON payments,” they usually mean two things: TON itself, and Jettons, the token standard behind assets like USDT on TON. Both move on the same network and settle in seconds, but they aren’t interchangeable at the code level.

Each asset has its own contract address, and that address differs between testnet and mainnet. A common early mistake is hardcoding a mainnet USDT jetton master address while still developing against testnet, which produces transactions that simply vanish from your test wallet. According to TON’s payments overview, merchants can accept TON and Jettons worldwide with no intermediaries, which is the appeal, but also why address configuration deserves its own line item in your setup checklist.

The math favors TON on cost and speed. Card networks and cross-border ACH transfers routinely take days and carry fees that stack up fast on international sales. TON transactions settle quickly with very low network fees. The TON Foundation has reported performance tests showing the network can handle very high transaction throughput, which supports fast, low-cost consumer payments at scale.
Beyond speed, three benefits matter most for merchants:
Three models cover almost every real-world case, and Stripe’s guidance for businesses accepting crypto frames the trade-off well: platforms reduce operational burden, direct wallet acceptance increases it.
For production-grade e-commerce, a gateway or the TON Pay SDK wins on reliability and reduces the operational load on your team.
Start on testnet, always. Configure your environment so TON_CHAIN and MERCHANT_WALLET_ADDRESS are set per environment, and never let a testnet build accidentally point at a mainnet wallet. Switch to mainnet only after every flow has passed on testnet, including edge cases.
createTonPayTransfer with the required fields: amount, asset, senderAddr, and recipientAddr. According to TON Pay’s transfer documentation, the function returns a message, a reference, and a bodyBase64Hash. Providing an API key is optional, but it unlocks dashboard visibility and webhook notifications, which is the difference between manually watching a block explorer and getting notified automatically.TonPayButton component or the useTonPay hook, or wire up a TON Connect wallet flow directly if you need more control over the connect experience. TON Pay’s developer toolkit documents both React and vanilla JS components alongside TON Connect integration.reference and bodyBase64Hash, and only then return the message to the client. Skipping this order invites race conditions where a webhook arrives before your database knows the transaction exists.X-TonPay-Signature header using HMAC-SHA256 before trusting any payload, and return a 2xx response only after validation succeeds. Build idempotency into your handler using the reference value, since TON Pay’s webhook guidance notes that retries and duplicate deliveries happen in production.A payment integration is only as trustworthy as its webhook handler. If you can’t prove a signature is valid or a transaction hasn’t already been processed, you don’t have a payment system, you have a guess.
Pro Tip: Log every webhook payload with its signature verification result before you process anything. When something goes wrong at 2 a.m., that log is the fastest path to a root cause.
Signature verification is the foundation, not a nice-to-have. Every webhook must pass HMAC-SHA256 validation against the X-TonPay-Signature header, and your endpoint should reject anything arriving over plain HTTP outright.
reference as your idempotency key so a duplicate webhook never double-fulfills an order.Pro Tip: Build your refund and mismatch-handling logic before launch, not after your first support ticket. Retrofitting it under pressure is how mistakes get shipped.
Two fee lines apply here, and they’re easy to conflate. The gateway charges its own processing fee, separate from the on-chain network fee, which on TON is close to negligible. Cryptopayr’s fees start at 0.1%, well under what card processors typically charge for cross-border transactions.
Settlement is your call: hold TON and accept price exposure, or auto-convert to a stablecoin the moment funds arrive to lock in value immediately. Neither is wrong; it depends on your treasury tolerance for volatility.
Every flow needs a pass on testnet before mainnet gets touched, and that includes the failure paths, not just the happy ones.
recipientAddr when you’re not using an API key.reference value from step one of your integration.Most of the advice floating around treats every integration option as roughly equivalent, as if the choice between a gateway, the TON Pay SDK, and a bare wallet address is mostly a matter of preference. It isn’t. For a business actually processing orders, wallet-only acceptance is a liability disguised as simplicity. It looks easy on day one and turns into manual reconciliation, missed webhooks that were never webhooks, and refund headaches by week three.

The conventional wisdom also underrates how much operational weight webhook verification and idempotency carry. These aren’t advanced features, they’re the difference between a payment system and a transaction log you check by hand. Any team skipping HMAC verification because “it’s just an extra step” is trading a few hours of engineering time for hours of production firefighting later.
For most businesses, the right first move is a gateway or the TON Pay SDK, full stop. If your priority is speed to market without touching KYC paperwork, that’s exactly where Cryptopayr fits: a no-KYC gateway built for merchants who want TON acceptance working this week, not next quarter.
— Dustin
Skipping months of SDK work is the real advantage here.

You get hosted checkout, e-commerce plugins, a full API, and mass payout support without writing your own webhook handler or signature verification logic from scratch. If your brand needs the checkout experience to feel entirely your own, the white-label gateway route lets you run Cryptopayr’s infrastructure under your own name. Marketplaces and platforms handling commission splits between multiple sellers get dedicated support through the platform product.
Every transaction shows up in a dashboard with webhook management already built in, so you skip the manual reconciliation that trips up direct wallet setups. If you’re running WooCommerce or a similar storefront, the plugin library gets you live in an afternoon. Check out the gateway product page and start your integration today.
Open a free CryptoPayr account and take your first crypto payment the same day.
Get started for free
Easily accept cryptocurrency on your WordPress or WooCommerce site with CryptoPayr. Enjoy low fees and seamless integration. Start today!
Merchants must understand that sales tax applies to crypto payments just like cash. Discover essential compliance steps and valuation rules.
Discover how to accept crypto on Shopify easily. Choose from USDC support or a versatile crypto payment gateway for your store.