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