Vendor Returns
Track goods sent back to a supplier — from the initial RMA draft through submission, shipment, and completion — with a full line-item breakdown and automatic inventory deduction.
A vendor return (also called an RMA — Return Merchandise Authorization) is the formal record of goods you are sending back to a supplier. Whether the items arrived defective, were the wrong product, exceeded what you ordered, or were damaged in transit, a vendor return captures which items are going back, what they cost, and where the process stands — all the way from drafting the return through shipping it out and receiving credit.
Vendor returns complement vendor invoices: where an invoice records what you owe the supplier, a return records what the supplier owes back to you.
Creating a vendor return #
New returns are created from Purchasing → Vendor Returns → New Vendor Return. The header form is brief — the detail lives in the line items you add next.
- Vendor — the supplier you are returning to. Required. Selecting a vendor links the return to that vendor's record in your vendor directory.
- RMA Number — auto-generated in the format
RMA-0001if you leave it blank, or type your own if the vendor has assigned one. You can always update it later once the supplier responds. - Reason — the primary reason for the return: Defective, Wrong Item, Excess Inventory, Damaged in Transit, or Other. Optional but useful for reporting.
- Notes — free-text field for any instructions, vendor contact details, or special handling requirements.
- Status — set automatically on creation to Draft; promoted manually as the return progresses (see Lifecycle below). The status field is hidden on the creation form — it only appears once the record exists.
- Total Amount — calculated automatically from the line items; displayed as a read-only field in dollars on the detail page.
Line items (items to return) #
Once the header is saved, use the Items to Return tab to add the individual Products going back. Each line captures:
- Unit — the specific tracked unit being returned, looked up by name or barcode (
I-xxxxxxxx). Selecting a unit auto-fills the Product and Unit Cost from the unit record. - Product — the catalog Product for this line; auto-populated when you choose a unit, or set independently for returns not tied to a specific tracked unit.
- Original PO Line — optionally link the line back to the purchase order line it was received on, for traceability.
- Quantity — how many units (or what amount) are being returned. Supports decimals for partial returns of measured goods.
- Unit Cost — the per-unit cost in dollars for this return line. Over the API,
unit_costis sent and returned in cents (e.g.2500= $25.00). Adding or editing a line immediately recalculates the header Total Amount. - Notes — per-line remarks.
The table shows each line's Product name, the From Bin where the unit currently lives, quantity, unit cost, and notes. Lines can be edited or deleted at any time before the return is shipped; each change recalculates the running total.
Lifecycle: Draft to Completed #
Every vendor return moves through a predictable sequence of statuses shown as a color-coded badge:
- Draft (gray) — the return is being assembled; no inventory movements have been recorded yet. You can add, edit, or remove lines freely.
- Submitted (blue) — the return has been communicated to the vendor and is awaiting their approval or shipping instructions. The Mark as Shipped action becomes available.
- Shipped (amber) — the return has left your warehouse. Triggering Mark as Shipped (from the view page header) records a Return Out inventory movement for each line item that has a linked unit, physically removing the goods from their bin in the system.
- Completed (green) — the supplier has acknowledged receipt and any credit or refund has been arranged.
- Cancelled (red) — the return was abandoned before shipment. Cancelled returns do not generate inventory movements.
Mark as Shipped is the only status transition that writes inventory movements. It is only available when the return is in Submitted status. Confirm the action in the modal — it cannot be undone without a manual adjustment.
Inventory impact #
When a return is marked as shipped, Knowledge ERP records a Return Out movement against every line item that points to a specific unit. The movement captures the Product, quantity, source location, and source bin, with the RMA number noted in the movement notes. You can review these in the unit's movement history on Inventory → Units.
Returns that reference only a Product (without a specific unit) do not trigger automatic movements; you will need to post a manual adjustment if you need the quantity change reflected in stock.
The return list and filters #
The return list (Purchasing → Vendor Returns) shows each return's RMA number, vendor, status, reason, total, and creation date, sorted newest first. Filter by Status to focus on returns that need action — for example, all Submitted returns awaiting shipment. Soft-deleted returns are hidden by default; use the Trashed filter to include them.
What lives on the return page #
Open a return to find its header details plus tabs for everything attached:
- Items to Return — the line items, editable until the return ships.
- Attachments — packing slips, vendor correspondence, photos of damage.
- Change History — a full audit trail of every edit, showing who changed what and when.
Printing #
The view page includes a Print action that opens a formatted PDF of the return — useful for including in the physical shipment or emailing to the vendor.
How vendor returns relate to other modules #
- Vendors — the parent vendor record stores contact details and purchase history. See Vendors & Contacts.
- Purchase Orders — each return line can reference the original PO line it was received on, keeping the inbound and outbound paper trail linked. See Purchase Orders.
- Vendor Invoices — once a return is completed, any vendor credit should be reconciled against open vendor invoices. See Vendor Invoices & Payments.
- Units — shipment creates Return Out movements on the specific units sent back. See Units.
Doing it from the API #
# List returns, filtered by vendor and status
curl "https://your-domain.com/api/v1/vendor-returns?vendor_id=<id>&status=submitted" \
-H "Authorization: Bearer $TOKEN"
# Create a new vendor return
curl -X POST "https://your-domain.com/api/v1/vendor-returns" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"vendor_id": "<vendor-id>",
"reason": "defective",
"notes": "Batch arrived with cracked housings — RMA requested per email 2026-06-01"
}'
# Add a line item (unit_cost in cents: 4500 = $45.00)
curl -X POST "https://your-domain.com/api/v1/vendor-return-items" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"vendor_return_id": "<return-id>",
"product_id": "<product-id>",
"quantity": 3,
"unit_cost": 4500
}'
# Advance status to submitted
curl -X PUT "https://your-domain.com/api/v1/vendor-returns/<return-id>" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"status": "submitted"}'
Money fields (
unit_cost,total_amount) are integers in cents over the API (4500= $45.00). The UI always displays dollars.