Skip to content

Networks and assets

The same asset exists on several networks, and the copies are not interchangeable. USDT on BNB Smart Chain and USDT on Tron have different address formats, different decimals and different network fees. A payment sent on one network cannot arrive at an address on another.

So cTpeWay never says just “USDT”. Every amount, in the API, in events, in the dashboard and on the checkout page, is an asset on a network: “12.50 USDT on BNB Smart Chain”. In the API these are two fields that always travel together, asset and network.

Do the same in your own interface. When you show a customer where to pay, name both.

Network Native coin Tokens
Ethereum ETH Yes
BNB Smart Chain BNB Yes
Bitcoin BTC No. Bitcoin payments are in BTC only.
Solana SOL Yes
Tron TRX Yes

More EVM networks are planned. Polygon, Base and Arbitrum are the intended set, to be confirmed.

Which networks and which assets on them you accept is your choice, made in the dashboard under Settings → Networks and assets.

To get the current list from the API rather than from this page, use GET/v1/networks and GET/v1/assets. They return what is enabled for the mode of your key, so a test key lists test networks. Each network has a short name, its slug, which is what you send in the network field. Each network also says how a payment becomes confirmed on it and roughly how long that takes: see Confirmations. Each asset has decimals and min_amount, the smallest amount an invoice option may ask for.

Each network has one native coin, the coin that pays its network fees. Everything else on the network is a token, for example USDT on Tron.

The difference matters for the platform fee. cTpeWay charges it in the native coin, so:

  • a deposit in the native coin pays the fee out of the deposit;
  • a deposit in a token has its fee paid by your master wallet, and waits (Held) until the master wallet can pay.

Settlement and the platform fee explains this in full.

The API writes every crypto amount as a whole number of the asset’s smallest unit, as a string:

Amount Asset on network Decimals In the API
1.5 ETH on Ethereum 18 "1500000000000000000"
25 USDT on Tron 6 "25000000"
25 USDT on BNB Smart Chain 18 "25000000000000000000"
  • Never use a floating-point number for an amount. It cannot hold 18 decimals exactly.
  • Take decimals from the asset on that network. As the table shows, the same asset can have different decimals on different networks.
  • A price in a currency is different: it is decimal text in the currency’s main unit, such as "49.99".

The Node SDK has exact conversions, toBaseUnits('1.5', 18) and fromBaseUnits('1500000000000000000', 18). See Node SDK.

Invoices can be priced in USD only for now.

When cTpeWay converts between USD and an asset, to quote an invoice or to work out the platform fee, it uses a market price taken from several exchanges. GET/v1/rates returns the rate that invoices are being quoted at right now, for example ?base=ETH for the price of ETH in USD.

A quote shown to a payer is locked for a limited time. See Invoices.

  • On EVM networks, a reusable deposit address is the same address on every EVM network you have enabled.
  • Bitcoin addresses are native SegWit addresses.
  • Each invoice option gets its own address, used once.

In test mode the same networks are replaced by their public test networks. See Testing.