Refunds and returns
Refunding a whole sale, and using an exchange when only some items come back.
The refund endpoint refunds a sale in full: the sale is marked refunded and every line goes back into stock. There is no partial-refund endpoint, which is why the refund screen shows the sale's lines read-only instead of letting you tick individual items. To take back only some of what was sold, use an exchange instead — see below.
Refunding a sale
- Open Refund from the POS and search the sale for this store.
- Check the lines shown against what the customer has brought back.
- Pick a reason — the refund cannot be submitted without one.
- Submit. The sale is marked refunded and stock is restored.
The available reasons are: defective product, wrong item, change of mind, duplicate purchase, price match, and other.
What is recorded
A refund row is written with the original sale, the staff member, the amount and the reason. A sale that has already been refunded cannot be refunded twice — the second attempt is rejected.
Card refunds
If the sale was taken through Stripe or Square, the refund is also sent to that provider. A failure on their side does not undo the local refund: the sale is still marked refunded and the stock still comes back, and you are told plainly that the card refund failed and must be done on the terminal by hand.
Partial returns: use an exchange
An exchange brings the returned lines into a new sale as negative lines priced from the original sale line. The stock goes back, and anything the customer takes instead is added to the same sale, so they pay or are paid the difference in one transaction.
Permissions
Refunding requires the pos.refund permission, which supervisors and admins have by default and plain staff do not.