Skip to content

One USD balance pays every payout, topped up by wire or with USDC.

You hold a US dollar balance with Avvio, and every standard payout debits it at the moment it is sent. You fund it ahead of time, so a payout never waits on a transfer from your bank.

  1. Wire USD to the dedicated account GET .../payin-accounts returns, or hold USDC in your organization’s wallet. In the sandbox, POST .../sandbox/fund credits the balance.
  2. Check what you can send with GET .../balance.
  3. Pay. Each payout debits the balance when it is accepted. A payout larger than the balance is refused with 400 INSUFFICIENT_BALANCE, and nothing is sent.
  4. Reconcile every movement with GET .../balance_transactions.

Some crypto and dedicated settlement routings work differently: the payout is priced, answers requiresFunding: true, and waits for you to fund that one payout from your own wallet.

The balance is USD. What it can pay out to is on Countries and currencies.

amount (and balances[]) is everything a payout can draw on, per currency: what the payment network holds for you plus the USD stablecoins in your wallet, cached for up to 60 seconds. Wallet figures are face value per chain, before the cost of moving them onto the payout’s rail, so a payout for exactly amount can fail to fund when money must be gathered from several chains.

provider[] is the network-held part and wallet[] your USDC and USDT per chain. unavailable[] names any source (network or wallet) that could not be read; the figures are then a floor, uncached, so retry before concluding you cannot fund a payout. In sandbox, amount, provider[] and ledger[].available are one USD figure and wallet[] is empty.

Stablecoins a network holds for you count as USD. POST /payouts takes no sourceCurrency, and sending one is a 400 VALIDATION_ERROR; only the two-step POST …/quotes/offramp lets you name the balance currency to debit (and that path is closed to organizations with caps or approvals, see Send a payout). USD in a virtual account is reported on arrival, but on a wallet-funded routing a payout is priced from the wallet, so convert the USD to USDC in the dashboard first.

ledger[], always present, is our append-only record of the network-held part: available, held and total, never summed into anything else. The network figure says what can be spent now; the ledger figure reconciles row by row with GET /balance_transactions, which also explains any difference between them.

A wallet-funded payout is confirmed against the chain before it is recorded: the transaction must exist, have confirmed, and have paid at least the required amount to the exact deposit address.

Organizations can opt in to have wallet-funded payouts paid from their own wallet automatically. The API calls stay the same.

Was this page helpful?