Inventory Transfer API
Direct inventory transfer between locations without requiring a transfer order.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /record/v1/inventoryTransfer | Retrieve list of inventory transfers |
| GET | /record/v1/inventoryTransfer/{id} | Retrieve a specific inventory transfer |
| POST | /record/v1/inventoryTransfer | Create a new inventory transfer |
| PATCH | /record/v1/inventoryTransfer/{id} | Update an existing inventory transfer |
| DELETE | /record/v1/inventoryTransfer/{id} | Delete an inventory transfer |
Key Fields
Header Fields
| Field | Type | Description | Required |
|---|---|---|---|
tranDate | Date | Transaction date | Yes |
subsidiary | Object | Subsidiary reference {"id": "1"} | Yes |
location | Object | From location (source) reference | Yes |
transferLocation | Object | To location (destination) reference | Yes |
department | Object | Department reference | No |
class | Object | Class reference | No |
memo | String | Transaction memo/description | No |
tranId | String | Transaction number (auto-generated if not provided) | No |
useComponentYield | Boolean | Use component yield for assemblies | No |
Line Item Fields (item.items)
| Field | Type | Description | Required |
|---|---|---|---|
item | Object | Item reference {"id": "789"} | Yes |
adjustQtyBy | Number | Quantity to transfer | Yes |
description | String | Line item description | No |
units | Object | Unit of measure reference | No |
inventoryDetail | Object | Lot/serial number details | No |
fromBinNumbers | Object | Source bin assignments (if bins enabled) | No |
toBinNumbers | Object | Destination bin assignments (if bins enabled) | No |
Example: Create Inventory Transfer
Request
POST /record/v1/inventoryTransfer
Content-Type: application/json
{
"tranDate": "2025-12-25",
"subsidiary": {"id": "1"},
"location": {"id": "1"},
"transferLocation": {"id": "2"},
"department": {"id": "10"},
"class": {"id": "5"},
"memo": "Transfer from Main Warehouse to Distribution Center",
"item": {
"items": [
{
"item": {"id": "789"},
"adjustQtyBy": 50,
"description": "Widget A - Standard"
},
{
"item": {"id": "790"},
"adjustQtyBy": 25,
"description": "Widget B - Premium"
}
]
}
}
Response
{
"id": "23456",
"tranDate": "2025-12-25",
"tranId": "INVTRANS-2025-001",
"subsidiary": {
"id": "1",
"refName": "Parent Company"
},
"location": {
"id": "1",
"refName": "Main Warehouse"
},
"transferLocation": {
"id": "2",
"refName": "Distribution Center"
},
"department": {
"id": "10",
"refName": "Operations"
},
"class": {
"id": "5",
"refName": "Warehouse A"
},
"memo": "Transfer from Main Warehouse to Distribution Center",
"item": {
"items": [
{
"item": {
"id": "789",
"refName": "Widget A"
},
"adjustQtyBy": 50,
"description": "Widget A - Standard"
},
{
"item": {
"id": "790",
"refName": "Widget B"
},
"adjustQtyBy": 25,
"description": "Widget B - Premium"
}
]
},
"links": [
{
"rel": "self",
"href": "https://{{account}}.suitetalk.api.netsuite.com/services/rest/record/v1/inventoryTransfer/23456"
}
]
}
Example: Update Inventory Transfer
Request
PATCH /record/v1/inventoryTransfer/23456
Content-Type: application/json
{
"memo": "Transfer from Main Warehouse to Distribution Center - Updated",
"item": {
"items": [
{
"item": {"id": "791"},
"adjustQtyBy": 15,
"description": "Widget C - Additional transfer"
}
]
}
}
Response
{
"id": "23456",
"memo": "Transfer from Main Warehouse to Distribution Center - Updated",
"links": [
{
"rel": "self",
"href": "https://{{account}}.suitetalk.api.netsuite.com/services/rest/record/v1/inventoryTransfer/23456"
}
]
}
Sublists/Line Items
Item Sublist Structure
The item.items array contains inventory transfer line items. Each line represents a quantity of an item being transferred from one location to another.
{
"item": {
"items": [
{
"item": {"id": "789"},
"adjustQtyBy": 50,
"description": "Widget A"
}
]
}
}
With Bin Management
For locations with bin management enabled, specify source and destination bins:
{
"item": {
"items": [
{
"item": {"id": "789"},
"adjustQtyBy": 50,
"fromBinNumbers": {
"items": [
{
"binNumber": {"id": "10"},
"quantity": 30
},
{
"binNumber": {"id": "11"},
"quantity": 20
}
]
},
"toBinNumbers": {
"items": [
{
"binNumber": {"id": "20"},
"quantity": 50
}
]
}
}
]
}
}
With Lot/Serial Numbers
For lot or serial tracked items, specify inventory details:
{
"item": {
"items": [
{
"item": {"id": "789"},
"adjustQtyBy": 50,
"inventoryDetail": {
"items": [
{
"inventoryNumber": {"id": "500"},
"quantity": 25
},
{
"inventoryNumber": {"id": "501"},
"quantity": 25
}
]
}
}
]
}
}
Query Filters
Filter by Date Range
GET /record/v1/inventoryTransfer?q=tranDate BETWEEN '2025-01-01' AND '2025-12-31'
Filter by Source Location
GET /record/v1/inventoryTransfer?q=location.id = 1
Filter by Destination Location
GET /record/v1/inventoryTransfer?q=transferLocation.id = 2
Filter by Subsidiary
GET /record/v1/inventoryTransfer?q=subsidiary.id = 1
Filter by Transaction ID
GET /record/v1/inventoryTransfer?q=tranId = 'INVTRANS-2025-001'
Filter by Both Locations
GET /record/v1/inventoryTransfer?q=location.id = 1 AND transferLocation.id = 2
Complex Query with Date and Sorting
GET /record/v1/inventoryTransfer?q=tranDate >= '2025-01-01' AND subsidiary.id = 1&orderby=tranDate DESC&limit=100
Important Notes
Accounting Impact
- Inventory transfers do not create journal entries
- Inventory value moves from source location to destination location
- The transfer is tracked for inventory movement but does not affect GL accounts
- Use Inventory Transfer Orders if you need approval workflow before transfer
Location Requirements
- Source and destination locations must be different
- Both locations must belong to the same subsidiary
- Items must be available at the source location
- Items must be enabled for the destination location
Inventory Tracking
- For serialized items, you must provide serial numbers via
inventoryDetail - For lot-tracked items, lot numbers must be specified via
inventoryDetail - Bin management requires bin assignments via
fromBinNumbersandtoBinNumbers - Total quantity in bins/lots must match
adjustQtyBy
Permissions Required
- Create: Transactions > Inventory Transfer > Create
- Edit: Transactions > Inventory Transfer > Edit
- Delete: Transactions > Inventory Transfer > Delete
- View: Transactions > Inventory Transfer > View
Best Practices
- Verify inventory availability at source location before creating transfer
- Use descriptive memos to document the reason for transfer
- Track transfer patterns to optimize inventory distribution
- Coordinate with receiving location to ensure timely receipt acknowledgment
- Use Transfer Orders for transfers requiring approval or in-transit tracking
- Plan bin assignments in advance for efficient warehouse operations
Limitations
- Cannot transfer negative quantities
- Cannot transfer to the same location (source = destination)
- Items must exist and be available at source location
- Closed accounting periods may restrict transfers
- Some item types cannot be transferred (e.g., services, non-inventory items)
Transfer vs Transfer Order
Inventory Transfer (this API):
- Direct, immediate transfer
- No approval workflow
- No in-transit tracking
- Simpler for internal warehouse movements
Inventory Transfer Order (separate API):
- Requires approval workflow
- Tracks in-transit inventory
- More complex for inter-warehouse shipments
- Better for tracking shipping costs and carrier information
Data Validation
adjustQtyBymust be positive and greater than zero- Source location must have sufficient inventory
- Transaction date must be within an open accounting period
- Bins (if specified) must exist at respective locations
- Lot/serial numbers must be valid and available at source