Skip to content
ZeroKYC Pay

Networks: confirmations & TTL

Confirmation thresholds per network (TRON, EVM incl. Ethereum/BSC, BTC/LTC/DOGE/BCH, XRP, NEAR, Solana, TON, Monero) and invoice TTL rules: mempool waiting, expiry and rescan behaviour.

ZeroKYC Pay accepts payments on several blockchains. Each network has its own finality rules, so the number of confirmations required before an invoice is marked confirmed differs. This guide lists the exact production thresholds and the invoice TTL rules.

Confirmation thresholds

An invoice flips from pending to confirmed after the payment option's network reaches its confirmation threshold:

AssetNetworkAPI Asset IDConfirmations requiredTypical time
USDT (TRC-20)TRONUSDT_TRON20~1 minute
TRXTRONTRX20~1 minute
USDC (Polygon)PolygonUSDC_POLYGON50~5 minutes
USDT (Polygon)PolygonUSDT_POLYGON50~5 minutes
USDC (Arbitrum)ArbitrumUSDC_ARBITRUM40~5 minutes
USDT (Arbitrum)ArbitrumUSDT_ARBITRUM40~5 minutes
ETHEthereumETH12~2.5 minutes
USDT (Ethereum)EthereumUSDT_ETHEREUM12~2.5 minutes
USDT (BSC)BNB Smart ChainUSDT_BSC15~45 seconds
BNBBNB Smart ChainBNB15~45 seconds
BTCBitcoinBTC2~20 minutes
LTCLitecoinLTC6~15 minutes
DOGEDogecoinDOGE20~20 minutes
BCHBitcoin CashBCH3~30 minutes
XMRMoneroXMR10~20 minutes
TONTONTON1seconds
USDT (Solana)SolanaUSDT_SOL32~13 seconds
USDC (Solana)SolanaUSDC_SOL32~13 seconds
SOLSolanaSOL32~13 seconds
XRPXRP LedgerXRP3~12 seconds
NEARNEAR ProtocolNEAR3~3 seconds
USDT (TON jetton)TONUSDT_TON1seconds

Where these come from: The thresholds are enforced by the ZeroKYC Pay detection engine (app/domain/assets.py). This table reflects the production configuration as of v1.

TON-based payments (TON and USDT-TON) additionally require a memo/tag — the option's payment_url_extra field. The hosted checkout and the payment QR encode it automatically; if you build your own payment flow, a transfer without the memo is unrecoverable. See Invoice lifecycle.

Invoice TTL

Every invoice has a time-to-live. The default is 360 minutes (6 hours); you can set your own between 10 minutes and 72 hours (4320 minutes) via the ttl_minutes field when creating an invoice.

If the payment is already visible in the mempool when the TTL ends, the invoice still confirms normally — the expiry rule only applies to payments that never arrived.

Underpaid payments: A payment below the expected amount marks the invoice underpaid instead of confirmed. Handle the payment.underpaid webhook and decide whether to accept, refund or contact the customer.

Rate rules

Stablecoins are pegged for invoicing: USDT (all networks) is exactly 1:1 against USD invoices, other assets use the market rate refreshed automatically. Non-USD base currencies convert at the prevailing rate.

What's next