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
| Coin | Type | Networks | Status |
|---|---|---|---|
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_currencyand the buyer picks a coin and a network on the hosted checkout. - Send
pay_currency(with or withoutnetwork) to fix the coin, e.g."pay_currency": "BNB", "network": "BEP20". - Send
allowed_currenciesto 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
| Field | Unit |
|---|---|
amount, amount_usd, platform_fee, network_fee, merchant_net, received_amount_usd | USD |
pay_amount, received_amount | pay_currency (equal to USD for stablecoins) |
rate | USD per coin ("1" for stablecoins) |
rate_expires_at | ISO 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.