Overview
Transfer stock between locations. Supports multi-location stores with a full workflow: create draft → mark as shipped (in-transit) → receive at destination. Partial receiving is supported.
Transfer Workflow
Status Flow
| Status | Description | Available Actions |
|---|---|---|
| Draft | Transfer created, not yet shipped | Edit, Ship, Cancel |
| In Transit | Shipped from source, not yet received | Receive, Cancel |
| Received | Received at destination location | View only |
| Cancelled | Transfer cancelled | View only |
Creating a Transfer
- Select From Location (source warehouse)
- Select To Location (destination — must be different from source)
- Add products with quantities (use "+ Add Product" for multiple items)
- Optionally add notes
- Click Create Transfer — generates transfer number (TR-00001)
Receiving a Transfer
Partial Receiving
When receiving, you can enter the actual quantity received for each item (may be less than requested). Inventory is updated based on received quantities:
- Source location — quantity decreased by received amount
- Destination location — quantity increased by received amount
Inventory Impact
| Action | Source Location | Destination Location |
|---|---|---|
| Ship (Draft → In Transit) | No change | No change |
| Receive (In Transit → Received) | - quantity_received | + quantity_received |
| Cancel | No change | No change |
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/api/inventory-transfers | GET | List transfers (filterable by status) |
/api/inventory-transfers | POST | Create new transfer |
/api/inventory-transfers/{id} | GET | Get transfer details with items |
/api/inventory-transfers/{id}/status | PUT | Update status (ship/receive/cancel) |
Multi-location: Locations are synced from Shopify via
POST /api/locations/sync. Each location has a name, address, and primary flag. Inventory snapshots are tracked per location.