Skip to main content

Transfer statuses, fields & list

A warehouse transfer moves stock from one warehouse to another and tracks it from creation to receipt. Every transfer carries three independent status axes — transfer, shipment, and receipt — plus a header, a set of lines, and, once it ships, one or more shipment and receipt records beneath it. This page is the lookup for all of those: the status enums and what moves them, the transfers list and its filters, the detail-page tabs, each field group, the computed metrics, the sticky-bar action buttons, and export.

For how transfers work as a model — the draft → open → closed lifecycle and how stock and cost flow — see How warehouse transfers work. For the day-to-day tasks, see Create a transfer, Ship a transfer, Receive a transfer, and Close and cost a transfer.

Before you begin

  • To view the list and a transfer's detail you need read access to inventory. The action buttons are gated by permission: warehouse_transfers.update (open, revert to draft, edit), warehouse_transfers.ship (ship, mark as shipped), warehouse_transfers.receive (receive), and warehouse_transfers.export (export).
  • Transfers move real stock, so the source warehouse must hold enough on-hand to cover the lines you ship. See Stock states.

The three status axes move independently

A transfer stores three separate status fields, each answering a different question. A real transfer reads as a combination of all three at once — for example Open / Partially Shipped / Unreceived.

AxisFieldAnswers
Transfer statustransfer_statusWhere the transfer sits in its lifecycle: draft, open, or closed.
Shipment statusshipment_statusHow much has left the source warehouse: unshipped, partially shipped, or shipped.
Receipt statusreceipt_statusHow much has arrived at the destination: unreceived, partially received, or received.

The shipment and receipt axes are derived from quantities as you ship and receive — you never set them by hand. The transfer axis is the one you drive with the action buttons, though a full receipt closes it automatically.

Transfer status

transfer_status is the primary lifecycle. A new transfer starts Draft.

ValueMeaningHow it's reached
DraftCreated but not committed. Editable; holds no allocations and moves no stock.The starting state of every new transfer.
OpenCommitted and active. Stock is allocated at the source and the transfer can be shipped and received.Open the transfer (see Status buttons). A partial receipt also settles the transfer here.
ClosedFinalized. No further shipping or receiving is expected.Reached by a full receipt (automatic), by closing a draft that will never be processed, or — for Amazon transfers — when the channel reports the inbound complete.

How transfer status changes:

TransitionWhat triggers itWhat happens
Draft → OpenOpening the transferCommits allocations against source-warehouse stock. Requires at least one line item.
Open → DraftReverting to draftUnwinds the transfer: deletes any shipment, cancels the line allocations, and resets all three axes to draft / unshipped / unreceived, clearing fully_shipped_at and fully_received_at. Available only while nothing has been received.
Open → ClosedFull receipt, or closing a draftA full receipt stamps fully_received_at, closes the transfer, and cancels any stale allocations left on its lines. Closing a draft closes it without ever shipping (a transfer that was never processed).
A closed transfer is never re-opened by a shipment

Once a transfer is Closed, recording another shipment doesn't re-open it — the shipment-status logic checks for a closed transfer first and leaves it closed. Revert to draft if you genuinely need to rework it and nothing has been received yet.

Amazon transfers derive their status from the channel

For an FBA inbound, AWD inbound, or AWD→FBA replenishment, SKU.io derives the transfer and receipt status from Amazon's pending-inbound status and the inbound-shipment status rather than from manual ship/receive actions. When the pending inbound reaches a final state (received, over-received, or received-for-less) and the Amazon shipment is closed, the transfer closes. See How transfers work.

Shipment status

shipment_status tracks how much has physically left the source warehouse. A new transfer starts Unshipped.

ValueMeaningHow it's reached
UnshippedNothing has shipped yet.The starting state; also where a reverted transfer sits, or one whose total shipped falls back to zero.
Partially ShippedSome — but not all — of the active quantity has shipped.Total shipped is above zero but below the fully shipped threshold.
ShippedEverything expected has shipped.Total shipped reaches the threshold. Stamps fully_shipped_at with the last shipment's date.

