Stablecoins

USDT Payment Gateway: How to Accept Tether on TRC-20, BEP-20 and More

A USDT payment gateway lets you accept Tether on TRC-20, BEP-20 and other networks. Learn how it works, which networks to enable and what to check first.

Flexrix Pay··7 min read

A USDT payment gateway is a service that gives your customers an address and an exact amount to pay in Tether (USDT), watches the blockchain for that payment, and tells your system when it is confirmed. It handles the parts that are hard to do by hand: one address per order or customer, the right network, the real token contract, and a reliable "paid" signal. This guide explains how a USDT payment gateway works on TRC-20, BEP-20 and other networks, how to choose one, and how to integrate it.

What a USDT payment gateway does

USDT is a stablecoin issued by Tether and designed to track the US dollar. Customers like it because the amount they send does not swing in value between checkout and confirmation. For a business, accepting it still involves several moving parts. A gateway takes care of them:

  1. Creates a payment request. It returns an address, an amount and a network, usually on a hosted payment page with a QR code.
  2. Watches the chain. It detects the incoming transfer and waits for enough confirmations.
  3. Checks the token. It credits only the official USDT contract, not look-alike tokens.
  4. Screens the sender. A good gateway checks funds against sanctions lists and issuer blacklists before crediting.
  5. Notifies you. It updates the payment status and sends a webhook (an HTTP call to your server) so your store can deliver.
  6. Holds or forwards the funds. You can keep a balance, convert it, or pay it out to your own wallet.

Without a gateway, you would match transfers to orders by hand, which breaks as soon as two customers send the same amount.

TRC-20, BEP-20, ERC-20: USDT lives on many networks

"TRC-20" and "BEP-20" are token standards, not different coins. TRC-20 is the token standard on TRON. BEP-20 is the standard on BNB Smart Chain. ERC-20 is the standard on Ethereum and the networks built around it. The same dollar token exists on each network, but a transfer on one network cannot arrive on another. The customer must send on the network you asked for.

Tether publishes the official contract for each network it issues on in its list of supported protocols. For example, USDT on TRON is TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t and USDT on Ethereum is 0xdac17f958d2ee523a2206206994597c13d831ec7. Two details are worth knowing:

  • BNB Smart Chain is not on Tether's own list. The USDT that wallets and exchanges use on BNB Smart Chain is a bridged, USDT-backed token rather than one Tether issues directly. It is widely used, but your gateway should credit one specific, well-known contract and ignore everything else.
  • Some layer-2 networks use USDT0. On Arbitrum, OP Mainnet and Polygon, the USDT that Flexrix Pay credits is USDT0, a cross-network version of Tether's token that its operators say is backed 1:1 by USDT on Ethereum. Older bridged versions of USDT on those networks are not credited.

Anyone can deploy a token named "USDT" with a familiar logo. Only the canonical contract has value, so a gateway that checks contracts rather than symbols protects you from fake deposits.

USDT TRC-20 payment gateway vs USDT BEP-20 payment gateway

Most searches for a USDT payment gateway are really about two networks: TRON and BNB Smart Chain. In practice you rarely need to choose one. A single gateway can offer both and let the customer pick the network their wallet already holds.

NetworkToken standardApprox. wait before creditCustomer pays fee in
TRONTRC-20~1 minTRX (energy and bandwidth)
BNB Smart ChainBEP-20~1 minBNB
SolanaSPL~1 minSOL
TONJetton~1 minTON
Polygon PoSERC-20 (USDT0)~1 minPOL
EthereumERC-20~15 minETH
Arbitrum OneERC-20 (USDT0)~20 minETH
OP MainnetERC-20 (USDT0)~20 minETH

The waits are the approximate confirmation times Flexrix Pay uses before crediting, and they vary with network conditions. Fees also change with demand on every chain, so treat any fee you see as a snapshot.

TRON is common for customers paying from exchange accounts; sending USDT there uses resources called energy and bandwidth, paid in TRX if the sender has none. Ethereum fees are usually higher than on the other networks. Start with the networks your customers already use and add more when they ask.

A gateway usually offers three ways to take a USDT payment. Pick by how you sell.

MethodBest forCode needed
Payment linkFreelancers, agencies, invoices sent by chat or emailNo
API invoiceOnline stores and SaaS checkouts, one payment per orderYes
Permanent deposit addressAccount top-ups, wallets, repeat customersYes

Payment links are hosted pages you create in a dashboard and share by WhatsApp, Telegram or email. Invoices are created by your back end for each order and expire after a set time. Permanent deposit addresses give each customer a stable address on each network, and every top-up is credited to that customer.

On Flexrix Pay, invoices can be priced in USDT or in one of 145 fiat currencies. When an invoice has a fiat price, the customer can choose the coin and network on the payment page, and the rate is locked when they choose. Invoices are valid for 5 to 60 minutes, one hour by default.

