Inbound Shipment API
Track and manage inbound shipments from vendors (Advanced Receiving feature).
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /record/v1/inboundShipment | List inbound shipments |
GET | /record/v1/inboundShipment/{id} | Get specific shipment |
POST | /record/v1/inboundShipment | Create shipment |
PATCH | /record/v1/inboundShipment/{id} | Update shipment |
DELETE | /record/v1/inboundShipment/{id} | Delete shipment |
Key Fields
| Field | Type | Description | Required |
|---|---|---|---|
id | string | Internal ID | - |
customForm | object | Custom form | No |
shipmentNumber | string | Shipment tracking number | No |
shipmentStatus | object | Shipment status | Read-only |
expectedShippingDate | string | Expected ship date | No |
expectedDeliveryDate | string | Expected delivery date | No |
actualShippingDate | string | Actual ship date | No |
actualDeliveryDate | string | Actual delivery date | No |
shipmentMemo | string | Shipment notes | No |
vendor | object | Vendor | Yes |
subsidiary | object | Subsidiary | Yes (OneWorld) |
landedCostAmount | number | Total landed cost | No |
items | collection | Items in shipment | Yes |
Example: Create Inbound Shipment
POST /record/v1/inboundShipment
Content-Type: application/json
Request Body
{
"vendor": {
"id": "789"
},
"shipmentNumber": "TRACK-123456789",
"expectedShippingDate": "2025-12-26",
"expectedDeliveryDate": "2025-12-28",
"subsidiary": {
"id": "1"
},
"shipmentMemo": "Bulk order shipment - container #CONT-456",
"items": {
"items": [
{
"purchaseOrder": { "id": "2001" },
"item": { "id": "789" },
"quantityExpected": 100,
"quantityReceived": 0,
"unitRate": 25.00
},
{
"purchaseOrder": { "id": "2001" },
"item": { "id": "790" },
"quantityExpected": 50,
"quantityReceived": 0,
"unitRate": 50.00
}
]
}
}
Response
{
"id": "12001",
"shipmentNumber": "TRACK-123456789",
"shipmentStatus": {
"id": "A",
"refName": "In Transit"
},
"expectedShippingDate": "2025-12-26",
"expectedDeliveryDate": "2025-12-28",
"actualShippingDate": null,
"actualDeliveryDate": null,
"vendor": {
"id": "789",
"refName": "Acme Suppliers Inc"
},
"subsidiary": {
"id": "1",
"refName": "Parent Company"
},
"shipmentMemo": "Bulk order shipment - container #CONT-456",
"items": {
"items": [
{
"purchaseOrder": { "id": "2001", "refName": "PO-2025-001" },
"item": { "id": "789", "refName": "Widget A - Standard" },
"quantityExpected": 100,
"quantityReceived": 0,
"unitRate": 25.00
},
{
"purchaseOrder": { "id": "2001", "refName": "PO-2025-001" },
"item": { "id": "790", "refName": "Widget B - Premium" },
"quantityExpected": 50,
"quantityReceived": 0,
"unitRate": 50.00
}
]
},
"links": [
{
"rel": "self",
"href": "https://account.suitetalk.api.netsuite.com/services/rest/record/v1/inboundShipment/12001"
}
]
}
Example: Update Inbound Shipment
PATCH /record/v1/inboundShipment/12001
Content-Type: application/json
Request Body
{
"actualShippingDate": "2025-12-26",
"expectedDeliveryDate": "2025-12-27",
"shipmentMemo": "Bulk order shipment - container #CONT-456 - Expedited shipping",
"items": {
"items": [
{
"purchaseOrder": { "id": "2001" },
"item": { "id": "789" },
"quantityExpected": 100,
"quantityReceived": 0,
"unitRate": 25.00
},
{
"purchaseOrder": { "id": "2001" },
"item": { "id": "790" },
"quantityExpected": 50,
"quantityReceived": 0,
"unitRate": 50.00
},
{
"purchaseOrder": { "id": "2002" },
"item": { "id": "791" },
"quantityExpected": 25,
"quantityReceived": 0,
"unitRate": 75.00
}
]
}
}
Line Items
Items Sublist Fields
| Field | Type | Description | Required |
|---|---|---|---|
purchaseOrder | object | Source PO | Yes |
item | object | Item in shipment | Yes |
quantityExpected | number | Expected quantity | Yes |
quantityReceived | number | Quantity received (read-only) | - |
quantityRemaining | number | Qty not yet received (read-only) | - |
unitRate | number | Unit cost | No |
expectedReceiptDate | string | Expected receipt date | No |
Shipment Statuses
| Status | Description |
|---|---|
In Transit | Shipment is in transit |
Received | Shipment fully received |
Partially Received | Partial receipt completed |
Cancelled | Shipment cancelled |
Example: Track Shipment with Landed Costs
POST /record/v1/inboundShipment
Content-Type: application/json
Request Body
{
"vendor": {
"id": "789"
},
"shipmentNumber": "TRACK-987654321",
"expectedDeliveryDate": "2025-12-30",
"subsidiary": {
"id": "1"
},
"landedCostAmount": 500.00,
"shipmentMemo": "International shipment with customs fees",
"items": {
"items": [
{
"purchaseOrder": { "id": "2005" },
"item": { "id": "800" },
"quantityExpected": 500,
"unitRate": 15.00
}
]
}
}
Query Filters
Find In Transit Shipments
GET /record/v1/inboundShipment?q=shipmentStatus.id='A'
Find by Vendor
GET /record/v1/inboundShipment?q=vendor='789'
Find by Expected Delivery Date
GET /record/v1/inboundShipment?q=expectedDeliveryDate BETWEEN '2025-12-01' AND '2025-12-31'
Find by Tracking Number
GET /record/v1/inboundShipment?q=shipmentNumber='TRACK-123456789'
Find Overdue Shipments
GET /record/v1/inboundShipment?q=expectedDeliveryDate < SYSDATE AND shipmentStatus.id='A'
Receive Shipment
Create Item Receipt when shipment arrives:
POST /record/v1/itemReceipt
Content-Type: application/json
{
"entity": {
"id": "789"
},
"tranDate": "2025-12-28",
"subsidiary": {
"id": "1"
},
"location": {
"id": "1"
},
"createdFrom": {
"id": "2001"
},
"memo": "Received from inbound shipment TRACK-123456789",
"item": {
"items": [
{
"item": { "id": "789" },
"quantity": 100,
"itemReceive": true
},
{
"item": { "id": "790" },
"quantity": 50,
"itemReceive": true
}
]
}
}
Advanced Receiving Workflow
- Vendor Ships Items - Vendor provides tracking number
- Create Inbound Shipment - Record shipment details in NetSuite
- Track in Transit - Monitor shipment status and expected delivery
- Update Actual Dates - Record actual ship/delivery dates
- Receive Items - Create Item Receipt when shipment arrives
- Link to Shipment - System links receipt to inbound shipment
- Update Status - Shipment status automatically updates
Example: Partial Receipt from Shipment
POST /record/v1/itemReceipt
Content-Type: application/json
{
"entity": {
"id": "789"
},
"tranDate": "2025-12-28",
"subsidiary": {
"id": "1"
},
"location": {
"id": "1"
},
"createdFrom": {
"id": "2001"
},
"memo": "Partial receipt from shipment TRACK-123456789 - some items damaged",
"item": {
"items": [
{
"item": { "id": "789" },
"quantity": 95,
"itemReceive": true
},
{
"item": { "id": "790" },
"quantity": 50,
"itemReceive": true
}
]
}
}
Important Notes
- Inbound Shipment requires the Advanced Receiving feature to be enabled
- Provides visibility into shipments before they arrive at the warehouse
- Tracking numbers can be used for carrier integration and status updates
- The
shipmentStatusfield is read-only and updated automatically - Shipments can include items from multiple purchase orders
- Expected dates help with warehouse planning and resource allocation
- Actual dates are typically set when shipment tracking is updated
- Landed costs (freight, customs, duties) can be tracked per shipment
- Item receipts are linked to inbound shipments automatically
- Partial receipts update the shipment status to "Partially Received"
- Full receipt updates the shipment status to "Received"
- Shipment records provide an audit trail for receiving activities
- Multiple item receipts can be created from a single inbound shipment
- Cancelling a shipment does not affect already created item receipts
- The
quantityReceivedfield is updated automatically from item receipts - Advanced Receiving is particularly useful for international shipments
- Integration with carrier tracking systems can auto-update shipment status
See Also
- Purchase Order - Source POs
- Item Receipt - Receive shipments
- Transfer Order - Internal transfers
- Vendor - Vendor records