Completing manufacturing orders
Complete a manufacturing order (MO) in one go, or in parts as products are finished. This guide uses the e-bike workshop from Manufacturing orders: plan and record: an MO for 10 City e-bikes, id 19802886.
Finish an order in one go
When all 10 bikes are built and the recipe was followed, set the order to DONE:
curl -X PATCH https://api.katanamrp.com/v1/manufacturing_orders/19802886 \
-H "Authorization: Bearer $KATANA_API_KEY" -H "Content-Type: application/json" \
-d '{"status": "DONE"}'Katana adds the products still to make to stock and consumes each recipe row's total_actual_quantity (or its plan when none is set). The request returns once the order shows DONE.
Report what was really used, then finish
If the floor used 84 bolts instead of the planned 80, record that on the recipe row before setting the order to DONE:
curl -X PATCH https://api.katanamrp.com/v1/manufacturing_order_recipe_rows/113295304 \
-H "Authorization: Bearer $KATANA_API_KEY" -H "Content-Type: application/json" \
-d '{"total_actual_quantity": 84}'Do the same for operation time on manufacturing_order_operation_rows (total_actual_time), then set the order to DONE. Once an order is DONE, its recipe rows' quantities can no longer change.
Finish in parts
On Monday the workshop finishes 4 bikes. Record that step as a production:
curl -X POST https://api.katanamrp.com/v1/manufacturing_order_productions \
-H "Authorization: Bearer $KATANA_API_KEY" -H "Content-Type: application/json" \
-d '{"manufacturing_order_id": 19802886, "completed_quantity": 4, "completed_date": "2026-10-27T15:00:00.000Z"}'With ingredients left out, the production consumes each ingredient's share of the plan for 4 bikes: 4 frames, 4 motors, 4 batteries, 32 bolts, 0.08 kg grease. To record what was really used in this step, send ingredients; they are recorded exactly, and an empty array records no consumption:
{
"manufacturing_order_id": 19802886,
"completed_quantity": 4,
"ingredients": [
{"manufacturing_order_recipe_row_id": 113295301, "quantity": 4, "traceability": [{"batch_id": 3871201, "quantity": "4"}]},
{"manufacturing_order_recipe_row_id": 113295304, "quantity": 34}
]
}Here only the frames and bolts are recorded for this step; motors, batteries and grease are not consumed by it.
The final completion
On Tuesday the last 6 bikes are done. Send the last step with is_final: true to record it and complete the order in one request:
{"manufacturing_order_id": 19802886, "completed_quantity": 6, "is_final": true}If the order can't be set to DONE, for example because the account's inventory settings refuse the consumption, the production is reverted and the request is refused, so the order is never left half-finished.
Undo a completion
DELETE /manufacturing_order_productions/{id} reverts a production of an open order: its products leave stock and its ingredients go back to stock (or back to picked, when ingredient picking is on). To reopen an order that was completed in one go, set its status back to IN_PROGRESS: the completion is reverted. Productions dated in a closed inventory period can't be reverted.
With ingredient picking
When ingredient picking is on, completions consume only picked material, and DONE is refused unless every recipe row is picked up to its quantity. See Picking ingredients.
Updated about 19 hours ago