USDT payment gateway API: a minimal integration

If you sell online, the API route gives you full control. The shape is the same with most providers:

  1. Create an API key with only the permissions you need. Keep any key that can send payouts on your server only.
  2. Register a webhook endpoint so your server hears about payments.
  3. Create an invoice for each order, using your order id as a reference.
  4. Send the customer to the hosted payment page, or show the address and amount yourself.
  5. Mark the order paid when the webhook says so.

With the Flexrix Pay API, every request is signed with HMAC-SHA256 using the headers X-FP-Key, X-FP-Timestamp, X-FP-Nonce and X-FP-Signature, and amounts are decimal strings. An invoice for 25 USDT on TRON is a single POST /v1/invoices call:

json
{
  "foreign_id": "order-1001",
  "network": "tron",
  "asset": "USDT-TRON",
  "amount": "25"
}

To let the customer choose between TRC-20 and BEP-20, leave out network and asset, send a fiat price, and limit the options:

json
{
  "foreign_id": "order-1002",
  "price_amount": "49.90",
  "price_currency": "USD",
  "allowed_assets": ["USDT-TRON", "USDT-BSC"]
}

The response includes a checkout_url for the hosted page. Your webhook then receives events such as invoice.paid, invoice.underpaid or invoice.overpaid. Re-sending the same foreign_id with the same content returns the existing invoice, and you can add an Idempotency-Key header, so a retry after a timeout does not create a duplicate.

How to choose the best USDT payment gateway

"Best" depends on your customers and your risk tolerance. These questions separate a solid gateway from a fragile one:

  • Networks. Does it support the networks your customers actually use, including TRC-20 and BEP-20?
  • Contract checks. Does it credit only canonical USDT contracts and ignore fake tokens?
  • Edge cases. What happens with underpayments, overpayments and payments after expiry? Are they credited or lost?
  • Screening. Are incoming funds checked against sanctions lists and issuer blacklists before credit?
  • Pricing in your currency. Can you price in your local currency with a fair, locked rate?
  • Webhooks. Are they signed, retried and replayable after an outage?
  • Payout controls. Can you require approvals, set daily limits and allowlist destination addresses?
  • Fees. Are fees published, and are network fees shown separately?
  • Custody. Who holds the funds, and how are keys protected?

Edge cases to decide before launch

Crypto payments are pushed by the customer, so the amount that arrives does not always match the request. Write down your policy first:

  • Underpayment. Often an exchange deducted a withdrawal fee. Ask for the rest, accept a small shortfall, or refund.
  • Overpayment. Refund the difference or keep it as account credit.
  • Late payment. Decide whether to honor the original price after the invoice expires.
  • Refunds. There are no chargebacks. A refund is a new outgoing payment, so ask for a refund address on the correct network.

On Flexrix Pay, every on-chain payment above the network minimum to an invoice or deposit address is credited to your balance once it is confirmed and screened, including underpayments, overpayments and late payments. The invoice is marked paid, underpaid or overpaid, a webhook is sent, and you decide what to do next. When a customer asks whether a transfer went through, you or they can look up the transaction hash on the blockchain explorer.

Tax and reporting rules for receiving stablecoins depend on where you operate. Consult a qualified accountant or lawyer before launch.

FAQ

Can one gateway accept both USDT TRC-20 and USDT BEP-20?

Yes. A multi-network gateway can offer both on the same payment page and credit each to the same balance. The customer only has to send on the network shown next to the address.

What happens if a customer sends USDT on the wrong network?

The transfer arrives on a different blockchain from the one you are watching, so it cannot be credited to that invoice automatically. Prevent it by showing the network name clearly and letting the customer pick a network before an address is shown.

Is USDT always worth exactly one dollar?

It is designed to track the dollar and usually trades very close to it, but small deviations happen. You can watch the market on the Tether price page or check a conversion with the currency converter.

Key takeaways

  • A USDT payment gateway issues addresses, watches the chain, checks the token contract, screens funds and notifies your system.
  • TRC-20 and BEP-20 are network standards for the same dollar token; the customer must pay on the network you show.
  • Only canonical contracts count; on Arbitrum, OP Mainnet and Polygon, Flexrix Pay credits USDT0.
  • Choose between payment links, API invoices and permanent deposit addresses based on how you sell.
  • Decide your rules for underpayments, overpayments, late payments and refunds before launch.

Try it with Flexrix Pay

Flexrix Pay accepts USDT on TRON, BNB Smart Chain, Ethereum, Solana, TON, Arbitrum One, OP Mainnet and Polygon PoS through payment links or the REST API. Create a free account to try it, and see the API reference for invoices, deposit addresses and webhooks.

Keep reading