Skip to main content

Inventory Transfer API

Direct inventory transfer between locations without requiring a transfer order.

Endpoints​

MethodEndpointDescription
GET/record/v1/inventoryTransferRetrieve list of inventory transfers
GET/record/v1/inventoryTransfer/{id}Retrieve a specific inventory transfer
POST/record/v1/inventoryTransferCreate 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​

FieldTypeDescriptionRequired
tranDateDateTransaction dateYes
subsidiaryObjectSubsidiary reference {"id": "1"}Yes
locationObjectFrom location (source) referenceYes
transferLocationObjectTo location (destination) referenceYes
departmentObjectDepartment referenceNo
classObjectClass referenceNo
memoStringTransaction memo/descriptionNo
tranIdStringTransaction number (auto-generated if not provided)No
useComponentYieldBooleanUse component yield for assembliesNo

Line Item Fields (item.items)​

FieldTypeDescriptionRequired
itemObjectItem reference {"id": "789"}Yes
adjustQtyByNumberQuantity to transferYes
descriptionStringLine item descriptionNo
unitsObjectUnit of measure referenceNo
inventoryDetailObjectLot/serial number detailsNo
fromBinNumbersObjectSource bin assignments (if bins enabled)No
toBinNumbersObjectDestination 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 fromBinNumbers and toBinNumbers
  • 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​

  1. Verify inventory availability at source location before creating transfer
  2. Use descriptive memos to document the reason for transfer
  3. Track transfer patterns to optimize inventory distribution
  4. Coordinate with receiving location to ensure timely receipt acknowledgment
  5. Use Transfer Orders for transfers requiring approval or in-transit tracking
  6. 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​

  • adjustQtyBy must 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