Passer au contenu

How to Accept TON (Gram) Payments — and USDT on TON

TON settles in seconds for about a cent, which makes it one of the few chains where a $3 digital sale still adds up. Here is how to accept TON payments and USDT on TON without a private key ever touching your server.

Payora9 min readEN · RU · UK · ES · DE

To accept TON payments you need three things: a receiving address for every order, something watching the chain for a payment to that address, and a signed message back to your own backend when the money lands. Payora handles the hosted checkout and monitoring flow; by default, confirmed payments are credited to your Payora balance. In approved direct-settlement setups, Payora can use merchant public-key material so the payment server watches addresses without private keys. Toncoin shows up in the Payora interface as Gram, the coin's original name; it is the same asset, and Payora has no affiliation with Telegram or the TON Foundation.

Why TON is a good rail for consumer-scale payments

Most chains are fine for a $400 order. Very few are fine for a $3 one. That's the whole argument for TON.

A plain Toncoin transfer costs somewhere around a cent, and it confirms in seconds rather than minutes. Compare that honestly with Bitcoin: when the mempool is busy, a Bitcoin transfer can cost several dollars and take an hour to reach a comfortable confirmation depth. Bitcoin is excellent settlement money and a perfectly good rail for invoices in the hundreds — we've written about accepting Bitcoin for a small business — but nobody is buying a $2 sticker pack with it. On TON the network fee is noise against the purchase price, so the small digital sale actually clears.

The second reason is distribution. TON grew up next to Telegram, and the wallet apps in that ecosystem have a very large, very non-technical user base that already has a funded wallet on their phone. The hardest part of crypto checkout has never been the chain; it's the buyer who has to go find a wallet, fund it, and figure out what a memo is. When your buyer already carries a TON wallet, checkout collapses into: tap link, confirm, done.

The UX carries that. Payora's hosted checkout renders a QR code plus a wallet deep link for the invoice. On a phone the buyer taps the link, their wallet app opens with the address and the exact amount pre-filled, and they approve. On a desktop they scan the same QR. Nothing gets copied by hand, which removes the most common way a customer sends the wrong amount to the wrong place.

The honest trade-offs

TON is not a strictly better Bitcoin, and pretending otherwise gets merchants into trouble.

  • Toncoin's price moves. If you price in USD and hold what you receive, you are carrying market risk from the moment of payment. Payora locks a rate for the invoice window so the buyer knows what to send; it cannot make the asset stable afterwards.
  • The validator set and the tooling are younger than Bitcoin's. A real consideration if you settle seven figures a day; largely irrelevant if you sell digital goods at $5.
  • Jetton transfers cost more than native transfers — still cents, but a USDT-on-TON send carries more gas than a plain Toncoin send, and the sender needs a small Toncoin balance to pay it. A wallet holding only USDT and zero TON cannot pay you. This surprises people.

USDT on TON: dollar amounts on a cheap, fast chain

Most merchants don't actually want Toncoin. They want dollars, cheaply and quickly, and TON is one of the better places to get exactly that. USDT on TON is a jetton — TON's token standard — and it settles with the same seconds-and-cents profile as the native coin.

Compared with the usual alternatives: USDT on Ethereum is safe and liquid and can cost a few dollars in gas per transfer. USDT on Tron is cheap and extremely widely used. USDT on TON is cheap, fast, and sits in front of an audience that already has the wallet installed. Payora supports all of them, so in practice you don't pick one — you list the ones your buyers actually use and let them choose at checkout. We compare the chains in detail in accepting USDT across TRC20, ERC20 and TON.

The fake jetton problem, and how a deposit is really verified

This is the part that deserves your attention, because it's where a naive integration quietly loses money.

Anyone can deploy a jetton on TON and call it USDT. It costs almost nothing. They can copy the name, the symbol, and the icon. If your gateway credits an invoice because "a token named USDT arrived at the address for the right amount," an attacker can mint ten thousand worthless lookalike units, send them to your invoice address, and walk away with a real product for zero dollars. This is not theoretical; it's the standard trick on every chain with cheap token deployment.

The check that actually works is structural. On TON, every holder of a jetton has their own jetton wallet contract, and that contract is deterministically derived from two inputs: the owner's address and the jetton master contract for that specific token. Real USDT on TON has exactly one master contract address. So when a transfer notification arrives at your receive address, the question is not "what is this token called" — it's "was this sent by the jetton wallet that the real USDT master contract would have produced for this sender?"

Payora computes the expected jetton wallet address from the known-good USDT master and compares it to the actual sender. Match, and the deposit is credited. No match, and it's a lookalike — it lands in the address, it's visible in an explorer, and it is never credited to your invoice. The token's name is treated as decoration, because that's all it is.

You don't have to implement this yourself. But you should ask any gateway you evaluate how it does it.

One address per invoice, watched from the first confirmation

In Payora’s default hosted flow, each TON invoice is tracked separately and confirmed payments are credited to the merchant’s Payora balance. Where approved direct settlement is configured and supported, the invoice can use a fresh receive address derived from merchant public-key material; Payora can watch those addresses, while signing keys remain outside the payment server and outgoing payouts are signed offline.

The practical consequence in that direct-settlement setup: if someone owns your web server tomorrow, they get your order table and your invoice history, but not the signing material needed to spend funds. The mechanics are laid out in how xPub-based HD wallets make a gateway watch-only.

Unique-address-per-invoice also does your accounting for you. There's no shared deposit address, no memo or comment tag for the buyer to forget, and no ambiguity about which of two identical $9 payments belongs to which order.

Confirmations and finality

TON reaches practical finality in seconds, and the confirmation window Payora waits for is measured in seconds rather than the tens of minutes Bitcoin needs. Payora applies each asset's own finality rule rather than one global number, because "6 confirmations" means something completely different on Bitcoin than a block count means on TON. The reasoning behind those thresholds is in how many confirmations are actually safe.

When the rule is satisfied, your server receives an HMAC-SHA256 signed webhook with a timestamp window and an idempotency key. Verify the signature, check the order id, mark it paid. That's the entire integration on your side.

Setting it up

Two paths, depending on what you run.

  1. A CMS shop. Install the free drop-in module for your platform — WooCommerce, OpenCart, PrestaShop, Magento 2, WHMCS and 17 others are on the modules page. Paste your API key, tick Gram and USDT on TON, done. No code.
  2. A custom site. One API call creates the invoice with your order id and amount; you redirect the buyer to the returned checkout URL and wait for the webhook. There's a one-file, dependency-free PHP SDK (7.4+) and a plain-JSON REST API in the docs.
POST /api/v1/invoice
{ "order_id": "A-1042", "amount": "4.90", "currency": "USD",
  "assets": ["TON", "USDT_TON"], "callback_url": "https://shop.example/hook" }

Either way you're accepting at 0% — Payora charges nothing to take a payment, and only charges when you move funds out: 1.5% on payouts, transfers and withdrawals on the Free plan (0.75% on Pro, 0.5% on Business), plus the coin’s network fee (minimum withdrawal $50). Network fees are on-chain and paid by the sender. The full breakdown is on pricing.

If you sell anything small and digital to a phone-first audience, TON is one of the few rails where the economics actually work. Create a free account, configure TON in Payora, and take your first TON payment today. If you need direct settlement from merchant public-key material, request or enable it for your account where supported.

Comments

Ready to get started?

Create an account and have your first invoice running in under an hour.

Ce que cette page répond