SKU.io settles the status by comparing total shipped against total active quantity minus quantity shipped before the inventory start date:

  • If total shipped is at or above that threshold → Shipped (and fully_shipped_at is stamped).
  • If total shipped is exactly zero → Unshipped.
  • Otherwise → Partially Shipped.
Quantity shipped before your inventory start date is excluded

Units marked as shipped before your inventory start date (quantity_shipped_before_start_date on the line) are subtracted from the threshold, so a transfer that was already partly gone before you went live can still read as fully shipped. This keeps historical transfers from looking perpetually incomplete.

Receipt status

receipt_status tracks how much has arrived at the destination. A new transfer starts Unreceived.

ValueMeaningHow it's reached
UnreceivedNothing received yet.The starting state.
Partially ReceivedSome — but not all — of the active quantity has been received.Total received is above zero but below the fully received threshold.
ReceivedEverything expected has arrived.Total received reaches the threshold. Stamps fully_received_at, closes the transfer, and cancels stale allocations.

For a standard (non-channel) transfer, SKU.io compares total received against the same active-quantity-minus-shipped-before-start-date threshold used for shipping. A negative receipt (a correction that reduces what was received) lowers total received and can move the status back down.

Channel-managed transfers are received by the channel, not by hand

When the destination is Amazon FBA, Amazon AWD, or Walmart WFS, the receipt is recorded automatically from the channel — the destination holds no SKU-side on-hand, so a manual receipt would create orphan inventory. Attempting to receive one manually is rejected with a clear message (HTTP 422): "This transfer's destination is managed by Amazon FBA; its receipt is recorded automatically from the channel, not received manually." The Receive button isn't offered for these transfers. Their receipt status flows from the Amazon pending inbound or the WFS inbound instead.

"Received for less" is a filter value, not a stored status

Amazon can report an inbound as received for less than was sent. There's no separate received_for_less value in receipt_status — the stored status becomes Received, but the list's receipt-status filter surfaces a Received for less option that matches transfers whose Amazon pending inbound is received_for_less while the stored status isn't yet received. Use it to find shortfalls.

The transfers list

Open Inventory → Warehouse Transfers to reach the list. It's a server-driven datatable with saved views, a column selector, import, and export. A badge shows the unfiltered total so you can see how much your active filters are hiding. Each row is one transfer; the default sort is newest Transfer Date first.

Search matches across the transfer's ID, transfer number, from-warehouse name, to-warehouse name, an item's SKU, and an item's FNSKU. Type into the search bar and pick the field to scope it, or search all at once.

Columns include the transfer number, type, from/to warehouse, transfer date, the three status chips, line count, quantity, ETA, and your per-tenant custom fields. Use the column selector to show or hide columns and save the arrangement as a view.

Archived and deleted transfers

By default the list hides archived transfers. The archived filter switches between all, only archived, and exclude archived. Separately, soft-deleted transfers are hidden unless you set the include_deleted filter to include (show alongside live rows) or only (show just deleted rows).

List filters

The filter panel and the advanced filter tree expose the following. Text and status filters support the standard operators (is, is not, is one of, contains); date filters support ranges.

FilterMatches on
Transfer typestandard, fba_inbound, awd_inbound, or awd_fba_replenishment, derived from the source and destination warehouse types.
Transfer statusdraft, open, closed.
Shipment statusunshipped, partially_shipped, shipped.
Receipt statusunreceived, partially_received, received, plus the Received for less pseudo-value described above.
From warehouse / To warehouseThe source or destination warehouse (dropdown of eligible warehouses — Amazon FBA, virtual, and supplier warehouses are excluded from the picker).
Transfer date / Created at / Updated atDate ranges.
Has blemishedTransfers with a negative "blemished" adjustment on any line.
Has inbound planTransfers linked to an Amazon FBA inbound plan.
IDNumeric transfer id.
Custom fieldsOne filter per active per-tenant custom field.

Detail page tabs

