USDT Invoice

How USDT Invoice works inside

What the site keeps, where every number on it comes from, and how a payment gets its status. The figures on this page are taken from the code that does the work.

What we keep, and what we don’t

  • Invoices: nothing. The invoice is the link itself. Everything after the # sign stays in the browser, and browsers don’t send that part to any server.
  • A payment check: the address, amount and invoice date go to our server once; it asks TronGrid or Etherscan and answers. Nothing from the request is written down.
  • Rate limit: a salted hash of your IP address, kept for 60 seconds, so that one connection makes at most 12 checks a minute.
  • Counters: daily totals of events (an invoice created, opened, checked or paid; a transaction looked up; a payment proof made or opened; a page visited, with the name of the referring site from a fixed list), some split by network. No cookies, no addresses, no amounts.
  • Page speed: Vercel Speed Insights reports how fast pages load, without cookies. The part of the address after # is cut off before anything is sent, and our own test visits send nothing.

Where the data comes from

  • TRON: TronGrid, for transfers, transactions, blocks and fee parameters.
  • Ethereum: Etherscan, for transfers and transactions, and a public Ethereum node (PublicNode) for the finalized block and the gas price.
  • TRX and ETH in dollars: CoinGecko, or Kraken when CoinGecko is busy.
  • Every result links to Tronscan or Etherscan, so you can check it there yourself.

How a payment gets its status

  • Paid: one transfer of exactly the invoice amount, or two or three that add up to it exactly, made after the invoice was created (allowing 15 minutes for clocks that are off).
  • Partly paid: one transfer up to 5% short. That is what an exchange withdrawal looks like when the exchange takes its fee out of the amount.
  • Not found: anything else. Other transfers to the same address are never added up loosely, so a busy address can’t mark an invoice as paid.

When a payment is final

  • TRON: once at least 19 block producers have built on the transaction’s block, about 57 seconds after it. Read from TronGrid’s solidified block. The check by address counts TRON transfers only once they are final.
  • Ethereum: once its block is finalized, 13–19 minutes after it is made. Read from the public Ethereum node. Until then every page says “Confirmed, not final yet”.

Sources: developers.tron.network, ethereum.org

The fee shown to the payer

  • The work a USDT transfer does is set by the token contract. We measured it on 2026-10-31 by simulating transfers: 14,610 energy on TRON before its dynamic factor (29,610 to an address that has never held USDT), and 46,491 gas on Ethereum (64,043 to a new address).
  • The prices are read about once a minute: TRON’s energy and bandwidth prices and the USDT contract’s dynamic factor from TronGrid; on Ethereum, the next block’s base fee plus the median tip of the last five blocks; TRX and ETH in dollars.
  • That is what a wallet pays on its own. A wallet with staked or rented energy pays less on TRON, and an exchange charges its own withdrawal fee instead.

Limits

  • 12 checks a minute per connection. An answer from the blockchain APIs is reused for up to 45 seconds.
  • A payment check reads up to 600 TRON or 1,000 Ethereum transfers after the invoice date, for invoices up to 400 days old.
  • USDT on TRON (TRC20) and Ethereum (ERC20) only: no BEP20, TON or other networks yet.

What the site never does

  • Hold or move money. Payments go straight from the payer’s wallet to the recipient’s.
  • Ask for a private key, a seed phrase or a wallet connection.
  • Vouch for who made an invoice. Anyone can make one with any address and name, and the invoice page says so.

Checked against the code on 2026-11-01.