Represents what a work order used, for example spare parts, materials, or labour hours. Each row states one item, with the planned and the actual quantity and cost. In the Excel templates, parts and labour are registered on the Parts and labour sheet.
Parts and labour are a shared entity. They work the same way in every manufacturing domain model.
The Parts and labour object
{
"workOrder": "WO-1001",
"category": "labour",
"item": "CREW-A",
"lot": null,
"plannedQuantity": 2,
"actualQuantity": 2.5,
"unit": "h",
"plannedAmount": 90,
"actualAmount": 112.5,
"at": "2026-09-10T11:40:00+02:00"
}
Fields
| Field | Type | Description | Example |
|---|---|---|---|
workOrder |
string | Business code of the work order. | "WO-1001" |
category |
string | Category of the item, for example labour or a material. See Categories and items. | "labour" |
item |
string | Business code of the item used, for example a crew or a material. | "CREW-A" |
lot |
string or null | Business code of the lot the item came from. Required for materials tracked by lot. | null |
plannedQuantity |
number or null | Planned quantity. | 2 |
actualQuantity |
number or null | Quantity actually used. | 2.5 |
unit |
string | Unit of the quantities. | "h" |
plannedAmount |
number or null | Planned cost of the planned quantity, as a total, not a price per unit. | 90 |
actualAmount |
number or null | Actual cost of the quantity used, as a total, not a price per unit. | 112.5 |
at |
string or null | When the item was used, as an ISO 8601 timestamp with a UTC offset. | "2026-09-10T11:40:00+02:00" |
A row is identified by workOrder, category, item, and lot together.
Planned and actual
A row can state the plan, the actual use, or both:
- Send
plannedQuantity(andplannedAmount) when the work is planned. - Send
actualQuantity(andactualAmount) when the item has been used, for example by updating the same row later.
At least one of plannedQuantity and actualQuantity is required.
Categories and items
category says what kind of item the row is about, and item must be a record of that kind. For example:
| Category |
item refers to |
|---|---|
labour |
a crew |
expense |
a cost line |
Each domain model defines its categories, for example for materials, energy, or equipment. They are the same categories the domain model uses for consumption and planned use.
- An unknown category is refused.
- An item that is not a record of the category's kind is refused.
Lots
- If the item is a material tracked by lot,
lotis required. - The lot must be a delivery of that material.
- A lot cannot be given for categories that are not tracked by lot, such as labour.
- A lot cannot be deleted while parts and labour rows refer to it.
API resource
| Resource | Base path |
|---|---|
Parts and labour |
/manufacturing/v1/parts-and-labour |
For the operations shared by all shared entities, see Shared entities API.
API methods
Create a row
POST /manufacturing/v1/parts-and-labour/insert
Records a new row and returns its Pulse identifier. If a row with the same key already exists, it is updated.
Request
POST /manufacturing/v1/parts-and-labour/insert
Content-Type: application/json
{
"workOrder": "WO-1001",
"category": "labour",
"item": "CREW-A",
"plannedQuantity": 2,
"unit": "h",
"plannedAmount": 90
}
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
workOrder |
string | yes | Business code of an existing work order. |
category |
string | yes | Category of the item. |
item |
string | yes | Business code of the item. |
lot |
string or null | for materials tracked by lot | Business code of the lot. |
plannedQuantity |
number or null | see Planned and actual | Planned quantity. |
actualQuantity |
number or null | see Planned and actual | Quantity actually used. |
unit |
string | yes | Unit of the quantities. |
plannedAmount |
number or null | no | Planned cost, as a total. |
actualAmount |
number or null | no | Actual cost, as a total. |
at |
string or null | no | When the item was used. |
Update a row
PUT /manufacturing/v1/parts-and-labour/update
Updates an existing row. The row is identified by workOrder, category, item, and lot, and must already exist.
Request
PUT /manufacturing/v1/parts-and-labour/update
Content-Type: application/json
{
"workOrder": "WO-1001",
"category": "labour",
"item": "CREW-A",
"plannedQuantity": 2,
"actualQuantity": 2.5,
"unit": "h",
"plannedAmount": 90,
"actualAmount": 112.5,
"at": "2026-09-10T11:40:00+02:00"
}
Parameters
The parameters are the same as for creating a row.
Patch a row
PATCH /manufacturing/v1/parts-and-labour/patch
Partially updates an existing row.
The row is identified by workOrder, category, item, and lot in the properties object. Send lot even when the row has none, as null. Fields you leave out keep their current values.
Request
PATCH /manufacturing/v1/parts-and-labour/patch
Content-Type: application/json
{
"properties": {
"workOrder": "WO-1001",
"category": "labour",
"item": "CREW-A",
"lot": null,
"actualQuantity": 2.5,
"actualAmount": 112.5
}
}
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
properties |
object | yes | Fields included in the partial update. |
properties.workOrder |
string | yes | Work order of the row to update. |
properties.category |
string | yes | Category of the row to update. |
properties.item |
string | yes | Item of the row to update. |
properties.lot |
string or null | yes | Lot of the row to update, or null. |
properties.{field} |
no | Any other field of the row. |
Retrieve a row
GET /manufacturing/v1/parts-and-labour/select
Returns the row identified by its key. If there is no such row, the response is empty.
Request
GET /manufacturing/v1/parts-and-labour/select?workOrder=WO-1001&category=labour&item=CREW-A
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
workOrder |
string | yes | Work order of the row. |
category |
string | yes | Category of the row. |
item |
string | yes | Item of the row. |
lot |
string | no | Lot of the row, if it has one. |
List rows
GET /manufacturing/v1/parts-and-labour/query
Returns rows matching the supplied filters.
Request
GET /manufacturing/v1/parts-and-labour/query?workOrders=WO-1001
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
workOrders |
string or array of strings | no | Limits results to rows of the specified work orders. |
categories |
string or array of strings | no | Limits results to the specified categories. |
items |
string or array of strings | no | Limits results to the specified items. |
lots |
string or array of strings | no | Limits results to the specified lots. |
from |
string | no | Limits results to rows from this time. |
to |
string | no | Limits results to rows up to this time. |
Delete a row
DELETE /manufacturing/v1/parts-and-labour/delete
Deletes the row identified by its key. If there is no such row, nothing happens.
Request
DELETE /manufacturing/v1/parts-and-labour/delete?workOrder=WO-1001&category=labour&item=CREW-A
Parameters
The parameters are the same as for retrieving a row.