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