Skip to main content

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

MethodEndpointDescription
GET/record/v1/workOrderCompletionRetrieve list of work order completions
GET/record/v1/workOrderCompletion/{id}Retrieve specific work order completion
POST/record/v1/workOrderCompletionCreate 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

FieldTypeDescriptionRequired
createdFromObjectReference to the work orderYes
tranDateDateTransaction date (format: YYYY-MM-DD)Yes
completedQuantityNumberQuantity of assemblies completedYes
tranIdStringTransaction number (auto-generated if not provided)No
subsidiaryObjectSubsidiary (inherited from work order)Read-only
locationObjectInventory location (inherited from work order)Read-only
itemObjectAssembly item (inherited from work order)Read-only
memoStringNotes or comments about the completionNo
departmentObjectDepartment referenceNo
classObjectClass referenceNo
postingPeriodObjectAccounting period for postingNo
inventoryDetailObjectInventory detail for lot/serial trackingNo
binNumbersObjectBin location assignmentsNo
orderQuantityNumberTotal work order quantityRead-only
quantityRemainingNumberQuantity still to be completedRead-only
manufacturingCostTemplateObjectCost template for manufacturingNo
scrapQuantityNumberQuantity of scrap producedNo
customFormObjectCustom form referenceNo
createdDateDateTimeDate transaction was createdRead-only
lastModifiedDateDateTimeDate transaction was last modifiedRead-only

Sublist: Component (item)

FieldTypeDescriptionRequired
itemObjectComponent item referenceRead-only
quantityPerNumberQuantity per assembly unitRead-only
totalQuantityNumberTotal quantity for completionRead-only
componentYieldNumberComponent yield percentageRead-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
GET /record/v1/workOrderCompletion/5001?expandSubResources=true

Completion Process

The work order completion transaction performs the following:

  1. Increases Assembly Inventory: Adds completed units to inventory at the specified location
  2. Updates Work Order: Increments the built quantity on the work order
  3. Costs Assembly: Calculates and applies manufacturing costs to the assembled items
  4. Tracks Components: Records component consumption details
  5. Updates Status: May change work order status to "Built" when fully completed

Important Notes

  1. Work Order Status: The work order must be in "Released" or "In Process" status to record completions.

  2. 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
  3. Inventory Location:

    • The location is inherited from the work order
    • Completed assemblies are received into this location
  4. 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
  5. 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
  6. Bin Management:

    • If bin tracking is enabled, specify bin locations via binNumbers
    • Bins must exist in the specified location
  7. 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
  8. Scrap Tracking:

    • scrapQuantity records assemblies that failed quality control
    • Scrap is costed but not added to usable inventory
    • Scrap costs are typically expensed
  9. 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
  10. 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
  11. 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
  12. Custom Forms: Custom completion forms may include additional required fields or validation rules.

  13. Permissions: Requires "Work Order Completion" transaction permission with appropriate access level.

  14. Integration: Completions can trigger automated processes like quality inspections or put-away tasks.

  15. Costing Methods: Supports standard, average, FIFO, and LIFO costing depending on item setup and account preferences.