Skip to content

Refunding Incorrect Payment to Customer Balance

This procedure corrects a bank-transfer payment that Stripe automatically applied to the wrong invoice. The usual trigger is a wire or ACH that arrives with no invoice number in the memo and an amount that exactly matches an older open invoice, so automatic reconciliation pays that invoice instead of the one the customer intended. The fix is to unapply the payment from the wrong invoice, refund it into the customer’s cash balance, and apply it from the cash balance to the correct invoice. Automatic reconciliation is paused on the customer for the duration so Stripe does not re-apply the funds to the wrong invoice mid-procedure.

Use it when all of the following are true:

  • The payment arrived by bank transfer (ACH credit transfer, domestic wire, or international wire) and was reconciled from the customer cash balance.
  • Stripe applied it to an invoice the customer did not intend to pay, confirmed by remittance advice, the wire memo, or direct confirmation from the customer.
  • The correct target invoice (or invoices) belongs to the same Stripe Customer as the payment.
  • The invoice the payment landed on has collection method Send invoice (send_invoice). Stripe only allows unapplying payments from send_invoice invoices.

If the correct invoice belongs to a different Stripe Customer, stop: see Exceptions. Customer cash balances are scoped to a single Customer.

How auto-reconciliation picks the wrong invoice

Section titled “How auto-reconciliation picks the wrong invoice”

With automatic reconciliation on, Stripe applies incoming bank-transfer funds in this order (full rules in Customer Cash Balances & Wire Reconciliation):

  1. Reference match. The transfer memo carries an invoice number, and Stripe applies the funds to that invoice.
  2. Exact-amount match. With no usable reference, Stripe looks for a group of one to five open invoices (or incomplete PaymentIntents) that together equal the amount received, preferring the smallest group and then the oldest.
  3. Oldest-first fill. If no exact group exists, Stripe fully funds as many open invoices as it can, oldest due first.

Steps 2 and 3 are where a payment goes astray. A customer with several open invoices of the same amount, for example one invoice per campaign or per sub-account, who wires without the invoice number, will have the payment applied to the oldest matching invoice, which may not be the one they were paying.

Note, Two ways to move a misapplied payment Stripe offers two correction paths. Manage application → unapply and apply to another invoice moves the entire payment to one other invoice in a single step, and only works when the full payment amount is less than or equal to that invoice’s unpaid balance. Refund to cash balance (this SOP) returns the funds to the customer cash balance, from which any amount can be applied to one or more invoices. Use the cash balance path when the funds need to be split, the target invoice amount differs from the payment, or the target invoice is not ready yet.

Payment auto-applied to the wrong invoice, standard correction 1 · Pause auto-reconciliation on the customer Cash balance → Change reconciliation mode → Manual 2 · Unapply the payment from INV-1050 Payments → ⋯ → Manage application → Unapply. INV-1050 moves paid → open; payment is unapplied. 3 · Refund the payment to the cash balance Payment → Refund → Destination: Customer cash balance. Succeeds immediately; cash balance shows $5,000.00. 4 · Apply the cash balance to INV-1063 INV-1063 → Charge customer → Cash balance. INV-1063 moves to paid; cash balance returns to $0.00. 5 · Restore reconciliation and verify Reconciliation mode back to the account default. INV-1050 open, INV-1063 paid, cash balance $0.00; confirm the change reaches QuickBooks via Acodei. Customer: Example Advertiser · ledger view

Before INV-1050 (Campaign A) .. $5,000.00 paid INV-1063 (Campaign B) .. $5,000.00 open Cash balance … $0.00 Wire meant for INV-1063, no memo reference

Unapply pi_... from INV-1050 .. reopened Refund pi_... to cash balance . +$5,000.00 Apply cash balance to INV-1063 -$5,000.00 Note: misapplied wire, ref wire 9127

After INV-1050 (Campaign A) .. $5,000.00 open INV-1063 (Campaign B) .. $5,000.00 paid Cash balance … $0.00 Reconciliation mode … account default

Funds on the intended invoice; INV-1050 back in collection

Perform this in the Dashboard, in live mode. The example figures (two $5,000.00 invoices, INV-1050 and INV-1063) are illustrative; use the real invoices and amounts.

Step 1, Confirm the misapplication. Open the customer from Customers and the invoice the payment landed on. Under the invoice’s Payments section, confirm the payment is a bank transfer (customer balance) payment. Confirm, from the remittance advice, the wire memo, or the customer in writing, which invoice the funds were meant for. Record the payment ID (pi_...), both invoice numbers, and the amount. Check the payment’s created date: Stripe allows a refund only within 180 days of the payment.

Step 2, Check the collection method on the wrong invoice. On the invoice detail, confirm the collection method is Send invoice (send_invoice). If it is Charge automatically, Stripe will not unapply the payment; stop and see Exceptions.

Step 3, Switch the customer to manual reconciliation. On the customer page, in Payment methods, find Cash Balance, open the overflow menu (⋯), choose Change reconciliation mode, and set it to Manual. This override applies to this customer only. Without it, Stripe re-applies the refunded funds the moment they land in the cash balance, most likely straight back to the wrong invoice, which is now open again with a matching amount.

