Refunding a payment reverses a successful payment and updates the order's payment status accordingly. You can refund both manual payments (recorded by you) and external payments (Stripe), and you can refund the full amount or any partial amount up to the original payment value.
When You Can Refund
A payment is refundable only if its status is Successful.
Payments in any other status (Processing, Initiated, Upcoming, Failed) can't be refunded — you should void them instead. See Voiding a Payment.
Important: Refunds are a separate flow from editing an order. Removing items from an order, deleting an order, or editing line items does not automatically refund the customer. B-Cart recalculates the order total, but no money moves until you explicitly issue a refund against the payment.
Refund Amounts — Full or Partial
You can refund either:
The full payment amount — leave the amount as-is when the refund modal opens.
A partial amount — type any value between 0 and the original payment amount. Useful when you've removed a couple of units from an order but the rest is still being supplied.
Step 1: Open the Order
Find the order containing the payment you want to refund and open the order details.
Step 2: Find the Payment and Open Actions
In the order's payments section, find the Successful payment you want to refund. Open the Actions menu and select Refund.
The modal title will say Refund via Stripe if the original payment was a Stripe payment, or Record refund if it was a manual payment.
Step 3: Enter the Refund Details
Refund amount — pre-filled with the original payment amount. Change it for a partial refund.
Reference — optional merchant reference. For Stripe refunds, this is set automatically by Stripe and can't be edited here.
Notes — optional notes about the refund.
Step 4: Confirm the Refund
Select Refund (or Record refund for manual payments).
What Happens After You Refund
For manual payments, B-Cart immediately records a refund row against the payment, marks the original payment as Refunded, and updates the order's payment status (e.g. from Paid back to Partially Paid or Unpaid). No money actually moves — you're recording an offline refund you've issued yourself (e.g. by bank transfer).
For Stripe payments, B-Cart asks Stripe to send the refund through immediately. The refund row appears in B-Cart as Processing while Stripe is working on it. Once Stripe confirms the refund has cleared (usually within a minute), the webhook flips the status to Refunded and the order's payment status updates. The money goes back to the original card via Stripe.
You'll see a toast confirming the outcome — either "Refund issued" (manual) or "Refund initiated — Stripe is processing this" (Stripe).
Things to Know
A payment can only be fully refunded once. If you've issued a partial refund, you can issue further partial refunds against the same payment up to the remaining balance.
If you've fully refunded a payment and the customer pays again later (e.g. by bank transfer), record a new manual payment against the order — don't try to "un-refund" the original.
If you're unsure whether to refund or void, the rule is: Successful = Refund. Anything else = Void.
When an Order Changes After a Refund
If you remove items from an order after the customer has paid, the order total drops but the payment amount stays the same. To bring the customer's account back into balance, issue a partial refund for the difference. B-Cart will not do this for you automatically.