Inventory Item API
Create and manage physical inventory items that are stocked and tracked.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /record/v1/inventoryItem | List inventory items |
GET | /record/v1/inventoryItem/{id} | Get specific item |
POST | /record/v1/inventoryItem | Create item |
PATCH | /record/v1/inventoryItem/{id} | Update item |
DELETE | /record/v1/inventoryItem/{id} | Delete item |
Key Fields
| Field | Type | Description | Required |
|---|---|---|---|
itemId | string | Item name/SKU | Yes (if not auto-numbered) |
displayName | string | Display name | No |
description | string | Item description | No |
subsidiary | object | Subsidiary reference | Yes (OneWorld) |
location | object | Default location | No |
assetAccount | object | Inventory asset account | Yes |
cogsAccount | object | Cost of goods sold account | Yes |
incomeAccount | object | Income/revenue account | Yes |
costingMethod | object | Costing method (AVERAGE, FIFO, etc.) | Yes |
cost | number | Unit cost | No |
basePrice | number | Base selling price | No |
taxSchedule | object | Tax schedule reference | No |
isInactive | boolean | Inactive status | No |
purchaseDescription | string | Purchase description | No |
salesDescription | string | Sales description | No |
trackLandedCost | boolean | Track landed cost | No |
vendorName | string | Preferred vendor name | No |
Example: Create Inventory Item
Request
POST /record/v1/inventoryItem
Content-Type: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN
{
"itemId": "WIDGET-001",
"displayName": "Blue Widget",
"description": "Premium blue widget - Model A",
"salesDescription": "High-quality blue widget with advanced features",
"purchaseDescription": "Blue Widget - Model A (SKU: WIDGET-001)",
"subsidiary": {
"id": "1"
},
"location": {
"id": "1"
},
"assetAccount": {
"id": "120"
},
"cogsAccount": {
"id": "500"
},
"incomeAccount": {
"id": "400"
},
"costingMethod": {
"id": "AVERAGE"
},
"cost": 25.00,
"basePrice": 99.99,
"taxSchedule": {
"id": "1"
},
"trackLandedCost": true,
"isInactive": false
}
Response
{
"id": "789",
"itemId": "WIDGET-001",
"displayName": "Blue Widget",
"description": "Premium blue widget - Model A",
"subsidiary": {
"id": "1",
"refName": "Parent Company"
},
"location": {
"id": "1",
"refName": "Main Warehouse"
},
"assetAccount": {
"id": "120",
"refName": "Inventory Asset"
},
"cogsAccount": {
"id": "500",
"refName": "Cost of Goods Sold"
},
"incomeAccount": {
"id": "400",
"refName": "Sales Revenue"
},
"costingMethod": {
"id": "AVERAGE",
"refName": "Average"
},
"cost": 25.00,
"basePrice": 99.99,
"isInactive": false,
"links": [
{
"rel": "self",
"href": "https://ACCOUNT_ID.suitetalk.api.netsuite.com/services/rest/record/v1/inventoryItem/789"
}
]
}
Example: Update Inventory Item
Request
PATCH /record/v1/inventoryItem/789
Content-Type: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN
{
"basePrice": 109.99,
"cost": 27.50,
"description": "Premium blue widget - Model A (Updated design)",
"salesDescription": "NEW! High-quality blue widget with enhanced features"
}
Response
{
"id": "789",
"itemId": "WIDGET-001",
"basePrice": 109.99,
"cost": 27.50,
"description": "Premium blue widget - Model A (Updated design)",
"salesDescription": "NEW! High-quality blue widget with enhanced features",
"lastModifiedDate": "2025-12-25T10:30:00Z",
"links": [
{
"rel": "self",
"href": "https://ACCOUNT_ID.suitetalk.api.netsuite.com/services/rest/record/v1/inventoryItem/789"
}
]
}
Sublists
Pricing Sublist
| Field | Type | Description | Required |
|---|---|---|---|
level | object | Price level reference | Yes |
price | number | Price for this level | Yes |
currency | object | Currency (multi-currency) | Conditional |
Example:
{
"pricing": {
"items": [
{
"level": { "id": "1" },
"price": 99.99
},
{
"level": { "id": "2" },
"price": 89.99
}
]
}
}
Locations Sublist
| Field | Type | Description | Required |
|---|---|---|---|
location | object | Location reference | Yes |
quantityOnHand | number | Current on-hand quantity | Read-only |
reorderPoint | number | Reorder point | No |
preferredStockLevel | number | Preferred stock level | No |
defaultReturnCost | number | Default return cost | No |
Example:
{
"locations": {
"items": [
{
"location": { "id": "1" },
"reorderPoint": 50,
"preferredStockLevel": 200
},
{
"location": { "id": "2" },
"reorderPoint": 25,
"preferredStockLevel": 100
}
]
}
}
Vendor Sublist
| Field | Type | Description | Required |
|---|---|---|---|
vendor | object | Vendor reference | Yes |
vendorCode | string | Vendor's item code | No |
purchasePrice | number | Purchase price | No |
preferredVendor | boolean | Preferred vendor flag | No |
Query Filters
Find Active Items
GET /record/v1/inventoryItem?q=isInactive=false
Find by SKU Pattern
GET /record/v1/inventoryItem?q=itemId LIKE 'WIDGET%'
Find by Name
GET /record/v1/inventoryItem?q=displayName LIKE '%Blue%'
Find by Subsidiary
GET /record/v1/inventoryItem?q=subsidiary='1'
Find by Costing Method
GET /record/v1/inventoryItem?q=costingMethod='AVERAGE'
Find by Price Range
GET /record/v1/inventoryItem?q=basePrice BETWEEN 50 AND 100
Expand Related Records
GET /record/v1/inventoryItem/789?expandSubResources=true
Important Notes
Costing Methods
| Method | Description | Use Case |
|---|---|---|
AVERAGE | Weighted average cost | Most common, smooth cost changes |
FIFO | First-in, first-out | When older inventory sold first |
LIFO | Last-in, first-out | When newer inventory sold first (if enabled) |
STANDARD | Standard costing | Manufacturing, fixed standard costs |
LOT_NUMBERED | Lot-specific costing | Track costs by lot/batch |
SERIALIZED | Serial number costing | Track costs by serial number |
Important: Costing method cannot be changed once inventory transactions exist for the item.
Inventory Tracking
Standard Inventory Items:
- Track quantity on hand by location
- Automatically update on transactions
- Support bin management
- Support cycle counting
Lot-Numbered Items:
{
"costingMethod": {
"id": "LOT_NUMBERED"
},
"isLotItem": true
}
Serialized Items:
{
"costingMethod": {
"id": "SERIALIZED"
},
"isSerialItem": true
}
Account Requirements
Required Accounts:
- Asset Account: Where inventory value is held
- COGS Account: Expense when items are sold
- Income Account: Revenue when items are sold
Multi-Location Accounting:
- Can override accounts per location
- Use location-specific asset accounts
- Supports different GL impact by location
Pricing
Base Price:
- Default selling price
- Can be overridden with price levels
- Does not include taxes
Price Levels:
- Support multiple price levels (Retail, Wholesale, etc.)
- Currency-specific pricing for multi-currency
- Customer-specific pricing via price levels
Multi-Currency Pricing:
{
"pricing": {
"items": [
{
"level": { "id": "1" },
"price": 99.99,
"currency": { "id": "1" }
},
{
"level": { "id": "1" },
"price": 79.99,
"currency": { "id": "2" }
}
]
}
}
Inventory Valuation
- Item cost affects inventory asset value
- COGS calculated based on costing method
- Average cost recalculated with each receipt
- View current average cost via GET request
Subsidiary Assignment
OneWorld Accounts:
- Must assign to at least one subsidiary
- Can assign to multiple subsidiaries
- Pricing and inventory tracked per subsidiary
{
"subsidiary": {
"id": "1"
},
"subsidiaryList": {
"items": [
{ "subsidiary": { "id": "1" } },
{ "subsidiary": { "id": "2" } }
]
}
}
Item Lifecycle
Creating Items:
- Define basic information (name, description)
- Set accounting fields (asset, COGS, income accounts)
- Choose costing method (cannot change later)
- Set initial cost and pricing
- Configure locations and reorder points
Updating Items:
- Can update pricing anytime
- Can update descriptions
- Cannot change costing method if transactions exist
- Cannot change certain accounting fields with transactions
Inactivating Items:
{
"isInactive": true
}
- Prevents new transactions
- Preserves historical data
- Can be reactivated if needed
Reorder Management
Set reorder points per location:
{
"locations": {
"items": [
{
"location": { "id": "1" },
"reorderPoint": 50,
"preferredStockLevel": 200
}
]
}
}
- System flags items below reorder point
- Used for purchase order suggestions
- Supports automated replenishment
Landed Cost Tracking
Enable for items with freight, duties, etc.:
{
"trackLandedCost": true
}
- Tracks additional costs beyond purchase price
- Includes freight, customs, insurance
- Affects true item cost and COGS
Permissions Required
- Create: Inventory Item > Create permission
- Edit: Inventory Item > Edit permission
- View: Inventory Item > View permission
- Delete: Inventory Item > Delete permission
Deletion Constraints
- Cannot delete items with transaction history
- Cannot delete items with current inventory on hand
- Must inactivate instead if transactions exist
Best Practices
- Consistent Naming: Use standardized SKU format (e.g., CATEGORY-NUMBER)
- Complete Descriptions: Fill both sales and purchase descriptions
- Accurate Costing: Choose appropriate costing method upfront
- Price Management: Use price levels for different customer types
- Reorder Points: Set realistic reorder points based on lead time
- Location Setup: Configure all relevant locations during creation
- Vendor Information: Maintain vendor list for purchasing
- Regular Reviews: Periodically review and update pricing and costs
See Also
- Assembly Item - Items built from components
- Kit Item - Items sold as kits
- Inventory Adjustment - Adjust quantities
- Item Receipt - Receive inventory
- Sales Order - Sell inventory items
- Location - Manage inventory locations