thru

Chains and tokens

The API accepts more chains and tokens than it can confirm. A payment on a combination that is not watched is created normally, shows an address, and never confirms, with no error anywhere. Offer your customers only the combinations marked live below.

There is no endpoint that lists payable combinations; this page is the list. It was last checked on 2026-09-19.

Mainnet

chaintokenContract address or coin typeDecimalsConfirmationsLive on api.thru.la
bnbUSDC0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d1815live
bnbBNBnative1815live
bnbUSDT0x55d398326f99059fF775485246999027B31979551815not yet
suiUSDC0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC61live
suiSUInative91live
suiUSDT0x375f70cf2ae4c00bf37117d0c85a2c71545e6ee05c4a5c7d282cd66a4504b068::usdt::USDT61not yet
arcUSDCnative (see Arc below)181live
robinhoodUSDG0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168620live
robinhoodETHnative1820live
baseUSDC0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913620not yet
baseUSDT0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2620not yet
baseETHnative1820not yet
solanaUSDCEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v632not yet
solanaUSDTEs9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB632not yet
solanaSOLnative932not yet
tronUSDTTR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t619not yet
tronUSDCTEkxiTehnzSmSe2XqrBj4w32RUN966rdz8619not yet
tronTRXnative619not yet

So the stablecoins you can accept on mainnet today are USDC on BNB Chain, USDC on Sui, USDC on Arc and USDG on Robinhood Chain. "Not yet" rows are registered, so the API accepts them, but api.thru.la is not watching them, and a payment made with one would not be detected. Do not offer them until this page marks them live.

Native coins (BNB, SUI, ETH) are live but are charged in coins: thru does no currency conversion, so "amount": "25" with "token": "BNB" asks for 25 BNB. For dollar prices, use stablecoins.

Testnet

chaintokenContract address or coin typeDecimalsLive on api.thru.la
arcUSDCnative18live
bnbBNB, USDC (0x64544969ed7EBf5f083679233325356EbE738930)18, 18not yet
baseETH, USDC (0x036CbD53842c5426634e7929541eC2318f3dCF7e)18, 6not yet
suiSUI, USDC (0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC)9, 6not yet
solanaSOL, USDC (4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU)9, 6not yet
robinhoodETH onlynative18not yet
tronTRX onlynative6not yet

Test on Arc testnet ("chain": "arc", "network": "testnet", "token": "USDC"), with test USDC from Circle's faucet. It is the only testnet api.thru.la watches today.

Rails a custom-amount product may use

A custom_amount product (products) charges the session amount in units of the rail's token, 1:1: "amount": "37" on a USDC rail asks for 37 USDC, and on a BNB rail it asks for 37 BNB. thru does no currency conversion, so for dollar-denominated credit list stablecoin rails only. POST /v1/products and PATCH /v1/products/:id refuse a rail (the product's own chain/token, every networks row and every enabledChains entry) whose token is not registered for that chain and network, or whose chain thru does not watch — with <token> on <chain>/<network> is not a token thru detects or <chain> cannot be a rail on a custom_amount product. As of the date above, the stablecoin rails that are live are:

  • mainnet: USDC on bnb, USDC on sui, USDC on arc, USDG on robinhood;
  • testnet: USDC on arc.

Native coins (BNB, SUI, ETH) pass the check and are charged in coins. Fixed-price products are not restricted.

Chains the API accepts but never confirms

  • ethereum, polygon, arbitrum, optimism, avalanche, fantom, gnosis, linea, scroll, zksync, mantle, celo, blast and bsc are accepted by POST /v1/payments (201), but no token is registered for them, so a payment on them never confirms. ethereum is the one people reach for first; it is not live. For BNB Smart Chain, use bnb, not bsc.
  • A token that is not in the tables above is also accepted and never confirms. For example, "token": "DAI" on bnb creates a payment that will never be detected.

Chains the API rejects

aptos, bitcoin, litecoin, dogecoin, xrp, ton, near, cosmos, polkadot and cardano return 400 on create, because thru has no wallet on them that could receive funds.

Notes per chain

  • Arc. USDC is Arc's native asset (it also pays gas), registered with 18 decimals and no contract address. Arc also exposes the same balance through an ERC-20 interface at 0x3600000000000000000000000000000000000000 with 6 decimals. That is the same money, not a second token, and thru does not watch it. Payers must send USDC as a normal wallet transfer of the native asset.
  • Native coins on EVM chains (BNB, ETH on Robinhood Chain, USDC on Arc) are detected from the value of a top-level transaction. A native transfer made from inside a smart contract, which many smart-contract wallets and some exchange withdrawals do, is not detected. Tokens such as USDC on BNB Chain are detected from their transfer events and do not have this limitation.
  • BNB Chain USDC and USDT use 18 decimals, not the 6 they use on most chains. Amounts in the API are in token units, so this matters only if you work with atomic amounts.
  • Robinhood Chain has no USDC; its dollar stablecoin is USDG.
  • token accepts the symbol or the contract address or coin type from these tables, and thru stores the symbol.