Skip to main content

Move stock between bins (location transfers)

A location transfer moves stock from one bin to another inside the same warehouse. Unlike a warehouse transfer, it has no ship-and-receive lifecycle and no in-transit state — it's created and completed in a single transaction, so the stock lands in its new bin immediately. It never changes the warehouse's on-hand total, available, allocated, or FIFO layers; it only rebalances where the stock sits within the warehouse.

You perform location transfers through the Put Away and Replenishment screens, not a dedicated transfers page. This guide covers running a transfer, reviewing the history, and how the negative-bin guard decides whether an over-draw is blocked, warned, or allowed.

A few terms used on this page
  • Bin / location — a physical storage slot within a warehouse (also called a warehouse location). Every warehouse with bins enabled has an UNASSIGNED catch-all bin that holds stock not yet put away.
  • Location transfer — an intra-warehouse bin-to-bin move, numbered LT-######. It emits paired reclassification movements (a debit at the source bin, a matching credit at the destination) and nothing else.
  • Reclassification — a movement type that shifts stock between bins without changing quantity, cost, or stock state. Reclassifications carry no cost, so they never touch FIFO layers.

Before you begin

RequirementWhy it's needed
Global Warehouse Locations (Bins) setting onLocation transfers only exist where bins are enabled. With the feature off, Put Away and Replenishment show "Warehouse locations are not enabled."
Bins enabled on the specific warehouseThe warehouse's own Warehouse Locations toggle must also be on. A transfer against a warehouse without bins is rejected with "Warehouse locations are not enabled for warehouse …".
Transfer inventory permission (inventory.transfer)Required to submit a transfer. Without it you can view history but the Put Away action fails.
A direct (own) warehousePut away applies to your own warehouses, not fulfillment-partner or channel-managed warehouses.
At least two bins with stock to moveThe source and destination bins must be different and both belong to the same warehouse.

Location transfer vs. warehouse transfer

These two features share the word "transfer" but are different operations. Reach for the right one:

Location transferWarehouse transfer
Moves stockBetween two bins of the same warehouseBetween two warehouses
LifecycleNone — created and completed at onceDraft → Shipped → Received → Closed
In-transit stateNoYes — stock is in transit between ship and receive
Affects on-hand totalNo — only bin balances shiftYes — leaves one warehouse, arrives at the other
Affects FIFO / COGSNo — reclassification carries no costYes — cost travels with the stock
Where you do itPut Away and Replenishment screensInventory → Transfers
Document numberLT-######WT-######
ReasonsPut Away, Relocation, Replenishmentn/a

Because a location transfer leaves the warehouse's total untouched, it never appears as incoming or in transit on the product stock view — the units were already on hand and stay on hand. See Stock states for how these balances relate.

Run a location transfer (put away)

Put Away clears newly received stock out of the UNASSIGNED bin into its permanent home. Each row you confirm becomes one line of a single location transfer.

  1. Go to Inventory → Put Away.
  2. On the Queue tab, select a warehouse. The queue lists product + source-bin rows waiting to be put away.
  3. Select the rows you want to move, then click Put Away to open the drawer.
  4. For each row, set the destination bin and the quantity. SKU.io pre-fills a suggested destination and the full available quantity; adjust either as needed.
  5. To split one source into two destinations, use the split control and set a quantity for each — the two lines draw from the same source bin and are validated together.
  6. Optionally tick remember on a storage destination to save it as that product's preferred bin for next time.
  7. Add optional notes, then click Put Away to commit.

What you'll see: the drawer closes and a confirmation reads "Location transfer LT-000123 completed." The stock now shows against its new bins, and the transfer appears on the History tab. Behind that one click, SKU.io — in a single transaction — writes the transfer header, one line per row, and the paired reclassification movements for each line.

Scan Mode for hands-on put-away

The Scan Mode button (top of Put Away) opens a barcode-driven flow for the same operation: scan a product, scan a destination bin, and confirm. It submits the identical location transfer under the hood.

Replenishment transfers

