Asset IDs

Every asset the service can address, and the integer that selects it.
View as MarkdownOpen in Claude

Every endpoint except /auth, /create and /addresses takes an assetId — the integer that selects which chain and which asset you are operating on. It resolves to a chain, a chain manager, and your wallet on that chain.

Send it as an integer (21) or an all-digit string ("21"); both normalise to the same value. A missing assetId returns 400 assetId is required, and an unrecognised one returns 400 Unknown assetId.

Supported assets

assetIdChainSymbolKindDecimals
1BITCOINBTCnative8
2ETHEREUMETHnative18
21ETHEREUMUSDTERC206
22ETHEREUMUSDCERC206
3BNBBNBnative18
31BNBUSDTBEP2018
32BNBUSDCBEP2018
4TRONTRXnative6
41TRONUSDTTRC206
42TRONUSDCTRC206
5POLYGONPOLnative18
51POLYGONUSDTERC206 — mainnet only
52POLYGONUSDCERC206
6SOLANASOLnative9
61SOLANAUSDTSPL6 — mainnet only
62SOLANAUSDCSPL6

Chains

ChainFamilyNative asset
BITCOINUTXOBTC
ETHEREUMEVMETH
BNBEVMBNB
TRONTVMTRX
POLYGONEVMPOL
SOLANASVMSOL

A chain is only live if the deployment you are calling is configured for it. If an address is missing from /addresses, that chain was not configured when the user was created — backfill it with /extend.

Network-dependent assets

51 (POLYGON USDT) and 61 (SOLANA USDT) have no testnet contract address. On a testnet deployment those assetIds do not exist, and requests for them return 400 Unknown assetId.

Decimals

You never send base units. Amounts are always human-decimal strings"25.5", not 25500000. The service converts to base units using the decimals above.

Watch the one asymmetry: USDT and USDC use 18 decimals on BNB Chain and 6 decimals everywhere else. The service handles the conversion, so this only matters if you are also reading balances straight off-chain.

An amount with more decimal places than the asset supports is rejected — Amount has more than 6 decimal places.

Minimums and dust

Two different floors, and they are not the same number.

Minimum you can sendBalance below which you read "0"
BTC0.000010.0001
ETH, BNB, POL (native)0.00010.00001
TRX, SOL (native)must exceed the fee0.00001
USDT, USDC (any chain)must be greater than zero0.0001

Below the send minimum you get a 400 (Minimum send amount is 0.00001 BTC, Amount below minimum of 0.0001ETH).

A "0" balance does not prove an address is empty. Dust below the floors above is reported as "0". Do not use a zero balance as proof that a wallet can be closed, swept or reused.

On a native send the fee is taken out of the amount, so an amount that is above the minimum but smaller than the network fee is rejected with a 422 (Amount does not cover the network fee.). See Reliability and the /send reference.