Work Order Completion API
Record the completion of assembled units from a work order. This transaction increases inventory of the assembled item and updates the work order's built quantity.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /record/v1/workOrderCompletion | Retrieve list of work order completions |
| GET | /record/v1/workOrderCompletion/{id} | Retrieve specific work order completion |
| POST | /record/v1/workOrderCompletion | Create new work order completion |
| PATCH | /record/v1/workOrderCompletion/{id} | Update existing work order completion |
| DELETE | /record/v1/workOrderCompletion/{id} | Delete work order completion |
Key Fields
Header Fields
| Field | Type | Description | Required |
|---|---|---|---|
| createdFrom | Object | Reference to the work order | Yes |
| tranDate | Date | Transaction date (format: YYYY-MM-DD) | Yes |
| completedQuantity | Number | Quantity of assemblies completed | Yes |
| tranId | String | Transaction number (auto-generated if not provided) | No |
| subsidiary | Object | Subsidiary (inherited from work order) | Read-only |
| location | Object | Inventory location (inherited from work order) | Read-only |
| item | Object | Assembly item (inherited from work order) | Read-only |
| memo | String | Notes or comments about the completion | No |
| department | Object | Department reference | No |
| class | Object | Class reference | No |
| postingPeriod | Object | Accounting period for posting | No |
| inventoryDetail | Object | Inventory detail for lot/serial tracking | No |
| binNumbers | Object | Bin location assignments | No |
| orderQuantity | Number | Total work order quantity | Read-only |
| quantityRemaining | Number | Quantity still to be completed | Read-only |
| manufacturingCostTemplate | Object | Cost template for manufacturing | No |
| scrapQuantity | Number | Quantity of scrap produced | No |
| customForm | Object | Custom form reference | No |
| createdDate | DateTime | Date transaction was created | Read-only |
| lastModifiedDate | DateTime | Date transaction was last modified | Read-only |
Sublist: Component (item)
| Field | Type | Description | Required |
|---|---|---|---|
| item | Object | Component item reference | Read-only |
| quantityPer | Number | Quantity per assembly unit | Read-only |
| totalQuantity | Number | Total quantity for completion | Read-only |
| componentYield | Number | Component yield percentage | Read-only |
Example: Create Work Order Completion
Request
POST /record/v1/workOrderCompletion
Content-Type: application/json
{
"createdFrom": {
"id": "3001"
},
"tranDate": "2026-01-05",
"completedQuantity": 100,
"memo": "Initial production run completed",
"department": {
"id": "5"
},
"class": {
"id": "3"
}
}
Response
{
"id": "5001",
"createdFrom": {
"id": "3001",
"refName": "WO-2025-001"
},
"tranDate": "2026-01-05",
"tranId": "WCOMP-2026-001",
"completedQuantity": 100,
"subsidiary": {
"id": "1",
"refName": "Parent Company"
},
"location": {
"id": "1",
"refName": "Main Warehouse"
},
"item": {
"id": "800",
"refName": "Assembly Widget A"
},
"memo": "Initial production run completed",
"department": {
"id": "5",
"refName": "Manufacturing"
},
"class": {
"id": "3",
"refName": "Production"
},
"orderQuantity": 100,
"quantityRemaining": 0,
"scrapQuantity": 0,
"postingPeriod": {
"id": "102",
"refName": "Jan 2026"
},
"createdDate": "2026-01-05T14:30:00Z",
"lastModifiedDate": "2026-01-05T14:30:00Z",
"item": {
"items": [
{
"item": {
"id": "789",
"refName": "Component Part A"
},
"quantityPer": 2,
"totalQuantity": 200,
"componentYield": 98
},
{
"item": {
"id": "790",
"refName": "Component Part B"
},
"quantityPer": 1,
"totalQuantity": 100,
"componentYield": 100
}
]
},
"links": [
{
"rel": "self",
"href": "https://your-account.suitetalk.api.netsuite.com/services/rest/record/v1/workOrderCompletion/5001"
}
]
}
Example: Create Completion with Inventory Details
Request
POST /record/v1/workOrderCompletion
Content-Type: application/json
{
"createdFrom": {
"id": "3001"
},
"tranDate": "2026-01-05",
"completedQuantity": 50,
"memo": "Partial completion with lot tracking",
"inventoryDetail": {
"inventoryAssignment": {
"items": [
{
"issueInventoryNumber": {
"id": "LOT-2026-001"
},
"quantity": 50
}
]
}
}
}
Response
{
"id": "5002",
"tranId": "WCOMP-2026-002",
"completedQuantity": 50,
"quantityRemaining": 50,
"inventoryDetail": {
"inventoryAssignment": {
"items": [
{
"issueInventoryNumber": {
"id": "LOT-2026-001",
"refName": "LOT-2026-001"
},
"quantity": 50
}
]
}
},
"links": [
{
"rel": "self",
"href": "https://your-account.suitetalk.api.netsuite.com/services/rest/record/v1/workOrderCompletion/5002"
}
]
}
Example: Update Work Order Completion
Request
PATCH /record/v1/workOrderCompletion/5001
Content-Type: application/json
{
"memo": "Initial production run completed - all quality checks passed",
"scrapQuantity": 2
}
Response
{
"id": "5001",
"memo": "Initial production run completed - all quality checks passed",
"scrapQuantity": 2,
"lastModifiedDate": "2026-01-05T16:45:00Z",
"links": [
{
"rel": "self",
"href": "https://your-account.suitetalk.api.netsuite.com/services/rest/record/v1/workOrderCompletion/5001"
}
]
}
Sublists and Components
Component Items (item)
The item sublist displays the components used from the work order. These are read-only and automatically populated based on the work order's BOM and the completed quantity.
Fields:
item: Reference to the component item (read-only)quantityPer: Quantity needed per assembly unit (read-only)totalQuantity: Total quantity consumed for this completion (read-only)componentYield: Expected yield percentage (read-only)
Example:
"item": {
"items": [
{
"item": {"id": "789"},
"quantityPer": 2,
"totalQuantity": 200
}
]
}
Inventory Detail (inventoryDetail)
For lot or serial numbered items, use the inventoryDetail object to specify lot/serial numbers.
Example:
"inventoryDetail": {
"inventoryAssignment": {
"items": [
{
"issueInventoryNumber": {"id": "LOT-2026-001"},
"quantity": 50
}
]
}
}
Query Filters
Filter by Transaction Date
GET /record/v1/workOrderCompletion?q=tranDate EQUAL '2026-01-05'
Filter by Date Range
GET /record/v1/workOrderCompletion?q=tranDate BETWEEN '2026-01-01' AND '2026-01-31'
Filter by Work Order
GET /record/v1/workOrderCompletion?q=createdFrom EQUAL 3001
Filter by Assembly Item
GET /record/v1/workOrderCompletion?q=item EQUAL 800
Filter by Subsidiary
GET /record/v1/workOrderCompletion?q=subsidiary EQUAL 1
Expand Related Records
GET /record/v1/workOrderCompletion/5001?expandSubResources=true
Completion Process
The work order completion transaction performs the following:
- Increases Assembly Inventory: Adds completed units to inventory at the specified location
- Updates Work Order: Increments the built quantity on the work order
- Costs Assembly: Calculates and applies manufacturing costs to the assembled items
- Tracks Components: Records component consumption details
- Updates Status: May change work order status to "Built" when fully completed
Important Notes
-
Work Order Status: The work order must be in "Released" or "In Process" status to record completions.
-
Quantity Validation:
- Completed quantity cannot exceed the work order's remaining quantity
- Multiple completions can be created until the total equals the work order quantity
- Partial completions are supported
-
Inventory Location:
- The location is inherited from the work order
- Completed assemblies are received into this location
-
Component Consumption:
- Component quantities are automatically calculated based on the BOM
- Actual component issues should be recorded via Work Order Issue transactions
- Component yield affects the expected consumption
-
Lot/Serial Tracking:
- If the assembly item is lot or serial tracked, use
inventoryDetail - Each lot/serial number must be unique
- Quantity across all lot/serial lines must equal
completedQuantity
- If the assembly item is lot or serial tracked, use
-
Bin Management:
- If bin tracking is enabled, specify bin locations via
binNumbers - Bins must exist in the specified location
- If bin tracking is enabled, specify bin locations via
-
Manufacturing Costs:
- Costs are calculated based on component costs and overhead
- Cost templates can override default costing methods
- Scrap quantities affect the unit cost of good assemblies
-
Scrap Tracking:
scrapQuantityrecords assemblies that failed quality control- Scrap is costed but not added to usable inventory
- Scrap costs are typically expensed
-
Posting Period:
- Transaction posts to the specified accounting period
- If not specified, uses the period for the transaction date
- Period must be open for inventory and GL posting
-
Work Order Status Change:
- When total built quantity equals work order quantity, status automatically changes to "Built"
- Built work orders can still be modified until they are closed
-
Reversing Completions:
- Delete the completion transaction to reverse
- Cannot delete if the work order has been closed
- Reversal reduces built quantity on the work order
-
Custom Forms: Custom completion forms may include additional required fields or validation rules.
-
Permissions: Requires "Work Order Completion" transaction permission with appropriate access level.
-
Integration: Completions can trigger automated processes like quality inspections or put-away tasks.
-
Costing Methods: Supports standard, average, FIFO, and LIFO costing depending on item setup and account preferences.