Returns and exchanges
Return items at the register or through the API, and refund them your way.
A return in Smooth POS is a sale with negative quantities. It's linked to the original sale line, so you always know what came back and from which sale. An exchange is simply a return and a new item on the same sale.
At the register
- Go to Register → Sale and log in, as in How to process a sale.
- Select Return Items in the top row and scan or search for the original receipt.
- Choose the items coming back.
- Go to payment and pay the refund out with the payment method you want, such as store credit.
For an exchange, return the original item and sell the replacement, then settle the difference.
Return reasons
Set up the reasons staff can choose from under Sales → Return Reasons. Through the API, use Create a return reason and List return reasons.
Returns without a receipt
Whether a staff member can return items without linking them to an original sale is set per staff member. Use Allow unlinked returns to turn it on and Deny unlinked returns to turn it off. Both change data even though they're GET requests.
Refund options
| Refund to | How |
|---|---|
| Any payment method | A negative payment with that method. |
| Store credit | A negative payment with your store credit method. The customer has to be on the sale, and the amount is added to their credit balance. See Gift cards and store credit. |
| A gift card | A negative gift card payment with the card's serial puts the value back on the card. |
Returns through the API
To bring in a return from another system, Create a sale whose lines have a negative quantity and point at the original line with linked_sale_line_id:
{
"store_id": 2,
"customer_id": 2099268,
"lines": [
{
"item_id": 5521,
"quantity": -1,
"item_price": 49.5,
"linked_sale_line_id": 99120,
"item_return_reason": "Wrong size",
"item_return_mark_as_faulty": false
}
],
"payments": [
{"payment_method_id": 7, "amount": -49.5}
]
}- Get the original line IDs from Get a sale.
- Each original line keeps a running
returned_quantity. Check it before you send a return, so you never return more than was sold. item_return_reasonis the reason text. Send""on normal lines.item_return_mark_as_faultyflags items that came back faulty.- The return fires
sale_createlike any other sale, and stock is updated for you. Don't adjust stock yourself as well, or it'll be counted twice.
Online orders
If the original sale had a fulfillment, also record the return against it with Return a fulfillment, using the return sale's ID and line IDs. See Online orders and fulfilment.
Example: Alert the buyer about faulty returns
Trigger: System Hook, sale_create.
-
Script: Find faulty returns
var sale = JSON.parse($.default); $.sale = sale; $.sale_id = sale.id; var faulty = sale.lines.filter(function (l) { return l.quantity < 0 && l.item_return_mark_as_faulty === true; }); $.has_faulty = faulty.length > 0; $.faulty_list = faulty.map(function (l) { return "<li>" + l.barcode + " x " + Math.abs(l.quantity) + ": " + l.item_return_reason + "</li>"; }).join(""); -
If Condition: If anything came back faulty, Condition
$.has_faulty === true. -
Email: Tell the buyers, nested under THEN: To your buying team, Template Custom, Subject
Faulty returns on receipt {{ sale.receipt_number }}, Body<ul>{{ faulty_list }}</ul>.
Updated about 22 hours ago
