Inventory transfers between warehouses
Move stock from warehouse A to warehouse B without overcounting or losing visibility while it's in transit.
Last updated 2026-05-10
If you operate from more than one location, stock occasionally needs to move between them. Don't track this in a spreadsheet.
Inventory → Transfers
Click New transfer. Pick origin warehouse, destination warehouse, and the SKUs + quantities. Save as a draft until physically packed, then mark Sent.
While Sent: stock is decremented from the origin AND added to "in transit" at the destination. The destination cannot fulfil orders from in-transit stock. Only physically present stock.
When the destination receives, mark Received and confirm quantities. Discrepancies (lost, broken, miscounted) get logged with a reason code so you can trace them.
Why this matters
Without proper transfers, two things go wrong:
- Origin oversells. You sold the unit assuming it was in warehouse A, but you'd already loaded it onto a truck to warehouse B. Customer waits, you scramble
- Destination understocks. You don't realise the inbound shipment for two days and reorder more, doubling holding cost
The transfer record fixes both. The unit is decremented from A immediately, but not committable for fulfilment until physically at B.
Bulk transfers
For seasonal restocks (e.g. moving 200 SKUs from a central warehouse to a pop-up location), use Inventory → Transfers → Bulk import. Upload a CSV with sku, qty, origin, destination columns. We process in one transaction so partial failures don't leave orphaned transfers.
Discrepancies
When received quantities don't match sent quantities, you get a Variance row. Mark it as one of:
- Lost in transit. Write off, expense to shipping
- Damaged. Write off, expense to shrinkage
- Miscounted at origin. Adjusts the historical sent quantity (rare)
- Miscounted at destination. Adjusts the received quantity
Each reason code has its own ledger entry visible in Reports → Inventory → Variance. Reviewing this monthly is how you catch supplier short-shipments and warehouse pilferage.
Linking to fulfilment
Orders waiting on stock at the destination warehouse can be tagged "awaiting transfer". The customer sees a generic "preparing your order" status, you see the actual reason in the order detail. The fulfilment tag clears the moment the transfer is received.
API
POST /v1/inventory/transfers and PATCH /v1/inventory/transfers/:id/receive let you wire transfers to a 3PL or WMS without manual entry. Webhook events: inventory.transfer.created, .sent, .received, .variance_reported.