Coins & exchange rates

Price in US dollars, get paid in eight coins: which coins are supported, how native coin rates are locked, and how each coin is held and paid out.

Invoices are always priced in US dollars. The buyer pays in a pay currency: a stablecoin (USDT, USDC) or a native coin (BNB, TRX, TON, SOL, ETH, POL). You choose which coins you accept under Settings → Accepted currencies; new accounts accept USDT only.

Supported coins

CoinTypeNetworksStatus
USDT Tether USD Stablecoin (1 = $1) TRC-20, BEP-20, Polygon, Arbitrum, Solana Live
USDC USD Coin Stablecoin (1 = $1) TRC-20, Polygon, Arbitrum, Solana Live
BNB BNB Native coin (locked rate) BEP-20 Coming soon
TRX TRON Native coin (locked rate) TRC-20 Live
TON Toncoin Native coin (locked rate) TON Coming soon
SOL Solana Native coin (locked rate) Solana Live
ETH Ether Native coin (locked rate) Arbitrum Live
POL Polygon Native coin (locked rate) Polygon Live

The live list, with icons and indicative prices, is always available from GET /v1/currencies. Per-network fees and contracts are in GET /v1/networks.

Choosing the coin

  • Omit pay_currency and the buyer picks a coin and a network on the hosted checkout.
  • Send pay_currency (with or without network) to fix the coin, e.g. "pay_currency": "BNB", "network": "BEP20".
  • Send allowed_currencies to narrow the choice for one invoice, e.g. stablecoins only: ["USDT", "USDC"].
  • Integrations that send none of these keep working exactly as before: the invoice is paid in USDT.

Exchange rates for native coins

  • The rate (USD per coin) is the median of several independent market sources. If fewer than two sources agree within the allowed spread, ZyvoPay refuses to quote rather than guess: creating the invoice fails with 503 price_unavailable.
  • When the coin is chosen, the rate is locked for 20 minutes (rate_expires_at, never later than the invoice expiry).
  • pay_amount = USD price ÷ rate + a 0.5% buffer for price movement, rounded up to 6 decimals. The buffer is credited to you, not kept as a fee.
  • A payment first seen while the rate is locked is compared in coins; top-ups after a partial payment use the same rate. A payment first seen after the rate expired is valued at the rate of that moment and the status is decided in USD, using your underpayment tolerance.
  • The hosted checkout shows a Refresh rate button once the rate expires, so the buyer always sends a current amount.

Balances and payouts

Every coin is a separate balance: a BNB payment is credited in BNB and paid out in BNB, a USDC payment in USDC. ZyvoPay never converts your funds. GET /v1/balance returns USDT at the top level (for older integrations) and every coin under balances. Withdraw with "currency": "BNB" on POST /v1/withdrawals, or set an auto-payout address per coin in the dashboard.

Fees

Your plan's transaction fee is computed in USD and taken in the coin the buyer paid with. Buyer network fees are set in USD per coin and network; payout fees are set in the coin itself (for example 0.0005 BNB).

Invoice fields

FieldUnit
amount, amount_usd, platform_fee, network_fee, merchant_net, received_amount_usdUSD
pay_amount, received_amountpay_currency (equal to USD for stablecoins)
rateUSD per coin ("1" for stablecoins)
rate_expires_atISO 8601, native coins only

DHRU Fusion callbacks always carry the USD price, whatever coin the client paid with, so panel balances stay in your panel currency.