---
title: "Create a work order from job operations. Each entry in `operations` becomes one work-order operation owning the job operations it lists; every job operation is claimed for this work order, so a later request naming one of them is refused. `status` accepts only `needsReview` (the default) or `approved`."
method: POST
path: "/api/work-orders"
tags: ["Work Order"]
---

# Create a work order from job operations. Each entry in \`operations\` becomes one work-order operation owning the job operations it lists; every job operation is claimed for this work order, so a later request naming one of them is refused. \`status\` accepts only \`needsReview\` (the default) or \`approved\`.

`POST /api/work-orders`

## Request

- Base URL: `https://api.fulcrumpro.com`
- URL: `https://api.fulcrumpro.com/api/work-orders`
- Auth: none declared

## Request body

- WorkOrderCreateDto — A work order to create from job operations: each entry in `operations` becomes one work-order operation owning the job operations it lists.
  - `name` string, nullable — Name of the work order. When omitted, the work order is named by its number.
  - `status` 'needsReview' | 'approved' | 'scheduled' | 'inProgress' | 'complete' | 'cancelled' — Work order status
  - `priority` 'low' | 'moderate' | 'high' — Job priority
  - `productionDueDateUtc` string, date-time, nullable — Production due date. When omitted, the earliest production due date among the jobs is used.
  - `operations` WorkOrderCreateOperationDto[], required — The work-order operations to create, 1 to 50.
    - `additionalInstructions` string, nullable — Instructions shown on the work-order operation.
    - `estimatedSetupTimeSeconds` number, double, nullable — Estimated setup time in seconds. When omitted, it is aggregated from the job operations.
    - `estimatedRunTimeSeconds` number, double, nullable — Estimated run time in seconds. When omitted, it is aggregated from the job operations.
    - `jobOperations` WorkOrderCreateJobOperationDto[], required — The job operations this work-order operation owns, 1 to 500. All must be on the same system operation, and no job operation may appear more than once on the work order. At most 500 job operations may be listed across all operations.
      - `jobId` string, required — Id of the job the operation belongs to.
      - `jobOperationId` string, required — Id of the job operation, as returned by the nestable-jobs list and the work-package manifest.

## Response `200`

The id of the created work order.

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

## Other responses

- `400` — The body was missing or malformed, a status other than needsReview or approved was sent, a job operation was listed twice, a job is not approved, scheduled or in progress, or the operations cannot be grouped as requested.
- `404` — A job operation in the request does not exist.
- `409` — A job operation in the request is already on another work order.

## Changes

- **2026-10-05** `c3bdc499d639` — 8 breaking, 16 warning
  - the `operations` request property's minItems was increased to `1` (media type: application/json-patch+json)
  - the `operations` request property's minItems was increased to `1` (media type: application/json)
  - the `operations` request property's minItems was increased to `1` (media type: text/json)
  - the `operations` request property's minItems was increased to `1` (media type: application/*+json)
  - …20 more
- **2026-10-03** `99282ee7a0b6` — 1 info
  - endpoint added

[Operation history](https://skmtc.dev/fulcrumpro/apis/fulcrum-publicapi/changes/api/work-orders/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/2ef5c78c2bcb?raw)
