Skip to main content

Item Fulfillment API

Create item fulfillments to ship items from sales orders.


Endpoints​

MethodEndpointDescription
GET/record/v1/itemFulfillmentList item fulfillments
GET/record/v1/itemFulfillment/{id}Get specific fulfillment
POST/record/v1/itemFulfillmentCreate fulfillment
PATCH/record/v1/itemFulfillment/{id}Update fulfillment
DELETE/record/v1/itemFulfillment/{id}Delete fulfillment

Key Fields​

FieldTypeDescriptionRequired
createdFromobjectSales order referenceYes
tranDatestringFulfillment date (YYYY-MM-DD)Yes
subsidiaryobjectSubsidiary referenceYes (OneWorld)
locationobjectShip from locationNo
shipMethodobjectShipping method referenceNo
shipStatusobjectShipping status (PICKED, PACKED, SHIPPED)No
trackingNumbersstringTracking numbers (comma-separated for multiple)No
memostringMemo/notesNo
shipDatestringShip date (YYYY-MM-DD)No
shipCarrierobjectShipping carrier referenceNo
shipAddressListobjectShip to address referenceNo
itemcollectionLine items to fulfillYes

Example: Create Item Fulfillment​

Request​

POST /record/v1/itemFulfillment
Content-Type: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN
{
"createdFrom": {
"id": "1001"
},
"tranDate": "2025-12-25",
"shipDate": "2025-12-25",
"subsidiary": {
"id": "1"
},
"location": {
"id": "1"
},
"shipMethod": {
"id": "123"
},
"shipStatus": {
"id": "SHIPPED"
},
"shipCarrier": {
"id": "ups"
},
"trackingNumbers": "1Z999AA10123456784",
"memo": "Rush order - expedited shipping",
"item": {
"items": [
{
"item": { "id": "789" },
"quantity": 10,
"itemIsFulfilled": true,
"location": { "id": "1" }
},
{
"item": { "id": "790" },
"quantity": 5,
"itemIsFulfilled": true,
"location": { "id": "1" }
}
]
}
}

Response​

{
"id": "5001",
"tranId": "IF-10001",
"createdFrom": {
"id": "1001",
"refName": "SO-5001"
},
"tranDate": "2025-12-25",
"shipDate": "2025-12-25",
"subsidiary": {
"id": "1",
"refName": "Parent Company"
},
"location": {
"id": "1",
"refName": "Main Warehouse"
},
"shipMethod": {
"id": "123",
"refName": "UPS Ground"
},
"shipStatus": {
"id": "SHIPPED",
"refName": "Shipped"
},
"trackingNumbers": "1Z999AA10123456784",
"status": "Shipped",
"links": [
{
"rel": "self",
"href": "https://ACCOUNT_ID.suitetalk.api.netsuite.com/services/rest/record/v1/itemFulfillment/5001"
}
]
}

Example: Update Item Fulfillment​

Request​

PATCH /record/v1/itemFulfillment/5001
Content-Type: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN
{
"trackingNumbers": "1Z999AA10123456784,1Z999AA10123456785",
"memo": "Updated with additional tracking number",
"shipStatus": {
"id": "SHIPPED"
}
}

Response​

{
"id": "5001",
"tranId": "IF-10001",
"trackingNumbers": "1Z999AA10123456784,1Z999AA10123456785",
"memo": "Updated with additional tracking number",
"shipStatus": {
"id": "SHIPPED",
"refName": "Shipped"
},
"lastModifiedDate": "2025-12-25T14:30:00Z",
"links": [
{
"rel": "self",
"href": "https://ACCOUNT_ID.suitetalk.api.netsuite.com/services/rest/record/v1/itemFulfillment/5001"
}
]
}

Sublists​

Item Sublist​

FieldTypeDescriptionRequired
itemobjectItem referenceYes
quantitynumberQuantity orderedRead-only
quantityRemainingnumberQuantity not yet fulfilledRead-only
itemIsFulfilledbooleanCheck to fulfill this lineYes
locationobjectFulfillment locationNo
binNumbersstringBin numbers for pickingNo
serialNumbersstringSerial numbers (for serialized items)Conditional
inventoryDetailobjectLot/serial number detailsConditional

Query Filters​

Find by Sales Order​

GET /record/v1/itemFulfillment?q=createdFrom='1001'

Find by Date Range​

GET /record/v1/itemFulfillment?q=tranDate BETWEEN '2025-12-01' AND '2025-12-31'

Find by Ship Status​

GET /record/v1/itemFulfillment?q=shipStatus='SHIPPED'

Find by Tracking Number​

GET /record/v1/itemFulfillment?q=trackingNumbers LIKE '%1Z999AA%'

Find by Customer (via Sales Order)​

GET /record/v1/itemFulfillment?q=createdFrom.entity='456'
GET /record/v1/itemFulfillment/5001?expandSubResources=true

Important Notes​

Inventory Impact​

  • Creating an item fulfillment reduces inventory on-hand quantities at the specified location
  • Inventory is reduced only for lines where itemIsFulfilled is set to true
  • Bin-tracked items require binNumbers to be specified
  • Serialized items require serial numbers via serialNumbers or inventoryDetail
  • Lot-numbered items require lot numbers via inventoryDetail

Shipping Statuses​

StatusDescriptionUse Case
PICKEDItems picked from inventoryPicking complete, not yet packed
PACKEDItems packed for shippingReady to ship
SHIPPEDItems shipped to customerShipped with tracking

Fulfillment Workflow​

  1. Sales order is approved and awaiting fulfillment
  2. Create item fulfillment from the sales order
  3. Select items to fulfill (itemIsFulfilled: true)
  4. Specify shipping method and tracking information
  5. Set appropriate ship status
  6. Item fulfillment reduces inventory and updates sales order status

Partial Fulfillments​

  • You can fulfill only some items or quantities from a sales order
  • Set itemIsFulfilled: true only for lines you want to fulfill
  • Remaining items can be fulfilled in subsequent item fulfillments
  • Sales order status will update to "Partially Fulfilled" until complete

Multi-Location Fulfillment​

  • Items can be fulfilled from different locations
  • Specify location at the line level to override the header location
  • Each line reduces inventory at its specified location

Serial/Lot Number Tracking​

For serialized items:

{
"item": {
"items": [
{
"item": { "id": "789" },
"quantity": 2,
"itemIsFulfilled": true,
"serialNumbers": "SN001,SN002"
}
]
}
}

For lot-numbered items:

{
"item": {
"items": [
{
"item": { "id": "789" },
"quantity": 10,
"itemIsFulfilled": true,
"inventoryDetail": {
"inventoryAssignment": {
"items": [
{
"issueInventoryNumber": { "id": "LOT-12345" },
"quantity": 10
}
]
}
}
}
]
}
}

Permissions Required​

  • Create: Item Fulfillment > Create permission
  • Edit: Item Fulfillment > Edit permission
  • View: Item Fulfillment > View permission
  • Delete: Item Fulfillment > Delete permission

Deletion Constraints​

  • Item fulfillments can only be deleted if they haven't been invoiced
  • Deleting restores inventory quantities
  • Consider voiding instead of deleting for audit trail purposes

See Also​