Networks and assets

9 networks. Native coins,
USDT and USDC

Customers pay with what they already hold. You choose which assets to accept, in the dashboard or per invoice via allowed_assets.

NetworkCoinUSDTUSDCWhen it's “paid”
BitcoinBTC——2 blocks; 3 for large amounts
LitecoinLTC——6 blocks
EthereumETHERC-20ERC-20finalized; 12 blocks for small amounts
BNB Smart ChainBNBBEP-20BEP-2015 blocks
Polygon PoSPOLyesnativefinalized
BaseETH—nativefinalized; 20 blocks for small amounts
Arbitrum OneETHyesnativefinalized; 20 blocks for small amounts
TRONTRXTRC-20—19 blocks (solidified)
SolanaSOLSPLSPLcommitment finalized

These are default confirmation thresholds, and the operator can tune them: the larger the amount, the more confirmations. The exact number for a given payment is returned on the invoice as required_confirmations.

Tokens by contract, not by name

USDT is credited only if the transfer comes from an allowlisted contract address. A counterfeit coin with the same name won't change the status.

Rates: median of three exchanges

Kraken, Coinbase and Bitstamp; quotes no older than 2 minutes and no more than 1% apart. If the sources disagree, no amount in a volatile asset is quoted.

Minimum amount

Each asset has its own minimum (min_amount in GET /v1/assets). If the invoice amount is below it, that asset simply isn't offered on the invoice.

Per invoice

Narrow the choice with one field

Without allowed_assets, the customer sees every asset enabled in your dashboard. With it, they see the intersection of your list and what's available.

An asset ID combines the coin and network: USDT-TRON, USDC-BASE, USDT-ETH, USDC-SOL, BTC, ETH, ETH-ARB… For the full list available to you, call GET /v1/assets.

POST /v1/invoices
{
  "order_id": "ORDER-1001",
  "price_amount": "49.99",
  "price_currency": "USD",
  "allowed_assets": ["USDT-TRON", "USDC-BASE", "BTC"]
}