Transfer Reversals & Refunds
FAQ-style answers for the most common questions about reversing Stripe transfers when an order is refunded. For the full feature reference, see Refund Handling.
Does Split Pay reverse transfers automatically when I refund an order?#
Yes — on Split Pay PRO. When you issue a refund through your store admin (WooCommerce or FluentCart, either from the order edit screen or programmatically), Split Pay hooks into the platform’s refund event — woocommerce_order_refunded on Stack A, FluentCart’s refund event on Stack B — calculates the refund ratio, and reverses each transfer associated with the order proportionally. No Stripe Dashboard interaction is needed for the common case.
On the free version, automatic reversal is not included — you reverse transfers manually via the Stripe Dashboard or API. See Manual reversal below.
How is the reversal amount calculated for a partial refund?#
Split Pay computes a single ratio — refund_amount / order_total — and applies it to every transfer recorded for the order.
Example — a $150 order with two transfers and a $37.50 partial refund (25%):
| Transfer | Original amount | Reversal amount |
|---|---|---|
Vendor A (acct_xxx) | $45.00 | $11.25 (25%) |
Vendor B (acct_yyy) | $30.00 | $7.50 (25%) |
For full refunds (100%) every transfer is reversed in full.
What happens if the vendor’s Stripe balance can’t cover the reversal?#
Stripe will reject the reversal with an insufficient-balance error. Split Pay handles this gracefully:
- The failure is logged as an order note with the exact Stripe error message.
- Other transfers on the same refund continue processing — one failure does not block the others.
- The summary order note reports the count of successful and failed reversals (e.g. “Split Pay Refund Summary: 1 transfer(s) reversed, 1 failed. Refund ratio: 25%”).
Once the vendor’s balance is restored (e.g. after the next batch of payments), retry the reversal manually via the Stripe Dashboard or use the Retry Failed Transfers order action where applicable.
What about orders placed before I installed Split Pay?#
Automatic reversal works only for orders that have entries in Split Pay’s transfer log. Pre-existing transfers (created before the plugin was active, or transferred outside the plugin) won’t be picked up by the refund hook and have to be reversed manually in the Stripe Dashboard.
Why does Stripe require reversals to be in the same currency as the original transfer?#
This is a Stripe platform rule, not a Split Pay limitation. A transfer reversal can only return funds to the platform in the currency of the original transfer — Stripe doesn’t convert at reversal time. If your platform charges in one currency and your connected account holds another, the reversal still happens in the original transfer currency. See Stripe’s Transfer Reversals API reference.
How do I reverse a transfer manually?#
Two paths, both supported by Stripe:
- Stripe Dashboard. Log in, go to Connect → Transfers, click the transfer, then click Reverse transfer. You can choose a full or partial amount. (Screenshots in Refund Handling — Manual reversals.)
- Stripe API. Use Transfer Reversals with
$stripe->transfers->createReversal($transferId, [...]). Pass anamountin cents for a partial reversal; omit it for a full reversal.
Should I tell the vendor before reversing a transfer?#
It’s a good practice. The reversal pulls funds out of their Stripe balance, and depending on their payout schedule that can be jarring if it shows up unannounced. The order note system makes it easy to audit what happened, but a heads-up to the vendor avoids surprises.