Open a transfer to see its detail page. Tabs carry a badge with their count where one applies; the exact set adapts to the transfer type.

TabShowsBadge
LinesThe transfer's line items with per-line quantities and stock context.
ShipmentsEach shipment record (see Shipment fields).Shipment count
Receipts / FBA ReceiptsReceipt records for a standard transfer, or the Amazon ledger receipts grouped by line for a channel-managed one.Receipt count
NotesNotes on the transfer; pinned notes also show above the tabs.Note count
TagsTags applied to the transfer.Tag count
AllocationsActive allocations committed to the transfer's lines.Allocation count
AdjustmentsAdjustments written against the lines (blemished, discards, negative receipts).Adjustment count
MovementsThe inventory movements for this transfer, across its lines, shipment lines, and receipt lines.Movement count
FIFO LayersThe FIFO layers created at the destination on receipt.Layer count
AccountingAccounting transactions posted for the transfer's shipments and receipts.
Custom FieldsPer-tenant custom field values.Filled-field count
ActivityThe activity log for the transfer.Activity count

The badge counts come from a single tab-counts endpoint so the page loads them in one call rather than per tab.

Header fields

These live on the transfer record itself.

FieldWhat it holds
Transfer number (warehouse_transfer_number)The human reference for the transfer, used as its reference everywhere it's linked. Unique.
From warehouse (from_warehouse_id)The source warehouse stock leaves.
To warehouse (to_warehouse_id)The destination warehouse stock arrives at. Its type sets the transfer type (FBA, AWD, WFS, or standard).
Transfer date (transfer_date)The transfer's effective date.
ETA (eta)Expected arrival date at the destination.
Shipping method (shipping_method_id)The method used to move the goods. Cleared automatically for Amazon FBA destinations.
Transfer / Shipment / Receipt statusThe three axes above.
Fully shipped at (fully_shipped_at)Timestamp stamped when the transfer becomes fully shipped; cleared on revert to draft.
Fully received at (fully_received_at)Timestamp stamped when the transfer becomes fully received; cleared on revert to draft.
External shipment ID (shipment_id)An external/channel shipment identifier where one applies.
ASN last sent at (asn_last_sent_at)When an advanced shipment notice was last sent (for 3PL destinations).

The header also carries notes, tags, custom fields, and a full activity log.

Line fields

Each line is one product on the transfer.

FieldWhat it holds
Product (product_id)The product being moved, with its SKU, name, and image.
Quantity (quantity)The quantity requested on the line.
Quantity active (quantity_active)Quantity minus cancelled quantity — the amount that still counts toward shipping and receiving thresholds.
Quantity cancelled (quantity_cancelled)Quantity removed from the line without shipping.
Quantity shipped before start date (quantity_shipped_before_start_date)Units treated as already shipped before your inventory start date; excluded from the fully shipped / fully received thresholds.
FNSKU (sales_channel_unique_id)The Amazon FNSKU for the line. Surfaced as display FNSKU only when the destination is an Amazon FBA warehouse; otherwise hidden.
Description (description)Free-text line description, used as the name when no product is set.
Metadata (metadata)Structured per-line metadata where applicable.

Computed on the line:

FieldHow it's derived
Quantity received (quantity_received)Sum of receipt-line quantities across the line's shipment lines.
Quantity unreceived (quantity_unreceived)quantity_active minus quantity_received, floored at zero.
Quantity blemishedThe absolute total of negative "blemished" adjustments on the line.
Origin / destination available stockCurrent available stock for the product at the source and destination warehouse, shown next to the line so you can gauge coverage.

Shipment record fields

A shipment is created when you ship a transfer. Each has its own detail page with its lines, receipts, movements, and activity.

