Passer au contenu

How to Accept USDT Payments (TRC-20, ERC-20 & TON)

Payora9 min readEN · RU · UK · ES · DE

To accept USDT payments on your website, you generate a receiving address on the network your customer wants to pay from — usually Tron (TRC-20) for the lowest fees — price the invoice in fiat, and confirm the payment on-chain before releasing the goods. The catch most people miss: USDT is not one asset. It's the same dollar-pegged token issued on several different blockchains, and the network you pick decides whether a $20 payment costs the payer a cent or ten dollars in gas.

This guide walks through the practical decisions — which networks to support, how fees actually differ, how a fiat-priced invoice lets the customer choose the cheapest route, and how many confirmations you should wait for before you consider the money real.

USDT is a token, not a network

Tether (USDT) is a stablecoin: an ERC-20-style token whose issuer aims to keep it worth one US dollar. The important part for a merchant is that the same USDT exists as separate token contracts on different chains. A USDT balance on Tron cannot be sent directly to an Ethereum address, and vice versa — they are different rails carrying the same unit of value.

When you set up a USDT payment gateway, you are really choosing which of those rails to accept:

  • TRC-20 — USDT on the Tron network. By transaction volume this is the most-used USDT rail in the world, largely because fees are tiny.
  • ERC-20 — USDT on Ethereum. The oldest and most liquid, but gas fees fluctuate with network congestion.
  • TON — USDT on The Open Network, popular with Telegram-based flows. Fast and cheap.
  • Solana (SPL) — USDT on Solana. Sub-cent fees and near-instant settlement.

You don't have to pick just one. The better pattern is to accept several and let the payer choose the network their funds already sit on.

Why network choice matters: TRC-20 vs ERC-20 fees

The single biggest reason to care about networks is cost, and the gap is not subtle. Here's a realistic comparison for sending the same $50 in USDT, using typical (not worst-case) conditions:

NetworkTypical fee to sendSettlement speedPaid in
TRC-20 (Tron)~$1 or less~1 minuteTRX (or energy)
ERC-20 (Ethereum)$2–$15+, congestion-dependent~1–5 minutesETH gas
TONa few centssecondsTON
Solana (SPL)fraction of a centsecondsSOL

Notice the TRC-20 vs ERC-20 fees difference. On a busy day, an Ethereum transfer can cost more than a small purchase itself. That's fine for a $5,000 B2B invoice where a $10 fee is noise, but it's punishing for a $15 digital download. Meanwhile a payer whose USDT already lives on Tron can settle the same $15 for pennies. This is also the core of why so much stablecoin volume has migrated to Tron — we cover the fee mechanics in depth in reducing crypto payment fees.

Remember that the payer pays the gas, not you. Your job is to make sure the cheapest option is available so the customer isn't quietly forced onto an expensive rail.

Price in fiat, let the customer pick the network

The cleanest way to accept stablecoins is to price the invoice in a fiat currency and treat the crypto as a payment method chosen at checkout. You create an invoice for, say, $49.00 USD. The customer lands on a checkout page, picks "USDT," and then picks a network. Because USDT tracks the dollar, the amount due is simply 49.00 USDT on whichever chain they selected — the network only changes the fee they pay, not the amount you receive.

This solves three problems at once:

  1. No manual conversion. You think in dollars; the gateway shows the right token amount and a fresh receiving address per invoice.
  2. The payer optimizes their own fee. Someone holding USDT on Tron uses TRC-20; someone whose funds are on Solana uses SPL. Nobody is bridging just to pay you.
  3. Clean reconciliation. Each invoice maps to one address and one expected amount, so matching a payment to an order is deterministic.

With Payora this is exactly how hosted checkout and the invoice API work: one fiat-priced invoice, multiple coins and networks offered on the same page. If you'd rather see it before wiring anything, the live checkout demo runs the full flow end to end.

Confirmations and finality: when is the money real?

A payment isn't done the instant it appears in the mempool — it's done when the network has buried it under enough blocks that reversal is impractical. How many confirmations you wait for is a risk decision that scales with order value.

  • TRC-20: Tron uses fast block times; ~19–20 confirmations reaches strong finality within a minute or two.
  • ERC-20: Ethereum is probabilistic; many merchants wait 12+ block confirmations (a few minutes) for larger sums.
  • TON / Solana: both reach practical finality in seconds, which is part of their appeal for low-value, high-volume checkouts.

A sane default: release small digital goods after the first confirmation and require deeper confirmation depth for high-value or physical orders. Your gateway should tell you the confirmation count so you can set thresholds rather than guess.

However you get notified, verify it cryptographically. Payora fires an HMAC-SHA256 signed webhook when an invoice reaches your required confirmation depth, so your backend never trusts an unauthenticated "paid" ping — the signature scheme is walked through in webhook signature verification.

Don't forget USDC

USDT isn't the only dollar stablecoin worth supporting. USDC is issued by Circle and behaves the same way at checkout — a dollar-pegged token that exists as separate contracts on Ethereum, Solana, and other chains. Offering both costs you nothing and lets customers pay with whichever stablecoin they hold. The network logic above applies identically: a USDC payer on Solana pays a fraction of a cent; the same payer on Ethereum pays gas.

One honest caveat: a stablecoin is only as stable as its issuer's peg. We never promise price stability, and neither should you in your checkout copy. In normal conditions USDT and USDC trade at a dollar; treat "settles to roughly face value" as the design assumption, not a guarantee, and this is not financial advice.

Balance-first by default

Where the received USDT lands matters as much as which network carried it. Payora is 0% to accept: the full amount is credited to your Payora balance, and you withdraw it to your own wallet when it suits you. Direct settlement from merchant public-key material is available only when enabled for approved accounts; the HD-wallet derivation behind that setup is explained in direct settlement and HD wallets.

Commercially it's simple too: it's 0% to accept USDT, and you only pay when money leaves your balance: 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). Accepting USDT on Tron and every other supported network — 20+ coins across 9 chains — costs nothing at the point of sale.

Getting started

Accepting USDT well comes down to three habits: support more than one network, price in fiat so the payer picks the cheapest rail, and wait for confirmation depth that matches the order's value. Do that and a $15 sale settles for pennies while a $15,000 invoice settles with confidence.

Ready to wire it up? Create a free account to get API keys, skim the SDK and REST docs, and drop a fiat-priced USDT invoice onto your site today. If you're weighing the broader build-vs-buy question first, start with accepting crypto without a payment processor.

Comments

Ready to get started?

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

Ce que cette page répond