Inventory → Replenishment runs the same kind of move for a different purpose: topping up a pick face from bulk/overflow storage so pickers don't run dry. Enable bins to use it ("Enable the global Warehouse Locations (Bins) feature to run pick-face replenishment."). A replenishment is still a location transfer — same atomic execution, same reclassification movements — recorded under the Replenishment reason.

Transfer reasons

Every location transfer is tagged with a reason so the history explains why stock moved:

ReasonWhen it's used
Put AwayMoving received stock out of UNASSIGNED into storage (the Put Away queue and Scan Mode).
RelocationAn ad-hoc move between two storage bins.
ReplenishmentTopping up a pick face from bulk storage (the Replenishment queue).

What SKU.io validates

A transfer is rejected as a whole (nothing is written) when any line fails these checks. All error messages are returned as 422 responses shown inline in the drawer.

RuleMessage when it fails
Warehouse has bins enabled"Warehouse locations are not enabled for warehouse …"
At least one line"At least one transfer line is required."
Quantity greater than zero"Line N: quantity must be greater than zero."
Source and destination differ"Line N: the from and to locations must be different."
Both bins belong to the warehouse"Line N: the from/to location does not belong to warehouse …"
Destination not deprecated"Line N: location CODE is deprecated and cannot receive stock."
Product is transferable"Bundle and matrix products cannot be transferred between locations."
Bundles and matrix parents can't be moved bin-to-bin

A bundle or matrix (variant-parent) product has no physical stock of its own — only its components or variants do. Attempting to transfer one is rejected, so move the underlying component or variant SKUs instead.

The negative-bin guard

When a line would draw a source bin below zero, the warehouse's negative-bin policy decides what happens. The policy is set per warehouse (in its bin settings) and applies to every per-bin debit — picks, dispatches, adjustments, and location transfers alike. Lines that draw from the same product + source bin are summed first, so the check is against the combined draw, not each line alone.

PolicyBehavior on an over-draw
BlockThe transfer throws "Insufficient stock for product SKU at location CODE: requested X, available Y." and the whole transaction rolls back — nothing moves.
WarnThe transfer proceeds, and a warning is logged (product, bin, requested vs. available). This is the default when a warehouse has no explicit policy set.
AllowThe over-draw is permitted silently.
The UNASSIGNED bin always absorbs

The warehouse's UNASSIGNED catch-all (its default bin) is exempt under every policy — it can always go negative as a source. This is deliberate: per-bin bookkeeping can never block a move that the warehouse's global on-hand fully supports. The guard row-locks each source bin's balance in a deterministic order, so concurrent transfers validate safely without deadlocking.

To move stock you don't have a bin record for, either set the policy to Warn/Allow, draw from UNASSIGNED, or correct the bin balance first with an adjustment or stock take.

View location transfer history

Every completed transfer is recorded and searchable.

  1. Go to Inventory → Put Away.
  2. Open the History tab.

The list shows the most recently completed transfers first (sorted by Completed At, newest first), 10 per page. Each row carries:

ColumnShows
NumberThe LT-###### document number. Click it to open the detail dialog.
WarehouseThe warehouse the move happened in (links to the warehouse).
ReasonPut Away, Relocation, or Replenishment.
LinesThe number of lines on the transfer.
Performed ByThe user who ran it.
Completed AtWhen it completed.

Click a row or its Number to open the detail dialog, which lists every line — product, source bin, destination bin, and quantity.

Narrow the history with the search bar, quick filters, and advanced filters:

FilterMatches
SearchNumber, notes, warehouse name, or performed-by name.
Warehouse (quick filter)A single warehouse.
Reason (quick filter)Put Away, Relocation, or Replenishment.
ProductTransfers with a line for a given product.
Performed ByTransfers run by a given user.
Date rangeCompleted on or after / on or before a date.
Advanced filtersOperator-aware conditions on number, notes, id, completed at, and created at.
tip

Because reclassification movements are written per line, you can also trace a single product's bin history in the movement ledger — filter by the Reclassification movement type to see every bin-to-bin move for that product.

Next steps

Last verified: