Overview
A balance account is a USD account that holds funds. Bank deposits credit the balance instead of being swept onward, and the held balance can fund bank payouts or (when enabled for your organization) USDC/USDT transfers to an external or treasury wallet.- Open a balance account for a verified customer
- Fund it by wiring to the account’s deposit instructions
- Track the balance and its transaction history
- Pay out by creating transfers sourced from the balance
- Close it when the balance is drained
Prerequisites
The customer must be approved for USD balance accounts. Check the capabilities endpoint forUSD_BALANCE:
IN_REVIEW means verification is still in progress; the capability is omitted entirely when the customer has no path to it yet.
Sandbox: skip real verification by setting the customer status to
ACTIVE, then simulating the capability:USD_BALANCE becomes READY immediately, and the rest of this guide — opening the account, simulating deposits, reading balances — works as in production.Open an account
One balance account per customer. Use an idempotency key so retries are safe:holdsBalance: true and the account’s bank deposit instructions in bankDetails — routing and account number for domestic wires, plus SWIFT details for international senders:
GET /v1/accounts?holdsBalance=true.
If this balance account shares deposit coordinates with USD bank pay-in fixed routes (ACH, wire, or SWIFT), the two cannot both be enabled. Creating the balance account returns
409 while such a route is enabled; closing the balance account makes those routes available again. Crypto routes are unaffected.Fund it
No API call needed: wire (Fedwire) or SWIFT to thebankDetails above. When the deposit lands, the balance is credited automatically and your organization receives a balance.credited webhook:
250000 = $2,500.00). Deposits credit net of any deposit fee, so the balance always mirrors funds actually held.
Sandbox
Simulate a deposit instead of sending a real wire. Use the funding-method account id (vba_…) from the create response — not a top-level acct_ id:
Check the balance
GET /v1/accounts/{id}/balance returns the available balance plus any amount pending on in-flight payouts:
GET /v1/accounts/{id}/balance/transactions lists the history — deposit credits, payout debits, and reversals — newest first with cursor pagination.
Pay out
Create a transfer with the balance account as the source andpaymentRail: "BALANCE". The destination is any of the customer’s external bank accounts, over ACH, RTP, WIRE, or SWIFT:
transfer.created → transfer.processing → transfer.completed).
Balance payouts to banks are USD to USD. Per-transaction limits are $1M for ACH/RTP and $20M for WIRE/SWIFT; a small fee buffer is reserved under each cap, so payouts at exactly the limit are rejected — keep amounts a little below it.
Pay out as stablecoins
When enabled for your organization, the same balance account can fund a transfer to an external wallet or treasury wallet inUSDC or USDT. Use source.paymentRail: "BALANCE" with a crypto destination currency and rail. Developer fees are supported the same way as other onramps. Contact your Infinite representative to enable this path.
Close the account
409 otherwise). In the rare case where the account shows $0.00 available but closing is still rejected, a ledger discrepancy is pending resolution — contact support. After closing, the account no longer accepts deposits, and USD bank pay-in fixed routes become available to the customer again.