FieldWhat it holds
Shipping method (shipping_method_id)The method for this shipment.
Cost (cost)Freight/landed cost recorded on the shipment.
Tracking number (tracking_number)Carrier tracking reference.
Shipped at (shipped_at)When the goods left the source. Drives fully_shipped_at on the parent when it's the last shipment.
Fully received at (fully_received_at)Timestamp stamped when every line on this shipment has been received in full.
Auto-generated at receipt (auto_generated_at_receipt)true when SKU.io created the shipment automatically during a quick-receive (see Status buttons).
Total shipped (total_shipped)Sum of the shipment's line quantities.
Total received (total_received)Sum received against the shipment's lines.

A shipment reports isFullyReceived when every one of its lines has been received in full.

Receipt record fields

A receipt records goods arriving against a shipment when you receive a transfer. Each has its own detail page with FIFO layers, movements, accounting, and activity.

FieldWhat it holds
Shipment (warehouse_transfer_shipment_id)The shipment this receipt belongs to.
Received by (user_id)The user who recorded the receipt (shown as System when written by an automated process).
Received at (received_at)When the receipt was recorded.
Receipt linesOne row per product received, each carrying the quantity received, the units pending (shipment-line quantity minus total received so far), and the FIFO layers created for it at the destination.

Computed metrics

These roll up across the transfer's lines and shipments and appear in the footer summary and the dashboard tab.

MetricHow it's derived
Total quantity (total_quantity)Sum of every line's quantity.
Total quantity active (total_quantity_active)Sum of every line's quantity_active (quantity minus cancelled).
Total shipped (total_shipped)Sum of shipment-line quantities across all shipments.
Total received (total_received)Sum of receipt-line quantities, adjusted for negative receipts.
Total shipped before start date (total_shipped_before_start_date)Sum of quantity_shipped_before_start_date across lines; excluded from the shipping/receiving thresholds.
Shipment percent (shipment_percent)total_shipped ÷ total_quantity × 100, rounded to two decimals (0 when there's nothing to ship).
Receipt percent (receipt_percent)total_received ÷ total_quantity × 100, rounded to two decimals (0 when there's nothing to receive).

Status-transition buttons

The sticky action bar at the top of a transfer shows only the buttons that apply to its current state and your permissions. This is the quick map of which button appears when.

ButtonShows whenNeedsDoes
Open TransferNon-Amazon destination, transfer is Draftwarehouse_transfers.updateCommits allocations and moves the transfer to Open. Disabled with a tooltip until the transfer has at least one line item.
Revert to DraftNon-Amazon destination, Open, receipt status Unreceivedwarehouse_transfers.updateUnwinds allocations and any shipment and returns the transfer to Draft. Hidden once anything has been received.
ShipNon-channel-managed destination, Open, shipment status Unshippedwarehouse_transfers.shipOpens the create-shipment dialog.
Receive (quick)Non-channel-managed destination, Open, still Unshipped, not yet Receivedwarehouse_transfers.receiveOpens the receive drawer and auto-creates a shipment covering the received quantities, so you can skip the explicit Ship step for a local/immediate transfer.
ReceiveNon-channel-managed destination, Open, a shipment exists, not yet Receivedwarehouse_transfers.receiveOpens the receive drawer against the existing shipment.
Mark as ShippedAmazon FBA destination, Open, no Amazon inbound shipment yetwarehouse_transfers.shipMarks the FBA inbound as shipped.
No manual Ship or Receive for channel-managed transfers

For Amazon AWD/FBA and Walmart WFS destinations, the generic Ship and Receive buttons don't appear — the channel drives those steps. FBA destinations offer Mark as Shipped instead, and receipt flows in from the channel. See the warning under Receipt status.

Export

To pull the list to a spreadsheet, click Export (requires warehouse_transfers.export). The export modal offers:

  • Format — XLSX or CSV.
  • ContentSummary writes one row per transfer; Line items writes one row per line, repeating the transfer columns beside each line's SKU, name, description, quantity, cancelled quantity, and FNSKU.
  • ScopeAll (ignores active filters), Filtered (matches the current filters and search), Current page, or Selected (the rows you've checked).

The export honors your visible datatable columns, including custom fields, so what you see is what you get. Timestamp columns are converted to your app timezone to match the UI.

Next steps

Last verified: