WooCommerce · 29 September 2026

Why WooCommerce says "Invalid refund amount"

You are holding the customer's money and your own shop will not let you give it back. There is a reason. It is a simple sum, and you can watch it happen on a test order.

Short answer: WooCommerce will not let you refund more than the order total minus what you have already sent back. Ask for more than that and you get Invalid refund amount.

Most of the time it happens because someone lowered the order total before refunding. That spends the same money twice.

The rule is one line in WooCommerce. get_remaining_refund_amount() is get_total() minus get_total_refunded(). When you make a refund, wc_create_refund() checks your number against that and stops if it is too big. It does not look at what the card was charged. It does not look at what you are still holding.

The order that gets stuck

Every step here looks fine on the day you do it.

  1. A customer pays 100. Nothing is refunded yet, so you can refund up to 100.
  2. On Tuesday she asks you to take a 40 candle off the order. You open the order, drop the total to 60, and refund her 40. It works, because 40 is less than the new total of 60. Five minutes. She says thank you.
  3. The order now says total 60, refunded 40. So there is only 20 left that you are allowed to refund.
  4. On Thursday she asks to cancel the rest. You owe her 60. The shop lets you send 20 and refuses the rest.

Why Tuesday worked and Thursday did not

Tuesday only worked because the candle was small.

Try the same trick with a bigger item and it fails on day one. Say she wants 51 off the 100 order. You drop the total to 49, then try to refund 51. That is refused straight away, because 51 is more than 49.

So it only ever works while the thing you take off is less than half the order. That is the giveaway that this is a rule and not a bug. It breaks either way round. All that changes is which day you find out.

How to unstick the order

The limit is worked out fresh every time you look. So when the total goes up, the limit goes up with it.

  1. Open the order. Put the total back to what the card was really charged. In the example, that is 100.
  2. You can now refund 100 minus the 40 you already sent, so 60.
  3. Refund the 60 the normal way. Tick the line items instead of typing a number, so stock and reports move too.

Try it yourself in ten minutes

Do not take my word for it. On a test site, place an order for 100 and pay it with a method that can refund. Then follow the four steps above. You will watch the amount you are allowed to refund drop to 20, while the order still holds 60 of your money.

The habit that stops this happening

The total on a paid order is a record of what you charged. It is not a setting.

Change it and the order stops matching the card, the reports and the customer. The refund limit is just the first place you notice.

So leave the total alone. Write down what really happened instead.

What the customer wantsWhat to record
Take an item offA refund with the line items ticked, not a lower total. Stock goes back, reports stay right, and the total still says what you charged.
A different size or colourPoint the line at the new option. The discount and the tax stay on it, and the total does not move.
Add somethingA second order with its own payment, so stock moves when it is paid, not when it is promised.

The right hand column is more work on the day. It is also the one that still works on Thursday.

Check it yourself

  • WC_Order::get_remaining_refund_amount() in includes/class-wc-order.php. The limit, in one line.
  • wc_create_refund() in includes/wc-order-functions.php. The check, and the error it throws.
  • The message turns up with and without a full stop, depending on whether you hit it in the admin screen or in code. That is why a search finds both.

We make Amendio, a free WooCommerce plugin that lets customers make these changes themselves. It never edits the total on a paid order, for the reason above. But this rule is WooCommerce's, not ours. It is worth knowing either way.

More writing · What Amend does