To verify a USDT payment, do not rely on a screenshot or a “payment sent” message. Open the transaction hash in a trusted block explorer for the claimed network, then confirm that the transaction succeeded, the token contract is the real USDT contract, the recipient is your address, the amount matches the invoice and the transfer has enough confirmations. Mark the order paid only when every required field matches.

A screenshot can be edited, reused or captured while a transaction is still pending. Even a real transaction hash is not proof by itself: it may point to a failed transfer, a different recipient, the wrong network, a counterfeit token or an old payment for another order. The reliable source of truth is the confirmed on-chain transaction matched to the payment you expected.

Quick crypto payment verification checklist

Before delivering a product, activating a service or confirming a booking, check all of the following:

  1. Network: the transaction is on the network agreed with the customer.
  2. Status: the explorer reports the transaction as successful, not pending, dropped or failed.
  3. Token contract: the transferred asset is the genuine USDT or USDC contract on that network.
  4. Recipient: the receiving address exactly matches your payment address.
  5. Amount: the amount received satisfies the invoice amount under your payment policy.
  6. Confirmations: the transfer has reached the confirmation threshold you require.
  7. Order match: the transaction has not already been assigned to a different invoice or customer.

If one check fails or remains unclear, treat the payment as unverified. Do not use a screenshot to fill in missing on-chain evidence.

Why a payment screenshot is not proof

A screenshot is an image of an interface, not a blockchain record. It cannot prove that the transaction shown is final, belongs to the current customer or sent the expected asset to your address.

Common misleading screenshots include:

  • a wallet confirmation screen shown before the transaction is broadcast;
  • a pending or failed transaction;
  • an old successful transfer reused for a new order;
  • a transfer to another address with the recipient hidden;
  • a token with the name “USDT” but a different contract;
  • an edited amount, status or transaction hash;
  • an exchange withdrawal request that has not yet produced an on-chain transfer.

Ask for the transaction hash when investigating a manual payment, but verify the hash independently. Do not open a block-explorer link supplied by the buyer if you do not recognize the domain; copy the hash and search for it in a trusted explorer for the correct network.

How to check a USDT transaction step by step

1. Identify the network first

USDT exists on multiple networks. A transaction hash only makes sense in the context of its network, and the same wallet-shaped address can be valid on more than one EVM network.

Confirm whether the invoice requested USDT on Ethereum, TRON, BNB Smart Chain, Polygon, Arbitrum, Base, Optimism or Solana, then use an explorer for that network. A successful transfer on the wrong network does not pay the original invoice, even if the token symbol and recipient string appear familiar.

Use the same explorer hosts that GramPayBot uses when it links to transaction details:

NetworkExplorerWhat to paste into search
EthereumEtherscanTransaction hash beginning with 0x
OptimismOP Mainnet EtherscanTransaction hash beginning with 0x
BNB Smart ChainBscScanTransaction hash beginning with 0x
BaseBaseScanTransaction hash beginning with 0x
PolygonPolygonScanTransaction hash beginning with 0x
ArbitrumArbiscanTransaction hash beginning with 0x
TRONTRONSCANTRON transaction hash
SolanaSolscanSolana transaction signature

Paste the raw hash or signature into the explorer’s search field. If it returns no result, first check that the customer named the correct network. Do not keep trying the same hash on random explorer domains supplied in a message.

2. Confirm that the transaction succeeded

Find the transaction status in the explorer. The exact label varies by network, but it must indicate successful execution. “Pending” means the network has not finalized the result. “Failed,” “reverted” or “dropped” means the expected transfer did not settle.

Do not confuse an exchange’s internal withdrawal status with blockchain confirmation. A withdrawal can be approved inside an exchange before the resulting transaction appears and confirms on-chain.

On Etherscan-family explorers, start with Status and then inspect Tokens Transferred. On TRONSCAN, check Result and Token Transfers. On Solscan, check Status and Token Balance Change. The labels can change, but the evidence you need stays the same: successful execution and an actual token transfer to your address.