Step 4, Unapply the payment from the wrong invoice. On the wrong invoice, in the Payments section, open the payment’s overflow menu (⋯) and choose Manage application, then choose to unapply the payment and leave it unapplied. The invoice moves from paid back to open (the Dashboard may display it as Open or Past Due). Stripe does not notify the customer, but the hosted invoice page will show the invoice as unpaid again. Automatic collection is off on a reopened invoice, so no reminders go out unless someone turns it back on.

Step 5, Refund the payment to the customer cash balance. Open the payment (from the invoice’s Payments section or Transactions → Payments) and click Refund. In the dialog, set Destination to Customer cash balance, leave the amount at the full payment amount, and enter a reason that references the original wire and both invoice numbers (for example Misapplied wire ref 9127, moving from INV-1050 to INV-1063). A refund to the cash balance succeeds immediately and carries no Stripe fee. Confirm the customer’s Cash Balance now shows the amount as available.

Critical, Destination must be Customer cash balance The default refund destination sends money back to the customer’s bank account and emails them for bank details. That is a different, customer-facing action. Check the Destination field before clicking Refund. If a bank refund was started by mistake and the customer has not yet submitted bank details, cancel it from the payment page with Cancel refund.

Step 6, Apply the cash balance to the correct invoice. Open the correct invoice (INV-1063 in the example), click Charge customer, and select Cash Balance as the payment method. Confirm the amount. Stripe allows a partial or full application from the cash balance, so if the funds are meant to cover more than one invoice, repeat this step on each target invoice with the intended amount. Each fully funded invoice moves to paid.

Step 7, Restore automatic reconciliation. Return to the customer’s Cash Balance overflow menu, choose Change reconciliation mode, and set it back to the account default. Do this only after the cash balance is at the intended residual (normally $0.00); any funds still in the balance when auto-reconciliation resumes will be applied by Stripe’s matching rules.

Step 8, Verify, then confirm the downstream sync. Confirm on the Dashboard: the wrong invoice is open with no applied payment, the correct invoice is paid with the payment shown, and the customer cash balance is $0.00 (or the intended residual). Stripe emits invoice_payment.detached, refund, and payment events; Acodei posts the corresponding entries to QuickBooks. Stripe warns that integrations which assume a paid invoice cannot reopen may not handle this correctly, so check during the normal close that QuickBooks shows the wrong invoice as unpaid and the correct invoice as paid. If either is wrong in QuickBooks, raise it with Finance before the period closes. See Integration Overview for the sync path.

FieldValue
CustomerExample Advertiser, two open invoices for $5,000.00 each
Wire received$5,000.00, no invoice number in memo, ref wire 9127
Auto-reconciliation resultApplied to INV-1050 (Campaign A), the older matching invoice
Customer’s intentPayment for INV-1063 (Campaign B), per remittance advice
ActionManual reconciliation on → unapply from INV-1050 → refund $5,000.00 to cash balance → apply cash balance to INV-1063 → reconciliation mode back to default
ResultINV-1050 open $5,000.00 due; INV-1063 paid; cash balance $0.00

Critical, Pause reconciliation before refunding to the cash balance Stripe’s own guidance is to disable auto-reconciliation before refunding a payment to the cash balance. Skipping Step 3 lets Stripe re-apply the funds immediately using the same matching rules that misapplied them the first time.

  • The correct invoice belongs to a different Stripe Customer. A customer cash balance can only be applied to that Customer’s invoices and PaymentIntents. Stripe does not document any Dashboard or API path to move cash balance funds from one Customer to another. Do not improvise one (for example by issuing credit notes on one customer and invoicing the other). Escalate to Finance; the practical options are to return the funds to the payer and have them re-send against the correct customer’s invoice, or to consolidate the billing relationship onto one Customer going forward.
  • The wrong invoice is Charge automatically. Stripe only allows unapplying payments from send_invoice invoices. Bank-transfer invoices are normally Send invoice, so this should be rare. If it occurs, do not void or credit the invoice to work around it; escalate to Finance.
  • The payment is older than 180 days. Stripe does not allow a refund after 180 days, so the cash-balance path is unavailable. If the entire payment should move to one other invoice, use Manage application → unapply and apply to another invoice instead; otherwise escalate.
  • International (SWIFT) wires. Stripe states it does not support refunds for international SWIFT payments. That statement is written about returning money to the customer’s bank, and the documentation does not say whether a refund to the cash balance is offered for a SWIFT-funded payment. If the Refund dialog does not offer Customer cash balance as a destination, stop and use Manage application to move the whole payment, or contact Stripe support. Do not refund to the bank account.
  • Do not leave funds sitting in the cash balance. Unreconciled cash balance funds are flagged by Stripe; after 75 days Stripe attempts to return them to the customer’s bank, and after 90 days it may sweep them to the Adventive balance. Complete Step 6 in the same session as Step 5.
  • The reopened invoice is a real receivable. Do not void it or credit-note it to make it disappear; it is genuinely unpaid. Make sure the customer knows it is still outstanding, since Stripe does not notify them and automatic collection is off on a reopened invoice.
  • Always work in live mode. Confirm the test-mode toggle is off before unapplying or refunding anything.