---
title: "Creates a full routing operation for a sales order part line item"
method: POST
path: "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/operations"
tags: ["Sales Order Part Line Item Full Routing"]
---

# Creates a full routing operation for a sales order part line item

`POST /api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/operations`

## Request

- Base URL: `https://api.fulcrumpro.com`
- URL: `https://api.fulcrumpro.com/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/operations`
- Auth: none declared

## Path parameters

- `salesOrderId` string, required
- `lineItemId` string, required
- `routingId` string, required

## Request body

- ItemRoutingOperationCreateDto: A routing operation (step)
  - `systemOperationId` string, required: System Operation Id
  - `order` integer, nullable: The order of this operation. Operations with the same order are expected to run in parallel
  - `outsideProcessingOperation` ItemRoutingOutsideProcessingOperationDto: Defines outside processing fields
    - `outsideProcessingTime` ItemRoutingOperationTime: Operation time and type
      - `time` number, double: Time or units of this operation
      - `option` 'fixedSeconds' | 'fixedMinutes' | 'fixedHours' | 'fixedDays' | 'secondsPerUnit' | 'minutesPerUnit' | 'hoursPerUnit' | 'daysPerUnit' | 'unitsPerHour': The time unit or option used in operation times
    - `outsideProcessingCost` ItemRoutingOutsideProcessingOperationCost: Outside processing operation cost
      - `costOption` 'fixed' | 'perUnit': The cost option for the outside processing operation
      - `fixedCost` number, double, nullable: The fixed total cost for the operation
      - `perUnitCost` number, double, nullable: The cost per unit for the operation
    - `selectedVendorId` string, nullable: Outside processing vendor
    - `costBreaks` ItemRoutingOutsideProcessingCostBreakPointDto[], nullable: Quantity cost breaks above the base per-unit cost (`outsideProcessingCost.perUnitCost`), ordered by quantity. The base per-unit cost applies below the lowest break quantity. On write: omit to keep the step's cost breaks, send `null` or `[]` to remove them all, or send a list to replace them. Only valid with a per-unit outside processing cost.
      - `quantity` integer: The production quantity at which this cost per unit becomes active. Must be greater than 1 (the base per-unit cost covers quantity 1).
      - `price` number, double, nullable: The cost per unit at this quantity. Required.
  - `operation` ItemRoutingNormalOperationDto: Defines non-outside-processing fields
    - `setupTime` ItemRoutingOperationTime: Operation time and type
      - `time` number, double: Time or units of this operation
      - `option` 'fixedSeconds' | 'fixedMinutes' | 'fixedHours' | 'fixedDays' | 'secondsPerUnit' | 'minutesPerUnit' | 'hoursPerUnit' | 'daysPerUnit' | 'unitsPerHour': The time unit or option used in operation times
    - `laborTime` ItemRoutingOperationTime: Operation time and type
      - `time` number, double: Time or units of this operation
      - `option` 'fixedSeconds' | 'fixedMinutes' | 'fixedHours' | 'fixedDays' | 'secondsPerUnit' | 'minutesPerUnit' | 'hoursPerUnit' | 'daysPerUnit' | 'unitsPerHour': The time unit or option used in operation times
    - `machineTime` ItemRoutingOperationTime: Operation time and type
      - `time` number, double: Time or units of this operation
      - `option` 'fixedSeconds' | 'fixedMinutes' | 'fixedHours' | 'fixedDays' | 'secondsPerUnit' | 'minutesPerUnit' | 'hoursPerUnit' | 'daysPerUnit' | 'unitsPerHour': The time unit or option used in operation times
    - `anyEquipment` boolean: Specifies that any equipment associated with this operation can be used
    - `selectedEquipmentIds` string[]: List of equipment ids selected from equipment associated with this operation
    - `isNestable` boolean: Indicate if this operation is nestable.
  - `leadDays` integer, nullable: Lead days. Will default to zero if not provided.
  - `unattended` boolean, nullable: If `true`, the run portion of this step is unattended by an operator.
  - `instructions` string, nullable: Operation instructions. Will default to the instructions defined on the operation when not provided.
  - `inputMaterialIds` string[], nullable: The ids on the input material to associate to this operation. This value should be the Id from the response from items/{itemId}/routing/input-materials/list

## Response `200`

OK

- CreatedResponseDto: Response for a created record
  - `id` string, required: The id of the created record

## Changes

- **2026-10-31** `c9e6f41852d1`: 4 info
  - added the new optional request property `outsideProcessingOperation/costBreaks` (media type: application/json-patch+json)
  - added the new optional request property `outsideProcessingOperation/costBreaks` (media type: application/json)
  - added the new optional request property `outsideProcessingOperation/costBreaks` (media type: text/json)
  - added the new optional request property `outsideProcessingOperation/costBreaks` (media type: application/*+json)
- **2026-10-05** `c3bdc499d639`: 4 breaking
  - the `inputMaterialIds` request property's minItems was increased to `1` (media type: application/json-patch+json)
  - the `inputMaterialIds` request property's minItems was increased to `1` (media type: application/json)
  - the `inputMaterialIds` request property's minItems was increased to `1` (media type: text/json)
  - the `inputMaterialIds` request property's minItems was increased to `1` (media type: application/*+json)
- **2026-01-12** `30a13c1e996e`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/fulcrumpro/apis/fulcrum-publicapi/changes/api/sales-orders/:salesOrderId/part-line-items/:lineItemId/routing/:routingId/operations/post.md)

---

[API](https://skmtc.dev/fulcrumpro/apis/fulcrum-publicapi.md) - [All operations](https://skmtc.dev/fulcrumpro/apis/fulcrum-publicapi/llms.txt) - [OpenAPI document](https://skmtc.dev/fulcrumpro/apis/fulcrum-publicapi/revisions/c9e6f41852d1?raw)