3. Verify the token contract, not only the symbol

Token names and symbols are not unique. Anyone can create a token called USDT, copy its logo and send a large-looking balance that has no relationship to genuine Tether USD.

Open the token transfer details and compare the contract address with the contract supported for USDT on that network. The same rule applies to USDC. A familiar symbol or logo is useful for display, but the contract address identifies the asset.

When you use a configured payment route in GramPayBot, the expected network, token contract and receiving address are defined before the buyer pays. See how to set up wallets and networks.

4. Compare the recipient address exactly

The transfer destination must match the address you control and supplied for this payment. Compare the full address rather than the first and last few characters shown by a shortened wallet interface.

Address-poisoning scams exploit visual shortcuts by sending transactions involving addresses that resemble a real one. Copy the expected address from your own system or invoice, not from recent wallet activity.

5. Compare the received amount with the invoice

Check the token amount recorded in the transfer event, accounting for the token’s displayed decimals. Then apply your written policy for exact payments, underpayments and overpayments.

A transaction may be genuine and successful but still not settle the order. For example, receiving 95 USDT does not automatically pay a 100 USDT invoice. An overpayment may also need review rather than automatic fulfilment or an automatic refund.

For manual sales, create a separate invoice before the customer pays. The invoice preserves the expected amount and payment context, which is safer than reconstructing the agreement from chat messages later. See how to create a tracked crypto invoice.

6. Wait for the required confirmations

A transaction can appear in a block before your payment policy considers it final. Confirmations indicate how many blocks or finalized network updates have followed the transaction.

The appropriate threshold depends on the network, transfer value and risk policy. Avoid publishing one permanent number for every chain. Use the threshold configured by your payment system and keep the order in a waiting state until it is reached.

7. Match the transaction to one order only

A valid transaction should not be reusable as proof for several orders. Record the transaction hash when a payment is accepted and prevent the same hash from closing another invoice.

Do not identify the payer only by the sending address. Exchanges may send withdrawals from shared wallets, while a customer may pay from a different wallet than expected. Match the transfer using the invoice’s network, token, recipient, amount, time window and unique transaction identity.

Transaction found does not always mean invoice paid

These states should remain separate:

EvidenceWhat it provesOrder decision
Screenshot or “sent” messageThe buyer claims to have paidDo not fulfil
Unknown or missing transaction hashNo independently verifiable transferDo not fulfil
Pending transactionA transfer may be in progressKeep waiting
Successful transfer with wrong token, network or recipientA transaction exists, but it does not match the invoiceDo not mark paid
Successful underpayment or ambiguous transferSome funds may have arrivedReview manually
Confirmed transfer matching every required invoice fieldThe expected payment settledMark paid and fulfil

This distinction is important because “transaction found,” “funds received” and “order paid” are related but not identical business states.

When manual verification stops scaling

Manual explorer checks can work for occasional payments, but the process becomes fragile when several customers pay at the same time or orders arrive outside working hours. A staff member must repeatedly choose the right explorer, recognize the correct token contract, compare long addresses, wait for confirmations and ensure that a hash has not already been used.

Automated verification starts with an invoice created before payment. The payment system already knows the expected network, token, recipient, amount, expiry time and order reference. It monitors the blockchain, applies confirmation rules, rejects mismatches and changes the invoice status only when the transfer satisfies the defined conditions.

GramPayBot performs that matching without taking custody of the merchant’s funds: the customer pays directly to the configured wallet, while the invoice records the status and transaction hash. Ambiguous, late, underpaid or overpaid transfers can remain available for review instead of closing the wrong order automatically.

If you agree sales in chat, use the Telegram crypto payment workflow to replace screenshots with tracked invoices. If your website already creates orders, use automated crypto payments for websites to connect invoice status to your order flow.

Next step

Automate payment verification on your website

Create an invoice for each order, let the buyer pay through hosted checkout and receive an order-linked result.

Explore website payments →