Returns, credits, and refunds
Returning a sale in SKU.io isn't one action — it's a pipeline of up to three separate records, each doing a different job. Understanding which record moves stock and which one moves money is the key to reading a return correctly, and to knowing why you can issue a refund without ever getting the goods back (or take goods back without refunding a cent).
Words like RMA, sales credit, disposition, FIFO layer, and COGS are defined the first time they appear below.
The three records in a return
A return separates authorization, physical intake, and money into three linked records so each can happen (or not happen) on its own schedule.
| Record | What it does | Touches inventory? | Touches money? |
|---|---|---|---|
| RMA (Return Merchandise Authorization) | Authorizes which order lines and quantities are allowed to come back, and names the warehouse they should return to. | No | No |
| Return receipt | Records what physically arrived and restocks it according to a disposition (add to stock, blemished SKU, or discard). | Yes — restocks | Posts an inventory/COGS reversal only |
| Sales credit (credit note) | Puts money back — as a refund payment or store credit — and reverses the sale's revenue and tax. | No | Yes — refunds |
The RMA is the parent. Return receipts hang off the RMA (ReturnReceipt → Rma), and a sales credit can link to the same RMA so the money and the goods are tied together. But those links are optional: you can raise a sales credit with no RMA at all, and you can receive goods against an RMA without ever crediting them.
Solid arrows are the physical-goods path; dashed arrows are the money-back path. The two paths are independent — a return can travel either, both, or (for a discard) only the goods path.
Step 1 — The RMA authorizes the return
An RMA is a permission slip. Creating one from an order's RMAs tab (or as a bulk action across many orders) records which order lines may come back, the quantity expected on each, and a return-to warehouse. It doesn't move stock or money — its only job is to open an authorized return and give the customer something to ship against.
An RMA carries its own status, driven entirely by what's been received against it:
| RMA status | What it means |
|---|---|
| Draft | Created but not yet approved. |
| Approved | Authorized; the customer can return the goods. |
| In Transit | The customer has shipped the return (tracking recorded). |
| Partially Received | Some, but not all, of the expected quantity has arrived across one or more receipts. |
| Received | Every expected unit has been received. |
| Closed | Manually finished. |
| Canceled | Abandoned before any goods arrived. |
The RMAs tab is disabled until the order has at least one fulfillment — you can't authorize a return for something that never shipped. The tab's tooltip says as much: "RMAs can only be created after the order has at least one fulfillment."
An RMA is cancellable only from Draft, Approved, or In Transit. The moment any goods are physically received, its status moves to Partially Received or Received and cancellation is refused — the return has become a real event with inventory attached. This is why an abandoned return can be kept as a Canceled record instead of being deleted.
Step 2 — The return receipt restocks the goods
A return receipt is the physical intake. When goods arrive against an RMA, you record a receipt for what actually came back, and each receipt line carries a disposition that decides what happens to those units:
| Disposition | Inventory effect |
|---|---|
| Added to Stock | Restocked as normal, sellable, owned inventory. |
| New Blemished SKU | Restocked under a separate blemished/secondary SKU (a different product) so damaged goods don't mix with A-grade stock. |
| Discarded | Written off — no inventory is created. The unit came back but is unsellable. |
Only Added to Stock and New Blemished SKU create inventory; a Discarded line records that the goods returned but adds nothing to on-hand. A condition grade (Grade A, B, C, or Unsellable) captured at receipt time helps you pick the right disposition, and Return Disposition Policies (in Settings) can pre-select a default disposition by product, category, reason, warehouse, or grade so receiving stays consistent.
Restocked units re-enter at their original cost
When a line is restocked, SKU.io writes a positive inventory movement (type Return) and creates a new FIFO layer for the returned units. That layer is valued at the original sale's cost basis, not today's cost — the per-unit COGS is pulled from the original order line's financials first, then from a linked sales credit line, and only falls back to the product's best-available cost (its stored weighted-average / FIFO cost) if neither is available. Reversing the sale's COGS at the price it was actually booked keeps your margin reporting honest.
Because the receipt owns the restock, deleting a return receipt reverses the inventory it created — the FIFO layer and movements are removed and on-hand counts drop back. Deleting the parent RMA cascades: it deletes its receipts (reversing their inventory) and then the RMA itself.
The return-to warehouse can differ from where it shipped
Stock lands in the receipt's warehouse, which is the RMA's return-to warehouse — and that doesn't have to be the warehouse the order shipped from. Routing returns to a dedicated returns or quarantine warehouse is a common and fully supported pattern: the goods re-enter stock there, isolated from your main sellable pool, until they're inspected and re-graded.
Step 3 — The sales credit puts money back
A sales credit (credit note) is the money side. From the order's Credits tab, Create Credit selects the lines and amounts to credit and issues the value back to the customer as a refund payment or as store credit. Crucially, a sales credit:
- Posts its own accounting transaction — a credit note that reverses the sale's revenue and tax, separate from the sales order's original transaction.
- Can optionally link to an RMA (and, through it, to the physical return) so the money and the goods are reconciled together.
- Caps each line at its remaining creditable amount — you can't credit more of a line than remains after earlier credits (the dialog shows each line's remaining amount and rejects an over-credit).
A sales credit doesn't restock anything. Issuing a credit and receiving goods back are two independent acts.
Exchanging an order spins up a linked exchange order and auto-creates and approves a sales credit for the returned value to fund it. See Resend and exchange an order.
For a Shopify order, a sales credit can't be created by hand in SKU.io — credits for those orders must originate from a Shopify refund and sync in. This keeps the channel as the system of record for its own refunds. See How channel orders sync.
Which step does what — and the two accounting entries
The single most important thing to internalize: restock and refund are separate. Each is driven by a different record, and each posts its own accounting entry.
| Effect | Driven by | Accounting entry |
|---|---|---|
| Goods come back into stock | Return receipt (disposition) | Inventory/COGS reversal (the returned cost goes back on the books) |
| Customer gets money back | Sales credit | Credit-note transaction (reverses revenue and tax) |
Because these are decoupled, all of the following are valid returns:
- Credit with no physical return. The customer keeps the item and you refund them — a sales credit alone, no RMA, no receipt. Money moves; stock doesn't.
- Goods back but no refund. You receive and restock a return (or discard it) without issuing a credit — for example when the goods are swapped rather than refunded. Stock moves; money doesn't.
- The full return. RMA → receipt (restock) → credit (refund), all three linked, with both accounting entries posted.
Returns and credits after fulfillment
Everything above assumes the order already shipped — which is the normal case, since an RMA requires a fulfillment. After fulfillment, the two money-and-goods paths interact with the inventory you already consumed:
- The sale already realized COGS. Fulfilling the shipment consumed FIFO layers and booked COGS (see How fulfilling moves inventory and realizes COGS). A return receipt doesn't un-consume those original layers — it creates a new layer for the returned units at the original cost, which is how the reversal lands cleanly on the books.
- Voiding the shipment is a different reversal. If you're undoing a shipment that never should have gone out (rather than accepting goods a customer physically returned), void the shipment instead. Voiding reverses the original fulfillment's movements and restores the exact FIFO layers it consumed. A sales credit, by contrast, never restocks. Choose the return-receipt path when the customer sends goods back, and the void path when you're correcting a shipment. See Void, restore, or reset a shipment.
One RMA can be received across multiple return receipts — the RMA sits at Partially Received and each receipt restocks the units it recorded, until the received quantity meets the expected quantity and the RMA flips to Received. Deleting any one receipt reverses only its own inventory and re-derives the RMA's status from what's left.
When the return-to warehouse is an Amazon FBA location, the RMA is an FBA Return: there's no local physical receipt to record because the units go back into Amazon's inventory. The RMAs tab labels these accordingly — you'll see an FBA Return badge and wording like "12 returned to Amazon" rather than a receive action. See Amazon FBA, MCF, and externally fulfilled orders.
Next steps
- Process returns: RMAs and credits — the hands-on steps for creating RMAs and issuing credits
- Record payments and apply store credit — how refunds and store-credit wallets work
- Void, restore, or reset a shipment — the shipment-reversal path
- How fulfilling moves inventory and realizes COGS
- How order financials flow to accounting
- Sales order status reference
- Sales orders overview