Short answer
Retrieve the balance and use the available amount, in the right currency, as the limit for the transfer or payout. Funds from recent payments sit in pending until they become available. For Connect transfers paid from a specific charge, set source_transaction: the transfer goes through right away, and the seller can use the money once the charge’s funds become available.
Rather not fix it yourself? Stripe Billing Fix and Setup handles it at a fixed price, agreed before work starts.
Why the balance is too low, and the fix
01
The amount counts pending funds
“For transfers and payouts, use an amount less than or equal to the account’s available balance.” Stripe, Error codes (balance_insufficient)
Recent payments land in the pending balance first. A payout or transfer sized from total sales fails until those funds become available. Read the available balance before sending money out.
const balance = await stripe.balance.retrieve(); const usd = balance.available.find((b) => b.currency === 'usd'); const amount = Math.min(requested, usd?.amount ?? 0); if (amount > 0) { await stripe.payouts.create({ amount, currency: 'usd' }); }02
A Connect transfer runs before the charge settles
A marketplace that transfers to a seller right after a charge can outrun the available balance. Pass the charge as source_transaction: the transfer is made from that charge’s pending funds right away, and they become usable in the seller’s account when the charge’s funds become available.
await stripe.transfers.create({ amount: 8000, currency: 'usd', destination: 'acct_seller', source_transaction: charge.id, });03
The balance is in another currency
Stripe reports the balance per currency. A payout in USD can fail when the funds are in EUR; check the currency in balance.available.
04
Refunds or disputes lowered the balance
“Stripe can’t complete this operation because the associated account doesn’t have enough available balance.” Stripe, Error codes (balance_insufficient)
Also check: refunds, dispute amounts and fees come out of the same balance. A large refund or dispute can leave too little for the next payout.
Checked against the vendor’s docs on : Stripe docs: Error codes; Stripe API: Retrieve balance; Stripe API: Create a transfer (source_transaction).
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- $950Stripe Billing Fix and SetupSubscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.See scope and start
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.See scope and start
“Working with Simon makes everything run so smoothly and better than I could ask for it. Amazingly communicative, extremely knowledgeable of coding and the backend processes. I strongly recommend.”
Related: Stripe payout failed · Stripe insufficient_funds (card) · Stripe Connect onboarding incomplete · Stripe card_not_supported