---
title: "Completes a job operation, optionally recording a final completed quantity and scrap."
method: POST
path: "/api/jobs/{jobId}/items-to-make/{itemToMakeId}/operations/{operationId}/complete"
tags: ["Job Item To Make Operation"]
---

# Completes a job operation, optionally recording a final completed quantity and scrap.

`POST /api/jobs/{jobId}/items-to-make/{itemToMakeId}/operations/{operationId}/complete`

Closes any open timers on the operation, marks setup and run complete, readies downstream
operations, and — when this is the item's final operation, or a split operation that
produces finished goods — receives finished goods into inventory (unless
addItemsToInventory is false), completing the item on its final operation and the job once
every item is done. Quantity made is added on top of quantity recorded earlier, so a
caller that already reported production via add-quantity-completed should pass zero here.

## Path parameters

- `jobId` string, required
- `itemToMakeId` string, required
- `operationId` string, required

## Request body

- ItemsToMakeOperationsCompleteJobOperationRequest — Request to complete a job operation
  - `quantityMade` number, double — Additional quantity completed as part of this completion, added on top of any quantity already recorded on the operation. May be zero when all quantity was recorded earlier (for example via add-quantity-completed).
  - `quantityScrapped` number, double — Quantity scrapped on this operation.
  - `scrapReasonId` string, nullable — Id of the scrap reason to record with the scrapped quantity. Optional.
  - `locationId` string, nullable — Id of the inventory location to receive finished goods into when this completion finishes the item (last operation). Optional; when omitted the shop's default location is used.
  - `lotNumber` string, nullable — Lot number for finished goods when the item is lot tracked. Required when this completion finishes a lot-tracked item and inventory will be created; when omitted in that case for a completion that adds quantity, a lot number is generated.
  - `expirationDate` string, date-time, nullable — Expiration date for the finished-goods lot. Optional.
  - `addItemsToInventory` boolean — Whether finished goods are added to inventory when this completion finishes the item. Defaults to true.

## Response `200`

Operation completed

- ItemsToMakeOperationsCompleteJobOperationResponse — Response after completing a job operation
  - `jobId` string, required — The ID of the job
  - `itemToMakeId` string, required — The ID of the item to make
  - `operationId` string, required — The ID of the completed operation
  - `quantityMadeThisCompletion` number, double, required — The quantity added by this completion
  - `totalQuantityCompleted` number, double, required — The operation's total completed quantity after this completion
  - `quantityScrapped` number, double, required — The quantity scrapped recorded by this completion
  - `operationStatus` string, required — The operation's status after this action
  - `inventoryUpdated` boolean, required — Whether finished goods were added to inventory by this completion
  - `createdInventoryTransactionId` string, nullable — The ID of the inventory transaction created by this completion, when inventory was updated

## Other responses

- `400` — Validation issues with input, or the operation cannot be completed
- `404` — Job, item to make, or operation did not exist

---

[API](https://skmtc.net/fulcrumpro/apis/fulcrum-publicapi.md) · [All operations](https://skmtc.net/fulcrumpro/apis/fulcrum-publicapi/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/fulcrumpro/fulcrum-publicapi/revisions/a41e60b375bc/schema)
