{
  "openapi": "3.0.4",
  "info": {
    "title": "Fulcrum PublicAPI",
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://api.fulcrumpro.com"
    }
  ],
  "paths": {
    "/api/accounting-codes": {
      "post": {
        "tags": [
          "Accounting Code"
        ],
        "summary": "Create an accounting code",
        "operationId": "CreateAccountingCode",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagCreateBaseDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagCreateBaseDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagCreateBaseDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagCreateBaseDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Accounting code created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/accounting-codes/{id}": {
      "get": {
        "tags": [
          "Accounting Code"
        ],
        "summary": "Get an accounting code.",
        "operationId": "GetAccountingCode",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The accounting code for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "404": {
            "description": "Accounting code did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/accounting-codes/list": {
      "post": {
        "tags": [
          "Accounting Code"
        ],
        "summary": "Find accounting codes based on search parameters.",
        "operationId": "ListAccountingCode",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of accounting codes matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/alerts/list": {
      "post": {
        "tags": [
          "Alert"
        ],
        "summary": "Find the job-tracking alerts that are currently raised, on job operations and work-order\noperations, based on search parameters. An alert raised on a job operation that is grouped into a\nwork order is stored against the work-order operation, so it is a `workOrder` alert: filter\non `workOrderIds`, not `jobIds`, to find it. Cleared alerts are not returned. Alerts on a\ndeleted job or work order are not returned. Sort by `raisedAtUtc` or `id`, ignoring case. Alerts\nthat tie on `raisedAtUtc` are ordered by `id` ascending. Without a sort field, results\nare ordered by `raisedAtUtc`, oldest first, and the sort direction is honored.",
        "operationId": "ListAlert",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AlertRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AlertRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of active alerts matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AlertDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AlertDto"
                  }
                }
              }
            }
          },
          "400": {
            "description": "The sort field, paging or filter parameters were invalid"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/attachments": {
      "post": {
        "tags": [
          "Attachment"
        ],
        "summary": "Create an attachment",
        "operationId": "CreateAttachment",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "required": [
                  "Detail.IsNoteAttachment",
                  "File"
                ],
                "type": "object",
                "properties": {
                  "File": {
                    "type": "string",
                    "description": "The file itself",
                    "format": "binary"
                  },
                  "Detail.Owner.Type": {
                    "$ref": "#/components/schemas/CommonEnumOwnerTypeCreateEnum"
                  },
                  "Detail.Owner.Id": {
                    "maxLength": 36,
                    "minLength": 24,
                    "type": "string",
                    "description": "The primary owner id of this attachment."
                  },
                  "Detail.Description": {
                    "maxLength": 200,
                    "minLength": 1,
                    "type": "string",
                    "description": "File description"
                  },
                  "Detail.IsNoteAttachment": {
                    "type": "boolean",
                    "description": "Indicates whether this attachment is bound to a note."
                  },
                  "Detail.Parent.Type": {
                    "$ref": "#/components/schemas/CommonEnumOwnerTypeCreateEnum"
                  },
                  "Detail.Parent.Id": {
                    "maxLength": 36,
                    "minLength": 24,
                    "type": "string",
                    "description": "The primary owner id of this attachment."
                  },
                  "Detail.Metadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string",
                      "nullable": true
                    },
                    "description": "Metadata to associate to the attachment."
                  }
                }
              },
              "encoding": {
                "File": {
                  "style": "form"
                },
                "Detail.Owner.Type": {
                  "style": "form"
                },
                "Detail.Owner.Id": {
                  "style": "form"
                },
                "Detail.Description": {
                  "style": "form"
                },
                "Detail.IsNoteAttachment": {
                  "style": "form"
                },
                "Detail.Parent.Type": {
                  "style": "form"
                },
                "Detail.Parent.Id": {
                  "style": "form"
                },
                "Detail.Metadata": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "403": {
            "description": "A user-bound token may not edit the attachment's owner or parent"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true
      }
    },
    "/api/attachments/remote": {
      "post": {
        "tags": [
          "Attachment"
        ],
        "summary": "Create an attachment based on a remote data endpoint.",
        "operationId": "CreateRemoteAttachment",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRemoteCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRemoteCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRemoteCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRemoteCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/attachments/{attachmentId}": {
      "delete": {
        "tags": [
          "Attachment"
        ],
        "summary": "Delete a specific attachment",
        "operationId": "DeleteAttachment",
        "parameters": [
          {
            "name": "attachmentId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Attachment did not exist"
          },
          "410": {
            "description": "Attachment record had an invalid Id value"
          }
        }
      },
      "get": {
        "tags": [
          "Attachment"
        ],
        "summary": "Get a specific attachment",
        "operationId": "GetAttachment",
        "parameters": [
          {
            "name": "attachmentId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The attachment for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentDto"
                }
              }
            }
          },
          "404": {
            "description": "Attachment did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/attachments/{attachmentId}/download": {
      "get": {
        "tags": [
          "Attachment"
        ],
        "summary": "Download a specific attachment",
        "operationId": "DownloadAttachment",
        "parameters": [
          {
            "name": "attachmentId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "fileName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The attachment for the given id"
          },
          "404": {
            "description": "Attachment did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/attachments/download": {
      "post": {
        "tags": [
          "Attachment"
        ],
        "summary": "Download attachment(s) for a given filter in ZIP format",
        "operationId": "DownloadAttachments",
        "parameters": [
          {
            "name": "fileName",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRequestFindParameters"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The attachments for the given filter"
          },
          "400": {
            "description": "File extension not supported"
          },
          "404": {
            "description": "No attachments exist"
          }
        }
      }
    },
    "/api/attachments/list": {
      "post": {
        "tags": [
          "Attachment"
        ],
        "summary": "Find attachments based on search parameters.",
        "operationId": "ListAttachment",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/AttachmentRequestFindParameters"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "List of attachments matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AttachmentDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AttachmentDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/attachments/certification": {
      "post": {
        "tags": [
          "Attachment Certification"
        ],
        "summary": "Create a certification attachment",
        "operationId": "CreateCertificationAttachment",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "required": [
                  "File"
                ],
                "type": "object",
                "properties": {
                  "File": {
                    "type": "string",
                    "description": "The file itself",
                    "format": "binary"
                  },
                  "Detail.Owner.Type": {
                    "$ref": "#/components/schemas/CommonEnumOwnerTypeCertificationEnum"
                  },
                  "Detail.Owner.Id": {
                    "maxLength": 36,
                    "minLength": 24,
                    "type": "string",
                    "description": "The primary owner id of this attachment."
                  },
                  "Detail.Description": {
                    "maxLength": 200,
                    "minLength": 1,
                    "type": "string",
                    "description": "File description"
                  },
                  "Detail.Metadata": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string",
                      "nullable": true
                    },
                    "description": "Metadata to associate to the attachment."
                  },
                  "Detail.LotId": {
                    "maxLength": 24,
                    "minLength": 24,
                    "type": "string",
                    "description": "Lot id."
                  }
                }
              },
              "encoding": {
                "File": {
                  "style": "form"
                },
                "Detail.Owner.Type": {
                  "style": "form"
                },
                "Detail.Owner.Id": {
                  "style": "form"
                },
                "Detail.Description": {
                  "style": "form"
                },
                "Detail.Metadata": {
                  "style": "form"
                },
                "Detail.LotId": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/validate": {
      "get": {
        "tags": [
          "Auth"
        ],
        "summary": "Get details about a token used to authenticate the request",
        "operationId": "GetValidate",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthValidateResultDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthValidateResultDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/capas": {
      "post": {
        "tags": [
          "CAPAs"
        ],
        "summary": "Create a new CAPA in the New status.",
        "operationId": "CreateCapa",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CAPACapaCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CAPACapaCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CAPACapaCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CAPACapaCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "CAPA created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Quality-CAPA-Edit CAPA"
        ]
      }
    },
    "/api/capas/{capaId}": {
      "get": {
        "tags": [
          "CAPAs"
        ],
        "summary": "Get a specific CAPA by id.",
        "operationId": "GetCapa",
        "parameters": [
          {
            "name": "capaId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The CAPA for the given id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CAPACapaDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CAPACapaDto"
                }
              }
            }
          },
          "404": {
            "description": "A CAPA with that id does not exist."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-CAPA-View CAPA"
        ]
      }
    },
    "/api/capas/list": {
      "post": {
        "tags": [
          "CAPAs"
        ],
        "summary": "Finds CAPAs based on search parameters",
        "operationId": "ListCAPA",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CAPARequestCapaListParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CAPARequestCapaListParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CAPARequestCapaListParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CAPARequestCapaListParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoCAPACapaDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoCAPACapaDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-CAPA-View CAPA"
        ]
      }
    },
    "/api/change-orders": {
      "post": {
        "tags": [
          "Change Order"
        ],
        "summary": "Create a change order. `originalRevisionItem.id` is required and `disposition.id`,\nwhen sent, must resolve to a change order disposition. The change order's sequential number is\nassigned server-side, `requestedUtc` defaults to the account's current local day at UTC\nmidnight, and a change order created Completed is stamped with `completedUtc`. Where change\norder updates are enabled, the server seeds `impactedRecords` from every open document\nstill carrying the original revision — a sales order or quote line with no `disposition`\nyet, a complete job as `Finish As Is`, any other job as `Revision` — and applies the\naccount's default change order task template, counting due dates from the UTC day of\n`requestedUtc`, sent or defaulted. The response carries the seeded\n`impactedRecords` but not the tasks, which the task endpoints list under the change\norder's id. Creates are not idempotent: a retried request creates a second change order.",
        "operationId": "CreateChangeOrder",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrderSaveDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrderSaveDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrderSaveDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrderSaveDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The created change order",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChangeOrderDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ChangeOrderDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/change-orders/{id}": {
      "delete": {
        "tags": [
          "Change Order"
        ],
        "summary": "Delete a change order and the tasks filed under it, with their attachments. A change order\nthat has been applied — one carrying a record already rolled to the new revision — cannot be\ndeleted.",
        "operationId": "DeleteChangeOrder",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Change order did not exist"
          },
          "400": {
            "description": "The change order has already been applied"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      },
      "get": {
        "tags": [
          "Change Order"
        ],
        "summary": "Get a change order by id, including the sales orders, jobs and quotes it impacts. Its tasks\nare not embedded — read them from the change order task list.",
        "operationId": "GetChangeOrder",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The change order for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChangeOrderDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ChangeOrderDto"
                }
              }
            }
          },
          "404": {
            "description": "Change order did not exist"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      },
      "put": {
        "tags": [
          "Change Order"
        ],
        "summary": "Update a change order. A full replacement of the header: omitted fields are cleared, except\n`notificationsEnabled`, where null keeps the stored value. The change order's impacted\nrecords and tasks are never written here — both are maintained elsewhere, and a concurrent\nchange to either stands.",
        "operationId": "UpdateChangeOrder",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrderSaveDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrderSaveDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrderSaveDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrderSaveDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The updated change order",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChangeOrderDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ChangeOrderDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Change order did not exist"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/change-orders/list": {
      "post": {
        "tags": [
          "Change Order"
        ],
        "summary": "Finds change orders based on search parameters. Rows carry the change order header without\nits impacted records; read one change order to get those. Sorts on `number`,\n`status`, `requestedUtc`, `approvedUtc`, `completedUtc`,\n`dueDateUtc`, `createdUtc`, `modifiedUtc`, `customer`,\n`disposition` or `detail`; an unrecognised sort field falls back to\n`requestedUtc` ascending.",
        "operationId": "ListChangeOrders",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrdersListParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrdersListParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrdersListParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeOrdersListParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The matching change orders",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoChangeOrderSummaryDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoChangeOrderSummaryDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/chart-of-accounts/{id}": {
      "get": {
        "tags": [
          "Chart Of Accounts"
        ],
        "summary": "Get an account class.",
        "operationId": "GetChartOfAccounts",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The account for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "404": {
            "description": "Account did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/chart-of-accounts/list": {
      "post": {
        "tags": [
          "Chart Of Accounts"
        ],
        "summary": "Find accounts based on search parameters.",
        "operationId": "ListChartOfAccounts",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of accounts matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/companies/{companyId}": {
      "get": {
        "tags": [
          "Company Info"
        ],
        "summary": "Get info for a specific company.",
        "operationId": "GetCompanyInfo",
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The info for the given company id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyInfoDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyInfoDto"
                }
              }
            }
          },
          "404": {
            "description": "Company did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/companies/list": {
      "post": {
        "tags": [
          "Company Info"
        ],
        "summary": "Find company information based on search parameters.",
        "operationId": "ListCompanyInfo",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CompanyInfoRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompanyInfoRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CompanyInfoRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CompanyInfoRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of company information sets matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CompanyInfoDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CompanyInfoDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/custom-fields/{id}": {
      "get": {
        "tags": [
          "Custom Field"
        ],
        "summary": "Get a custom field.",
        "operationId": "GetCustomField",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The custom field for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldDto"
                }
              }
            }
          },
          "404": {
            "description": "Custom field did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/custom-fields/list": {
      "post": {
        "tags": [
          "Custom Field"
        ],
        "summary": "Find custom fields based on search parameters.",
        "operationId": "ListCustomField",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of custom fields matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomFieldDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomFieldDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/customers": {
      "post": {
        "tags": [
          "Customer"
        ],
        "summary": "Create a new customer",
        "operationId": "CreateCustomer",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Customer created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Customer-Customers-Edit Customer"
        ]
      }
    },
    "/api/customers/{customerId}": {
      "delete": {
        "tags": [
          "Customer"
        ],
        "summary": "Delete a specific customer",
        "operationId": "DeleteCustomer",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Customer did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Customer"
        ],
        "summary": "Get a specific customer",
        "operationId": "GetCustomer",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The customer for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerDto"
                }
              }
            }
          },
          "404": {
            "description": "Customer did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Customer-Customers-View Customer"
        ]
      },
      "patch": {
        "tags": [
          "Customer"
        ],
        "summary": "Partially update a customer",
        "operationId": "PatchCustomer",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Customer item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch could not be applied — the patch document is malformed (an unknown path, an unsupported operation, or a value the target field cannot hold), the patched name failed validation, or the patched customerTierId names no customer tier"
          },
          "404": {
            "description": "Customer did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Customer-Customers-Edit Customer"
        ]
      },
      "put": {
        "tags": [
          "Customer"
        ],
        "summary": "Update a specific customer",
        "operationId": "UpdateCustomer",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The customer for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerDto"
                }
              }
            }
          },
          "404": {
            "description": "Customer did not exist"
          }
        }
      }
    },
    "/api/customers/list": {
      "post": {
        "tags": [
          "Customer"
        ],
        "summary": "Find customers based on search parameters.",
        "operationId": "ListCustomer",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of customers matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Customer-Customers-View Customer"
        ]
      }
    },
    "/api/customer-tiers/{id}": {
      "get": {
        "tags": [
          "Customer Tier"
        ],
        "summary": "Get a customer tier.",
        "operationId": "GetCustomerTier",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The customer tier for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerTierDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerTierDto"
                }
              }
            }
          },
          "404": {
            "description": "Customer tier did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Customer-Customer Tiers-View Customer Tier"
        ]
      }
    },
    "/api/customer-tiers/list": {
      "post": {
        "tags": [
          "Customer Tier"
        ],
        "summary": "Find customer tiers based on search parameters.",
        "operationId": "ListCustomerTier",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerTierRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerTierRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerTierRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerTierRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of customer tiers matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerTierDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerTierDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Customer-Customer Tiers-View Customer Tier"
        ]
      }
    },
    "/api/customers/{customerId}/addresses": {
      "post": {
        "tags": [
          "Customer Address"
        ],
        "summary": "Create a new customer address",
        "operationId": "CreateCustomerAddress",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CommonAddressCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommonAddressCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CommonAddressCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CommonAddressCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Customer address created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Customer with the given id did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Customer-Customers-Edit Customer"
        ]
      }
    },
    "/api/customers/{customerId}/addresses/{customerAddressId}": {
      "delete": {
        "tags": [
          "Customer Address"
        ],
        "summary": "Delete a specific customer address",
        "operationId": "DeleteCustomerAddress",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "customerAddressId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Customer address did not exist"
          },
          "404": {
            "description": "The customer did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Customer Address"
        ],
        "summary": "Get a specific customer address",
        "operationId": "GetCustomerAddress",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "customerAddressId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The customer address for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerAddressDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerAddressDto"
                }
              }
            }
          },
          "404": {
            "description": "Customer did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Customer-Customers-View Customer"
        ]
      },
      "put": {
        "tags": [
          "Customer Address"
        ],
        "summary": "Update a specific customer address",
        "operationId": "UpdateCustomerAddress",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "customerAddressId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerAddressUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerAddressUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerAddressUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerAddressUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The customer address for the given id"
          },
          "404": {
            "description": "Customer did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Customer-Customers-Edit Customer"
        ]
      }
    },
    "/api/customers/{customerId}/addresses/list": {
      "post": {
        "tags": [
          "Customer Address"
        ],
        "summary": "Get a list of addresses for a customer",
        "operationId": "ListCustomerAddress",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of addresses for the given customer id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerAddressDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerAddressDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The customer did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Customer-Customers-View Customer"
        ]
      }
    },
    "/api/customers/{customerId}/contacts": {
      "post": {
        "tags": [
          "Customer Contact"
        ],
        "summary": "Create a new customer contact",
        "operationId": "CreateCustomerContact",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerContactCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerContactCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerContactCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerContactCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Customer contact created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Customer with the given id did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Customer-Customers-Edit Customer"
        ]
      }
    },
    "/api/customers/{customerId}/contacts/{contactId}": {
      "delete": {
        "tags": [
          "Customer Contact"
        ],
        "summary": "Delete a specific customer contact",
        "operationId": "DeleteCustomerContact",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "The id of the customer to modify contacts for",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "path",
            "description": "The id of the customer contact.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Customer contact did not exist"
          },
          "404": {
            "description": "The customer did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Customer Contact"
        ],
        "summary": "Get a specific customer contact",
        "operationId": "GetCustomerContact",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "The id of the customer to modify contacts for",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "path",
            "description": "The id of the customer contact.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The customer contact for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerContactDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerContactDto"
                }
              }
            }
          },
          "404": {
            "description": "Customer or contact did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Customer-Customers-View Customer"
        ]
      },
      "put": {
        "tags": [
          "Customer Contact"
        ],
        "summary": "Update a specific customer contact",
        "operationId": "UpdateCustomerContact",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "The id of the customer to modify contacts for",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "path",
            "description": "The id of the customer contact.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The new data to apply to the given index",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerContactUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerContactUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerContactUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerContactUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The customer for the given id"
          },
          "404": {
            "description": "Customer did not exist or no contact existed at the specified index"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Customer-Customers-Edit Customer"
        ]
      }
    },
    "/api/customers/{customerId}/contacts/list": {
      "post": {
        "tags": [
          "Customer Contact"
        ],
        "summary": "Get a list of contacts for a customer",
        "operationId": "ListCustomerContact",
        "parameters": [
          {
            "name": "customerId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of contacts for the given customer id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerContactDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerContactDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The customer did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Customer-Customers-View Customer"
        ]
      }
    },
    "/api/departments": {
      "post": {
        "tags": [
          "Department"
        ],
        "summary": "Create a department.",
        "operationId": "CreateDepartment",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Department created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/departments/{id}": {
      "get": {
        "tags": [
          "Department"
        ],
        "summary": "Get a department.",
        "operationId": "GetDepartment",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The department for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepartmentDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DepartmentDto"
                }
              }
            }
          },
          "404": {
            "description": "Department did not exist, or the caller may not see it"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      },
      "put": {
        "tags": [
          "Department"
        ],
        "summary": "Update a department.",
        "operationId": "UpdateDepartment",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The updated department",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepartmentDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DepartmentDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Department did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/departments/list": {
      "post": {
        "tags": [
          "Department"
        ],
        "summary": "Find departments based on search parameters. Only the departments the caller may see are returned.",
        "operationId": "ListDepartment",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of departments matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DepartmentDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DepartmentDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      }
    },
    "/api/department-shifts": {
      "post": {
        "tags": [
          "Department Shift"
        ],
        "summary": "Create a shift for a department. `startTime` and `endTime` are 24-hour HHmm times; an end\ntime earlier than the start time is an overnight shift. Each `availableEquipment` entry must be\nequipment in the department and can be listed only once. The server fills `equipmentName` from\nthe equipment, so a client value is ignored. Omitted optional fields take their defaults: no days, 0\nsimultaneous equipment, no maximum daily new jobs and no equipment.",
        "operationId": "CreateDepartmentShift",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Department shift created; the body holds its id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input, a department that does not exist or is deleted,\n            or an `availableEquipment` entry that is null, repeated or not in the department"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/department-shifts/{id}": {
      "delete": {
        "tags": [
          "Department Shift"
        ],
        "summary": "Delete a department shift by id. The shift is soft-deleted: `GET /department-shifts/{id}` still\nreturns it with `deleted` set to true, and lists no longer include it. The latest schedule is\nmarked out of date. Deleting a shift that does not exist, is already deleted or belongs to a department\nat a site the caller does not reach answers 204 and changes nothing.",
        "operationId": "DeleteDepartmentShift",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Department shift deleted"
          },
          "204": {
            "description": "Department shift did not exist or was already deleted"
          },
          "400": {
            "description": "Validation issues with the id"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      },
      "get": {
        "tags": [
          "Department Shift"
        ],
        "summary": "Get a department shift by id. A deleted shift is still returned, with `deleted` set to true.",
        "operationId": "GetDepartmentShift",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The department shift for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepartmentShiftDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DepartmentShiftDto"
                }
              }
            }
          },
          "404": {
            "description": "Department shift did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      },
      "put": {
        "tags": [
          "Department Shift"
        ],
        "summary": "Update a department shift by id. This is a full replacement: every field is saved from the request,\nand an omitted field is cleared to its default, so omitting `days`, `simultaneousEquipment`\nor `availableEquipment` clears them. The shift's department cannot change; a\n`departmentId` in the body is ignored. Each `availableEquipment` entry must be equipment in\nthe shift's department and can be listed only once, and the server fills `equipmentName` from\nthe equipment. The latest schedule is marked out of date.",
        "operationId": "UpdateDepartmentShift",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The updated department shift",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepartmentShiftDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DepartmentShiftDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input, or an `availableEquipment` entry that is\n            null, repeated or not in the shift's department"
          },
          "404": {
            "description": "Department shift did not exist or is deleted"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/department-shifts/list": {
      "post": {
        "tags": [
          "Department Shift"
        ],
        "summary": "Find department shifts based on search parameters. Deleted shifts are not returned.\nSort by `id`, `departmentId`, `name`, `startTime`, `endTime`,\n`unlimitedCapacity`, `maxDailyNewJobs` or `createdUtc`, ignoring case. Shifts that\ntie on the sort field are ordered by `id` ascending. Without a sort field, results are\nordered by creation date, newest first, whatever the sort direction. A shift whose department sits at a site the\ncaller does not reach is not returned.",
        "operationId": "ListDepartmentShift",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DepartmentShiftRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of department shifts matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DepartmentShiftDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DepartmentShiftDto"
                  }
                }
              }
            }
          },
          "400": {
            "description": "The sort field, paging or filter parameters were invalid"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      }
    },
    "/api/equipment": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "summary": "Create a piece of equipment.",
        "operationId": "CreateEquipment",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Equipment created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/equipment/{id}": {
      "get": {
        "tags": [
          "Equipment"
        ],
        "summary": "Get a piece of equipment.",
        "operationId": "GetEquipment",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The equipment for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EquipmentDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/EquipmentDto"
                }
              }
            }
          },
          "404": {
            "description": "Equipment did not exist, or the caller may not see it"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      },
      "put": {
        "tags": [
          "Equipment"
        ],
        "summary": "Update a piece of equipment.",
        "operationId": "UpdateEquipment",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The updated equipment",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EquipmentDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/EquipmentDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Equipment did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/equipment/list": {
      "post": {
        "tags": [
          "Equipment"
        ],
        "summary": "Find equipment based on search parameters.",
        "operationId": "ListEquipment",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of equipment matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EquipmentDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EquipmentDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      }
    },
    "/api/equipment-downtimes": {
      "post": {
        "tags": [
          "Equipment Downtime"
        ],
        "summary": "Create an equipment downtime. `startDateTime` and `endDateTime` are UTC; the end cannot be\nearlier than the start. Each `departments` entry must be a department that exists, listed once,\nand each of its `equipment` entries must be equipment in that department, listed once for it. An\nempty or omitted `equipment` list means the whole department is down. Departments and equipment\nare saved in request order, and the server fills `departmentName` and `equipmentName` from\nthe records, so client values are ignored.",
        "operationId": "CreateEquipmentDowntime",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeSaveDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeSaveDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeSaveDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeSaveDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Equipment downtime created; the body holds its id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input, an end earlier than the start, or a\n            `departments` or `equipment` entry that is null, repeated, not found or not in its\n            department"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Scheduling-Settings-Edit Schedule Settings"
        ]
      }
    },
    "/api/equipment-downtimes/{id}": {
      "delete": {
        "tags": [
          "Equipment Downtime"
        ],
        "summary": "Delete an equipment downtime by id. The downtime is soft-deleted: `GET /equipment-downtimes/{id}`\nstill returns it with `deleted` set to true, and lists no longer include it. Deleting a downtime\nthat does not exist or is already deleted answers 204 and changes nothing.",
        "operationId": "DeleteEquipmentDowntime",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Equipment downtime deleted"
          },
          "204": {
            "description": "Equipment downtime did not exist or was already deleted"
          },
          "400": {
            "description": "Validation issues with the id"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Scheduling-Settings-Edit Schedule Settings"
        ]
      },
      "get": {
        "tags": [
          "Equipment Downtime"
        ],
        "summary": "Get an equipment downtime by id. A deleted downtime is still returned, with `deleted` set to true.",
        "operationId": "GetEquipmentDowntime",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The equipment downtime for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EquipmentDowntimeDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/EquipmentDowntimeDto"
                }
              }
            }
          },
          "404": {
            "description": "Equipment downtime did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      },
      "put": {
        "tags": [
          "Equipment Downtime"
        ],
        "summary": "Update an equipment downtime by id. This is a full replacement: the window and the whole set of\ndepartments and equipment are saved from the request, in request order, so omitting\n`departments` clears them. The same rules as create apply: the end cannot be earlier than the\nstart, each department must exist and be listed once, and each piece of equipment must be in its\ndepartment and be listed once for it. The server fills `departmentName` and\n`equipmentName` from the records.",
        "operationId": "UpdateEquipmentDowntime",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeSaveDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeSaveDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeSaveDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeSaveDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The updated equipment downtime",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EquipmentDowntimeDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/EquipmentDowntimeDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input, an end earlier than the start, or a\n            `departments` or `equipment` entry that is null, repeated, not found or not in its\n            department"
          },
          "404": {
            "description": "Equipment downtime did not exist or is deleted"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Scheduling-Settings-Edit Schedule Settings"
        ]
      }
    },
    "/api/equipment-downtimes/list": {
      "post": {
        "tags": [
          "Equipment Downtime"
        ],
        "summary": "Find equipment downtimes based on search parameters. Deleted downtimes are not returned.\nSort by `id`, `startDateTime`, `endDateTime` or `createdUtc`, ignoring case.\nDowntimes that tie on the sort field are ordered by `id` ascending. Without a sort field,\nresults are ordered by creation date, newest first, whatever the sort direction.",
        "operationId": "ListEquipmentDowntime",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/EquipmentDowntimeRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of equipment downtimes matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EquipmentDowntimeDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EquipmentDowntimeDto"
                  }
                }
              }
            }
          },
          "400": {
            "description": "The sort field, paging or filter parameters were invalid"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      }
    },
    "/api/gauge-codes/{id}": {
      "get": {
        "tags": [
          "Gauge Code"
        ],
        "summary": "Get a gauge code.",
        "operationId": "GetGaugeCode",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The gauge code for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "404": {
            "description": "Gauge code did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/gauge-codes/list": {
      "post": {
        "tags": [
          "Gauge Code"
        ],
        "summary": "Find gauge codes based on search parameters.",
        "operationId": "ListGaugeCode",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of gauge codes matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/grade-codes/{id}": {
      "get": {
        "tags": [
          "Grade Code"
        ],
        "summary": "Get a grade code.",
        "operationId": "GetGradeCode",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The grade code for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "404": {
            "description": "Grade code did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/grade-codes/list": {
      "post": {
        "tags": [
          "Grade Code"
        ],
        "summary": "Find grade codes based on search parameters.",
        "operationId": "ListGradeCode",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of grade codes matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/in-process-tracking-field-types/{id}": {
      "get": {
        "tags": [
          "InProcessTrackingFieldType"
        ],
        "summary": "Get an in process tracking field type",
        "operationId": "GetInProcessTrackingFieldType",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The in process tracking field type for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InProcessTrackingFieldTypeDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InProcessTrackingFieldTypeDto"
                }
              }
            }
          },
          "404": {
            "description": "In process tracking field type did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/in-process-tracking-field-types": {
      "post": {
        "tags": [
          "InProcessTrackingFieldType"
        ],
        "summary": "Lists in process tracking field types",
        "operationId": "ListInProcessTrackingFieldType",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InProcessTrackingFieldTypeRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InProcessTrackingFieldTypeRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InProcessTrackingFieldTypeRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InProcessTrackingFieldTypeRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The in process tracking field types",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InProcessTrackingFieldTypeDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InProcessTrackingFieldTypeDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/inventory/list": {
      "post": {
        "tags": [
          "Inventory"
        ],
        "summary": "Find inventory based on search parameters.",
        "operationId": "ListInventory",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of locations matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InventoryDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InventoryDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/inventory/byItem": {
      "get": {
        "tags": [
          "Inventory"
        ],
        "summary": "Returns on hand counts by item.  Excludes reserved inventory counts by default, but can be included by passing in the ```includeReserved``` query parameter.\nNOTE: If the response does not contain an item identifier, it means there is no quantity on hand.",
        "operationId": "OnHandByItem",
        "parameters": [
          {
            "name": "includeReserved",
            "in": "query",
            "description": "Whether to included reserved inventory into the counts",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "number",
                    "format": "double"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "number",
                    "format": "double"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/inventory/override": {
      "post": {
        "tags": [
          "Inventory"
        ],
        "summary": "Override an inventory's quantity.",
        "operationId": "OverrideInventory",
        "requestBody": {
          "description": "The parameters for the request",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryOverrideDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryOverrideDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryOverrideDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryOverrideDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Inventory override was successfully processed"
          },
          "400": {
            "description": "Validation issues with the request"
          },
          "500": {
            "description": "An unspecified error occurred with the request"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Inventory-Adjust Inventory"
        ]
      }
    },
    "/api/inventory/pick": {
      "post": {
        "tags": [
          "Inventory"
        ],
        "summary": "Pick inventory against a specific item.",
        "operationId": "PickInventory",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryPickDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryPickDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryPickDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryPickDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Inventory transaction processed"
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Inventory-Adjust Inventory"
        ]
      }
    },
    "/api/inventory/availableByItem": {
      "get": {
        "tags": [
          "Inventory"
        ],
        "summary": "Returns quantity available by item. This is the on hand + incoming supply - demand.\nNOTE: If the response does not contain an item identifier, it means there is no quantity on hand.",
        "operationId": "QuantityAvailableByItem",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "number",
                    "format": "double"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "number",
                    "format": "double"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/inventory/receive": {
      "post": {
        "tags": [
          "Inventory"
        ],
        "summary": "Receive inventory for a specific item.",
        "operationId": "ReceiveInventory",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryReceiveDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryReceiveDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryReceiveDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryReceiveDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Inventory transaction processed"
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Inventory-Adjust Inventory"
        ]
      }
    },
    "/api/inventory-events/{inventoryEventId}": {
      "get": {
        "tags": [
          "Inventory Event"
        ],
        "summary": "Get a specific inventory event",
        "operationId": "GetInventoryEvent",
        "parameters": [
          {
            "name": "inventoryEventId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The inventory event for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryEventsInventoryEventDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryEventsInventoryEventDto"
                }
              }
            }
          },
          "404": {
            "description": "Inventory event did not exist, or the caller may not see it"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/inventory-events/list": {
      "post": {
        "tags": [
          "Inventory Event"
        ],
        "summary": "Find inventory events based on search parameters.",
        "operationId": "ListInventoryEvent",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryEventRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryEventRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryEventRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryEventRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of inventory events matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoInventoryEventsInventoryEventDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoInventoryEventsInventoryEventDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/inventory-events/{inventoryEventId}/details": {
      "patch": {
        "tags": [
          "Inventory Event Details"
        ],
        "summary": "Partially update an inventory event's details",
        "operationId": "PatchInventoryEventDetails",
        "parameters": [
          {
            "name": "inventoryEventId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Inventory event details item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryEventDetailsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryEventDetailsDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Inventory event details did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Inventory-Adjust Inventory"
        ]
      },
      "put": {
        "tags": [
          "Inventory Event Details"
        ],
        "summary": "Update a specific inventory event details",
        "operationId": "UpdateInventoryEventDetails",
        "parameters": [
          {
            "name": "inventoryEventId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryEventDetailsUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryEventDetailsUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryEventDetailsUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryEventDetailsUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The inventory event details for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryEventDetailsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryEventDetailsDto"
                }
              }
            }
          },
          "404": {
            "description": "Inventory event details did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Inventory-Adjust Inventory"
        ]
      },
      "get": {
        "tags": [
          "Inventory Event Details"
        ],
        "summary": "Get a specific inventory event",
        "operationId": "GetInventoryEventDetails",
        "parameters": [
          {
            "name": "inventoryEventId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The inventory event details for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryEventDetailsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryEventDetailsDto"
                }
              }
            }
          },
          "404": {
            "description": "Inventory event details did not exist, or the caller may not see the event"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/inventory-lots": {
      "post": {
        "tags": [
          "Inventory Lot"
        ],
        "summary": "Create a new inventory lot.",
        "operationId": "CreateInventoryLot",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryLotCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryLotCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryLotCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryLotCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Item created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Inventory-Adjust Inventory"
        ]
      }
    },
    "/api/inventory-lots/{id}": {
      "get": {
        "tags": [
          "Inventory Lot"
        ],
        "summary": "Get an inventory lot.",
        "operationId": "GetInventoryLot",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The inventory lot for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryLotDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InventoryLotDto"
                }
              }
            }
          },
          "404": {
            "description": "Inventory lot did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/inventory-lots/list": {
      "post": {
        "tags": [
          "Inventory Lot"
        ],
        "summary": "Find inventory lots based on search parameters.",
        "operationId": "ListInventoryLot",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryLotRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryLotRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryLotRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryLotRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of inventory lots matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InventoryLotDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InventoryLotDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/inventory-transactions/list": {
      "post": {
        "tags": [
          "Inventory Transactions"
        ],
        "summary": "Finds inventory transactions based on search parameters",
        "operationId": "ListInventoryTransactions",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryTransactionsListParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryTransactionsListParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryTransactionsListParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryTransactionsListParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoInventoryTransactionDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoInventoryTransactionDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/invoices/{invoiceId}": {
      "get": {
        "tags": [
          "Invoice"
        ],
        "summary": "Get a specific invoice",
        "operationId": "GetInvoice",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The invoice for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      },
      "patch": {
        "tags": [
          "Invoice"
        ],
        "summary": "Partially update an invoice",
        "operationId": "PatchInvoice",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Invoice item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-Edit Invoices"
        ]
      },
      "put": {
        "tags": [
          "Invoice"
        ],
        "summary": "Update an invoice",
        "operationId": "UpdateInvoice",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Invoice item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice did not exist"
          }
        }
      }
    },
    "/api/invoices/{invoiceId}/pdf": {
      "get": {
        "tags": [
          "Invoice"
        ],
        "summary": "Download the PDF for an invoice",
        "description": "The document is rendered when you call this, from the\ninvoice's current state and the tenant's PDFs & Emails settings, so it is the same document\nthe product's Download button produces rather than a stored copy of one sent earlier. The date\nformat on the rendered document is presentational and is not part of this contract — read\ndates from the invoice's JSON representation rather than parsing them out of the PDF.",
        "operationId": "GetInvoicePdf",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The invoice PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "No invoice with that id, or the invoice is deleted"
          },
          "500": {
            "description": "The renderer did not produce a usable document"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/list": {
      "post": {
        "tags": [
          "Invoice"
        ],
        "summary": "Find invoices based on search parameters.",
        "operationId": "ListInvoice",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of invoices matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/status": {
      "post": {
        "tags": [
          "Invoice"
        ],
        "summary": "Update an invoice status",
        "operationId": "StatusUpdateInvoice",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRequestUpdateStatus"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRequestUpdateStatus"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRequestUpdateStatus"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRequestUpdateStatus"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Invoice cannot be moved to requested status"
          },
          "404": {
            "description": "Invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-Edit Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/deposit-adjustment-line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Invoice Deposit Adjustment Line Item"
        ],
        "summary": "Get a specific deposit adjustment line item for an invoice",
        "operationId": "GetDepositAdjustmentLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Deposit adjustment line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDepositAdjustmentLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDepositAdjustmentLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice or deposit adjustment line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/deposit-adjustment-line-items/list": {
      "post": {
        "tags": [
          "Invoice Deposit Adjustment Line Item"
        ],
        "summary": "Get a list of deposit adjustment lines items for an invoice",
        "operationId": "ListDepositAdjustmentLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of deposit adjustment line items for the given invoice id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceDepositAdjustmentLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceDepositAdjustmentLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/deposit-line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Invoice Deposit Line Item"
        ],
        "summary": "Get a specific deposit line item for an invoice",
        "operationId": "GetInvoiceDepositLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Deposit line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDepositLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDepositLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice or deposit line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/deposit-line-items/list": {
      "post": {
        "tags": [
          "Invoice Deposit Line Item"
        ],
        "summary": "Get a list of deposit lines items for an invoice",
        "operationId": "ListInvoiceDepositLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of deposit line items for the given invoice id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceDepositLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceDepositLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/discount-line-item": {
      "get": {
        "tags": [
          "Invoice Discount Line Item"
        ],
        "summary": "Get the discount line item for an invoice",
        "operationId": "GetInvoiceDiscountLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Discount line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDiscountLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDiscountLineItemDto"
                }
              }
            }
          },
          "204": {
            "description": "Discount line item does not exist"
          },
          "404": {
            "description": "Invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/fee-line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Invoice Fee Line Item"
        ],
        "summary": "Get a specific fee line item for an invoice",
        "operationId": "GetInvoiceFeeLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceFeeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceFeeLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice or fee line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      },
      "patch": {
        "tags": [
          "Invoice Fee Line Item"
        ],
        "summary": "Partially update a specific fee line item for a purchase order",
        "operationId": "PatchInvoiceFeeLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceFeeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceFeeLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Invoice or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-Edit Invoices"
        ]
      },
      "put": {
        "tags": [
          "Invoice Fee Line Item"
        ],
        "summary": "Update a specific fee line item for an invoice",
        "operationId": "UpdateInvoiceFeeLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceFeeLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceFeeLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceFeeLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceFeeLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceFeeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceFeeLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-Edit Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/fee-line-items/list": {
      "post": {
        "tags": [
          "Invoice Fee Line Item"
        ],
        "summary": "Get a list of fee lines items for an invoice",
        "operationId": "ListInvoiceFeeLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of fee line items for the given invoice id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceFeeLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceFeeLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Invoice Line Item"
        ],
        "summary": "Get a specific line item for an invoice of generic type",
        "operationId": "GetInvoiceLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/line-items/list": {
      "post": {
        "tags": [
          "Invoice Line Item"
        ],
        "summary": "Get a list of lines items for an invoice, regardless of type",
        "operationId": "ListInvoiceLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of all line items for the given invoice id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/notes/list": {
      "post": {
        "tags": [
          "Invoice Note"
        ],
        "summary": "TO BE REMOVED 08/18/2023 - Get a list of notes for an invoice",
        "description": "Use root /note API instead",
        "operationId": "ListInvoiceNote",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of notes for the given invoice id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CommonNoteDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CommonNoteDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The invoice did not exist"
          }
        },
        "deprecated": true
      }
    },
    "/api/invoices/{invoiceId}/part-line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Invoice Part Line Item"
        ],
        "summary": "Get a specific part line item for an invoice",
        "operationId": "GetInvoicePartLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoicePartLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoicePartLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice or line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      },
      "patch": {
        "tags": [
          "Invoice Part Line Item"
        ],
        "summary": "Partially update a specific part line item for an invoice",
        "operationId": "PatchInvoicePartLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoicePartLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoicePartLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Invoice or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-Edit Invoices"
        ]
      },
      "put": {
        "tags": [
          "Invoice Part Line Item"
        ],
        "summary": "Update a specific part line item for an invoice",
        "operationId": "UpdateInvoicePartLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoicePartLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoicePartLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoicePartLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoicePartLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoicePartLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoicePartLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-Edit Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/part-line-items/list": {
      "post": {
        "tags": [
          "Invoice Part Line Item"
        ],
        "summary": "Get a list of part lines items for an invoice",
        "operationId": "ListInvoicePartLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of part line items for the given invoice id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoicePartLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoicePartLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/refund-line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Invoice Refund Line Item"
        ],
        "summary": "Get a specific refund line item for an invoice",
        "operationId": "GetInvoiceRefundLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Refund line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceRefundLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceRefundLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice or line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      },
      "patch": {
        "tags": [
          "Invoice Refund Line Item"
        ],
        "summary": "Partially update a specific refund line item for a purchase order",
        "operationId": "PatchInvoiceRefundLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Refund line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceRefundLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceRefundLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Invoice or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-Edit Invoices"
        ]
      },
      "put": {
        "tags": [
          "Invoice Refund Line Item"
        ],
        "summary": "Update a specific refund line item for an invoice",
        "operationId": "UpdateInvoiceRefundLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRefundLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRefundLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRefundLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceRefundLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Refund line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceRefundLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceRefundLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-Edit Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/refund-line-items/list": {
      "post": {
        "tags": [
          "Invoice Refund Line Item"
        ],
        "summary": "Get a list of refund lines items for an invoice",
        "operationId": "ListInvoiceRefundLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of refund line items for the given invoice id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceRefundLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceRefundLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/shipping-charge-line-item": {
      "get": {
        "tags": [
          "Invoice Shipping Charge Line Item"
        ],
        "summary": "Get the shipping charge line item for an invoice",
        "operationId": "GetInvoiceShippingChargeLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Shipping charge line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceShippingChargeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceShippingChargeLineItemDto"
                }
              }
            }
          },
          "204": {
            "description": "Shipping charge line item does not exist"
          },
          "404": {
            "description": "Invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/tax-line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Invoice Tax Line Item"
        ],
        "summary": "Get a specific tax line item for an invoice",
        "operationId": "GetInvoiceTaxLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tax line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceTaxLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceTaxLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Invoice or tax line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/invoices/{invoiceId}/tax-line-items/list": {
      "post": {
        "tags": [
          "Invoice Tax Line Item"
        ],
        "summary": "Get a list of tax lines items for an invoice",
        "operationId": "ListInvoiceTaxLineItem",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of tax line items for the given invoice id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceTaxLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceTaxLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The invoice did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/items/{itemId}/revision": {
      "post": {
        "tags": [
          "Item"
        ],
        "summary": "Add a revision to an item",
        "operationId": "AddRevisionItem",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestAddRevision"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestAddRevision"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestAddRevision"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestAddRevision"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Item cannot be revised"
          },
          "404": {
            "description": "Item did not exist"
          },
          "409": {
            "description": "Item revision already exists"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items": {
      "post": {
        "tags": [
          "Item"
        ],
        "summary": "Create a new item",
        "operationId": "CreateItem",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Item created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/material": {
      "post": {
        "tags": [
          "Item"
        ],
        "summary": "Create a new item cut from an activated material shape. The shape determines the item's material\nthickness, material form and length unit, so those are not sent on the request — select the shape that\ncarries the combination you want. The item is always created as a Buy item measured in Pieces, its\nnumber is generated from the shape and the dimensions supplied (e.g. `Steel A36 Sheet 1/4\": 48\"x120\"`),\nand its weight is calculated from the shape's density.\n            \nThe shape must already be activated for the shop. An id that exists only in the materials database is\nrejected with a 404 — activate it first with the Material Activate endpoint. This endpoint never\nactivates a shape, because activating one also un-archives every existing non-remnant item that uses it.\n            \nA material item's number is derived rather than caller-supplied, so the same shape and dimensions always\nresolve to the same item. If that item already exists it is returned as-is instead of a duplicate being\ncreated, and if it was archived it is un-archived — meaning a successful response may carry the id of an\nitem that predates the request. Check whether an item with the expected number already exists if the\ndistinction matters to your integration. The number does not encode remnant state, so\n`isRemnant` is honoured only when a new item is created and is ignored on that collision.",
        "operationId": "CreateMaterialItem",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Material item created, or an existing material item with the same generated number returned",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input, including a width supplied for a linear shape or omitted for a planar one"
          },
          "404": {
            "description": "No activated material shape exists with the given id"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}": {
      "get": {
        "tags": [
          "Item"
        ],
        "summary": "Get a specific item",
        "operationId": "GetItem",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The item for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      },
      "patch": {
        "tags": [
          "Item"
        ],
        "summary": "Partially update an item",
        "operationId": "PatchItem",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      },
      "put": {
        "tags": [
          "Item"
        ],
        "summary": "Update a specific item",
        "operationId": "UpdateItem",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Item did not exist"
          }
        },
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/can-make": {
      "get": {
        "tags": [
          "Item"
        ],
        "summary": "Get the can-make quantities for an item. Returns how much of this item can be produced\nfrom current subcomponent inventory (on-hand and available).",
        "operationId": "GetItemCanMake",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The can-make quantities for the given item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemCanMakeDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemCanMakeDto"
                }
              }
            }
          },
          "404": {
            "description": "Item id provided was not found"
          },
          "400": {
            "description": "Item is not a make item"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/items/{itemId}/costing/unit-cost": {
      "get": {
        "tags": [
          "Item"
        ],
        "summary": "Get the unit cost Fulcrum's BOM costing assigns to an item consumed as a routing input at a given quantity, and the basis it used.",
        "operationId": "GetItemInputUnitCost",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "Id of the item to cost.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "quantity",
            "in": "query",
            "description": "Total quantity of the item consumed, in its inventory unit of measure. Must be greater than zero and at most 2147483647.",
            "required": true,
            "schema": {
              "type": "number",
              "format": "double"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The item's unit cost at the given quantity.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemInputUnitCostDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemInputUnitCostDto"
                }
              }
            }
          },
          "400": {
            "description": "A missing or non-numeric quantity: a validation problem details body, message under `errors.quantity`. A quantity not greater than zero or above 2147483647, a make or make-or-buy item, or a vendor unit of measure conversion too large to cost: an `ErrorMessage` body."
          },
          "404": {
            "description": "The item does not exist or is archived."
          }
        },
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item",
          "Pricing-Margins-View Margins"
        ]
      }
    },
    "/api/items/{itemId}/purchase-history": {
      "get": {
        "tags": [
          "Item"
        ],
        "summary": "Get an item's purchase history — every time it was bought, from whom, at what price.",
        "operationId": "GetItemPurchaseHistory",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "Id of the item to report on.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "months",
            "in": "query",
            "description": "How many months back to include. Defaults to 12; values outside 1–60 are clamped.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 12
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The item's purchase history over the requested window.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemPurchaseHistoryDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemPurchaseHistoryDto"
                }
              }
            }
          },
          "404": {
            "description": "Item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item",
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/items/list": {
      "post": {
        "tags": [
          "Item"
        ],
        "summary": "TO BE REMOVED 11/02/2023 - Find items based on search parameters.",
        "description": "Use V2 which includes a list of number filters",
        "operationId": "ListItem",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of items matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemDto"
                  }
                }
              }
            }
          }
        },
        "deprecated": true
      }
    },
    "/api/items/{itemId}/cost-breakdowns/list": {
      "post": {
        "tags": [
          "Item"
        ],
        "summary": "List the cost breakdowns recorded for an item by the quote lines, sales order lines and jobs that costed it,\nnewest calculatedOn first and highest id next. Breakdowns on deleted documents, and ones no document\nreferences, are left out.",
        "operationId": "ListItemCostBreakdowns",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The item",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Which breakdown types to list",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestListItemCostBreakdownsParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestListItemCostBreakdownsParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestListItemCostBreakdownsParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestListItemCostBreakdownsParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The page of cost breakdowns; an empty page when the item has never been costed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoCommonCostBreakdownDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoCommonCostBreakdownDto"
                }
              }
            }
          },
          "400": {
            "description": "Take was 0, or a sort was requested"
          },
          "404": {
            "description": "Item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item",
          "Pricing-Margins-View Margins",
          "Orders-Quotes-View Quote",
          "Orders-SalesOrders-View Sales Order",
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/items/list/v2": {
      "post": {
        "tags": [
          "Item"
        ],
        "summary": "Find items based on search parameters.",
        "operationId": "ListItemV2",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestFindParametersV2"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestFindParametersV2"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestFindParametersV2"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRequestFindParametersV2"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of items matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemListDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemListDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/items/{itemId}/inventory/pick": {
      "post": {
        "tags": [
          "Item"
        ],
        "summary": "TO BE REMOVED 10/13/2023 - Pick inventory against a specific item.",
        "description": "Use /inventory/pick API instead",
        "operationId": "PickItemInventory",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestItemInventoryPickEvent"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestItemInventoryPickEvent"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestItemInventoryPickEvent"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestItemInventoryPickEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Inventory transaction processed"
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "deprecated": true
      }
    },
    "/api/items/{itemId}/inventory/receive": {
      "post": {
        "tags": [
          "Item"
        ],
        "summary": "TO BE REMOVED 10/13/2023 - Receive inventory against a specific item.",
        "description": "Use /inventory/receive API instead",
        "operationId": "ReceiveItemInventory",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestItemInventoryReceiveEvent"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestItemInventoryReceiveEvent"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestItemInventoryReceiveEvent"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InventoryRequestItemInventoryReceiveEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Inventory transaction processed"
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "deprecated": true
      }
    },
    "/api/item-categories/{id}": {
      "get": {
        "tags": [
          "Item Category"
        ],
        "summary": "Get an item category",
        "operationId": "GetItemCategory",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The item category for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "404": {
            "description": "Item category did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/item-categories/list": {
      "post": {
        "tags": [
          "Item Category"
        ],
        "summary": "Find item categories based on search parameters.",
        "operationId": "ListItemCategory",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of item categories matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/item-classes/{id}": {
      "get": {
        "tags": [
          "Item Class"
        ],
        "summary": "Get an item class.",
        "operationId": "GetItemClass",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The item class for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "404": {
            "description": "Item class did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/item-classes/list": {
      "post": {
        "tags": [
          "Item Class"
        ],
        "summary": "Find item classes based on search parameters.",
        "operationId": "ListItemClass",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of item classes matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/item-tags/{id}": {
      "get": {
        "tags": [
          "Item Tag"
        ],
        "summary": "Get an item category",
        "operationId": "GetItemTag",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The item tag for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "404": {
            "description": "Item tag did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/item-tags/list": {
      "post": {
        "tags": [
          "Item Tag"
        ],
        "summary": "Find item tags based on search parameters",
        "operationId": "ListItemTag",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The search parameters",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoTagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoTagDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/items/{itemId}/tags/{tagId}": {
      "post": {
        "tags": [
          "Item Tag"
        ],
        "summary": "Attach a tag to an item. This operation is idempotent - attaching a tag that is already present is a no-op.",
        "operationId": "AttachItemTag",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The id of the item to tag.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "tagId",
            "in": "path",
            "description": "The id of the tag to attach. Please reference the /api/item-tags/list endpoint.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The item's resulting set of tags.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          },
          "400": {
            "description": "The tag with that id does not exist or is not valid for items."
          },
          "404": {
            "description": "The item with that id did not exist."
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      },
      "delete": {
        "tags": [
          "Item Tag"
        ],
        "summary": "Detach a tag from an item. This operation is idempotent - detaching a tag that is not present is a no-op.",
        "operationId": "DetachItemTag",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The id of the item to modify.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "tagId",
            "in": "path",
            "description": "The id of the tag to detach.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The item's resulting set of tags.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The item with that id did not exist."
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/tags": {
      "put": {
        "tags": [
          "Item Tag"
        ],
        "summary": "Replace the complete set of tags on an item. Tags currently on the item that are not in the request are removed.",
        "operationId": "ReplaceItemTags",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The id of the item to modify.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The complete desired set of tag ids.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemTagReplaceItemTagsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemTagReplaceItemTagsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemTagReplaceItemTagsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemTagReplaceItemTagsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The item's resulting set of tags.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          },
          "400": {
            "description": "One or more tag ids did not exist or are not valid for items."
          },
          "404": {
            "description": "The item with that id did not exist."
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/customFields": {
      "put": {
        "tags": [
          "Item Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on an item.",
        "operationId": "UpdateItemCustomFields",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The Item identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/custom-fields": {
      "put": {
        "tags": [
          "Item Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on an item.",
        "operationId": "UpdateItemCustomFields",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The Item identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/customers": {
      "post": {
        "tags": [
          "Item Customer"
        ],
        "summary": "Create a new item customer",
        "operationId": "CreateItemCustomer",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCustomerCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCustomerCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCustomerCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCustomerCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Item customer created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Item with the given id did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/customers/{itemCustomerId}": {
      "delete": {
        "tags": [
          "Item Customer"
        ],
        "summary": "Delete a specific item customer",
        "operationId": "DeleteItemCustomer",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The id of the item to remove a customer from",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemCustomerId",
            "in": "path",
            "description": "The id of the item customer to delete",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Delete successful"
          },
          "404": {
            "description": "Item did not exist or no customer existed at the specified id"
          }
        }
      },
      "put": {
        "tags": [
          "Item Customer"
        ],
        "summary": "Update a specific item customer",
        "operationId": "UpdateItemCustomer",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The id of the item to modify customers for",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemCustomerId",
            "in": "path",
            "description": "The id of the item customer.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The new data to apply to the given customer detail",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCustomerUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCustomerUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCustomerUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemCustomerUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Update successful"
          },
          "404": {
            "description": "Item did not exist or no customer existed at the specified id"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/customers/list": {
      "post": {
        "tags": [
          "Item Customer"
        ],
        "summary": "Get a list of customers for an item",
        "operationId": "ListItemCustomer",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of customers for the given item id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemCustomerDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemCustomerDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/items/{itemId}/material-vendors/list": {
      "post": {
        "tags": [
          "Item Material Vendor"
        ],
        "summary": "Get a list of vendors for a material-based item",
        "operationId": "ListItemMaterialVendor",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of vendors for the given item id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemMaterialVendorDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemMaterialVendorDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/items/{itemId}/material-vendors": {
      "post": {
        "tags": [
          "Item Material Vendor"
        ],
        "summary": "Create a new item vendor",
        "operationId": "CreateItemMaterialVendor",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialVendorCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialVendorCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialVendorCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialVendorCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Material-based item vendor created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Item with the given id did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/material-vendors/{materialVendorId}": {
      "put": {
        "tags": [
          "Item Material Vendor"
        ],
        "summary": "Update a specific item material vendor",
        "operationId": "UpdateItemMaterialVendor",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The id of the item to modify vendors for",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "materialVendorId",
            "in": "path",
            "description": "The id of the material-item vendor.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The new data to apply to the given vendor detail",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialVendorUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialVendorUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialVendorUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemMaterialVendorUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Update successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemMaterialVendorDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemMaterialVendorDto"
                }
              }
            }
          },
          "404": {
            "description": "Material did not exist or no vendor existed"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/purchase-price-breaks/list": {
      "post": {
        "tags": [
          "Item PriceBreaks"
        ],
        "summary": "List purchase price breaks for an item.",
        "operationId": "ListPurchasePriceBreaks",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The id of the item.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Optional filters to narrow the result set.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakListPurchasePriceBreaksDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakListPurchasePriceBreaksDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakListPurchasePriceBreaksDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakListPurchasePriceBreaksDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of purchase price breaks for the given item.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PriceBreakPurchasePriceBreakDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PriceBreakPurchasePriceBreakDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "An item with the given id was not found."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item",
          "Pricing-Margins-View Margins"
        ]
      }
    },
    "/api/items/{itemId}/sales-price-breaks/list": {
      "post": {
        "tags": [
          "Item PriceBreaks"
        ],
        "summary": "List sales price breaks for an item, including the item's base price, customer-specific\nprice breaks, and customer-tier price breaks.",
        "operationId": "ListSalesPriceBreaks",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The id of the item.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Optional filters to narrow the result set.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakListSalesPriceBreaksDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakListSalesPriceBreaksDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakListSalesPriceBreaksDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakListSalesPriceBreaksDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of sales price breaks for the given item.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PriceBreakSalesPriceBreakDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PriceBreakSalesPriceBreakDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "An item with the given id was not found."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/items/{itemId}/purchase-price-breaks": {
      "put": {
        "tags": [
          "Item PriceBreaks"
        ],
        "summary": "Create or update a purchase price break for an item. The price break is identified by\nthe combination of (item, vendor, currency, unit of measure): if a match exists it is\nreplaced, otherwise a new price break is created.",
        "operationId": "UpsertPurchasePriceBreak",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The id of the item.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The price break to upsert.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakPurchasePriceBreakUpsertDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakPurchasePriceBreakUpsertDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakPurchasePriceBreakUpsertDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakPurchasePriceBreakUpsertDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The upserted price break.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceBreakPurchasePriceBreakDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceBreakPurchasePriceBreakDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input."
          },
          "404": {
            "description": "Item or vendor did not exist."
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item",
          "Pricing-Margins-Edit Margins"
        ]
      }
    },
    "/api/items/{itemId}/sales-price-breaks": {
      "put": {
        "tags": [
          "Item PriceBreaks"
        ],
        "summary": "Create or update a sales price break for an item. The price break is identified by\nthe combination of (item, customer, customer tier, currency, sales unit of measure):\nif a match exists it is replaced, otherwise a new price break is created.\n            \nCustomer and customer tier are mutually exclusive. Leaving both null upserts the\nitem's base price.",
        "operationId": "UpsertSalesPriceBreak",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The id of the item.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The price break to upsert.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakSalesPriceBreakUpsertDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakSalesPriceBreakUpsertDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakSalesPriceBreakUpsertDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PriceBreakSalesPriceBreakUpsertDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The upserted price break.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceBreakSalesPriceBreakDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceBreakSalesPriceBreakDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input."
          },
          "404": {
            "description": "Item, customer, or customer tier did not exist."
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/routing": {
      "get": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Get a specific item routing input item",
        "operationId": "ItemRoutingGet",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Input item for an item's routing matching id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingDto"
                }
              }
            }
          },
          "204": {
            "description": "Input item id provided was not found on this item"
          },
          "404": {
            "description": "Item id provided is not present in the system"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      },
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Update a specific item's routing",
        "operationId": "ItemRoutingUpdate",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful update of the input item"
          },
          "204": {
            "description": "Input item id provided was not found on this item"
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "Item id provided is not present in the system"
          }
        }
      }
    },
    "/api/items/{itemId}/routing/input-items": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Adds an input item to an item's routing",
        "operationId": "ItemRoutingInputItemCreate",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "An input item was added to the item's routing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "An item was not found matching the item id"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/routing/input-items/batch": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Add multiple input items to an item's routing",
        "operationId": "ItemRoutingInputItemCreateBatch",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemInputItemCreateBatchDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemInputItemCreateBatchDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemInputItemCreateBatchDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemInputItemCreateBatchDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Input item(s) were added to the item's routing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchCreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchCreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "An item was not found matching the item id"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/routing/input-items/{inputItemId}": {
      "delete": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Deletes an input item from an item's routing",
        "operationId": "ItemRoutingInputItemDelete",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An input item was deleted from the item's routing"
          },
          "204": {
            "description": "Input item id provided was not found on this item"
          },
          "404": {
            "description": "Item id provided is not present in the system"
          }
        }
      },
      "get": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Get a specific item routing input item",
        "operationId": "ItemRoutingInputItemGet",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Input item for an item's routing matching id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              }
            }
          },
          "204": {
            "description": "Input item id provided was not found on this item"
          },
          "404": {
            "description": "Item id provided is not present in the system"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      },
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Update an input item for a specific item's routing",
        "operationId": "ItemRoutingInputItemUpdate",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful update of the input item"
          },
          "204": {
            "description": "Input item id provided was not found on this item"
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "Item id provided is not present in the system"
          }
        }
      }
    },
    "/api/items/{itemId}/routing/input-items/list": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Lists the input items for an item's routing",
        "operationId": "ItemRoutingInputItemList",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of input items matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/items/{itemId}/routing/input-materials": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Adds an input material to an item's routing",
        "operationId": "ItemRoutingInputMaterialCreate",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "An input material was created on the item's routing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "A material was not found matching the material id"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/routing/input-materials/{materialId}": {
      "delete": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Deletes an input material from an item's routing",
        "operationId": "ItemRoutingInputMaterialDelete",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "materialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An input material was deleted from the item's routing"
          },
          "204": {
            "description": "Input material id provided was not found on this item"
          },
          "404": {
            "description": "Item id provided is not present in the system or a material was not found matching the material id"
          }
        }
      }
    },
    "/api/items/{itemId}/routing/input-materials/list": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Lists the input materials for an item's routing",
        "operationId": "ItemRoutingInputMaterialList",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of input materials matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/items/{itemId}/routing/input-materials/{materialId}/nesting": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Adds an input material nesting to an item's routing material",
        "operationId": "ItemRoutingInputMaterialNestingCreate",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "materialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialNestingCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialNestingCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialNestingCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialNestingCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "An input material nesting was added to the item's routing nesting",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "A material was not found matching the material id"
          }
        }
      }
    },
    "/api/items/{itemId}/routing/input-materials/{materialId}/nesting/{nestingId}": {
      "delete": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Removes an input material nesting on an item's routing material",
        "operationId": "ItemRoutingInputMaterialNestingDelete",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "materialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "nestingId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An input material nesting was added to the item's routing nesting"
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "A material was not found matching the material id"
          }
        }
      }
    },
    "/api/items/{itemId}/routing/input-materials/{inputMaterialId}": {
      "put": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Update an input material on an item's routing",
        "operationId": "ItemRoutingInputMaterialUpdate",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "inputMaterialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "An input material was updated on the item's routing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "An input material was not found matching the input material id"
          }
        }
      }
    },
    "/api/items/{itemId}/routing/operations/batch": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Bulk reorganize routing operations for a specific item.",
        "operationId": "ItemRoutingOperationBatch",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Created operation id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchCreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchCreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "Item id not present in the system"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/routing/operations": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Create a routing operation for a specific item",
        "operationId": "ItemRoutingOperationCreate",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Created operation id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "Item id not present in the system"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/routing/operations/{operationId}": {
      "delete": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Delete a specific item routing operation",
        "operationId": "ItemRoutingOperationDelete",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of operations matching the filters"
          },
          "204": {
            "description": "Operation id provided was not found on this item"
          },
          "404": {
            "description": "Item id provided is not present in the system"
          }
        }
      },
      "get": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Get a specific item routing operation",
        "operationId": "ItemRoutingOperationGet",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation matching id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingOperationDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingOperationDto"
                }
              }
            }
          },
          "404": {
            "description": "Item id or operation id provided are not present in the system"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      },
      "put": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Update a routing operation for a specific item",
        "operationId": "ItemRoutingOperationUpdate",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful update of the operation"
          },
          "204": {
            "description": "Operation id provided was not found on this item"
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "Item id not present in the system"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/routing/operations/{operationId}/items": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Adds an operation item to an item's routing",
        "operationId": "ItemRoutingOperationItemCreate",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "An operation item was added to the item's routing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "204": {
            "description": "Operation id provided was not found on this item"
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "An item was not found matching the itemId"
          }
        }
      }
    },
    "/api/items/{itemId}/routing/operations/{operationId}/items/{operationItemId}": {
      "delete": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Deletes an operation item from an item's routing",
        "operationId": "ItemRoutingOperationItemDelete",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An operation item was deleted from the item's routing"
          },
          "204": {
            "description": "Operation or operation item id provided was not found on this item"
          },
          "404": {
            "description": "An item was not found matching the itemId"
          }
        }
      },
      "get": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Get a specific item routing operation item",
        "operationId": "ItemRoutingOperationItemGet",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Operation item for an item's routing matching id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              }
            }
          },
          "204": {
            "description": "Operation or operation item id provided was not found on this item"
          },
          "404": {
            "description": "An item was not found matching the itemId"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      },
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Update an operation item for a specific item's routing",
        "operationId": "ItemRoutingOperationItemUpdate",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful update of the input item"
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "Item id provided is not present in the system"
          }
        }
      }
    },
    "/api/items/{itemId}/routing/operations/{operationId}/items/list": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Lists the operation items for an item's routing",
        "operationId": "ItemRoutingOperationItemList",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of operation items matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/items/{itemId}/routing/operations/list": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Lists the operations for an item's routing",
        "operationId": "ItemRoutingOperationList",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of operations matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingOperationDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingOperationDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/items/{itemId}/routing/operations/{operationId}/materials/list": {
      "post": {
        "tags": [
          "Item Routing"
        ],
        "summary": "Lists the operation materials for an item's routing",
        "operationId": "ItemRoutingOperationMaterialList",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of operation items matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/items/{itemId}/vendors": {
      "post": {
        "tags": [
          "Item Vendor"
        ],
        "summary": "Create a new item vendor",
        "operationId": "CreateItemVendor",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemVendorCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemVendorCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemVendorCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemVendorCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Item vendor created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Item with the given id did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/items/{itemId}/vendors/list": {
      "post": {
        "tags": [
          "Item Vendor"
        ],
        "summary": "Get a list of vendors for an item",
        "operationId": "ListItemVendor",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of vendors for the given item id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemVendorDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemVendorDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/items/{itemId}/vendors/{itemVendorId}": {
      "put": {
        "tags": [
          "Item Vendor"
        ],
        "summary": "Update a specific item vendor",
        "operationId": "UpdateItemVendor",
        "parameters": [
          {
            "name": "itemId",
            "in": "path",
            "description": "The id of the item to modify vendors for",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemVendorId",
            "in": "path",
            "description": "The id of the item vendor.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The new data to apply to the given vendor detail",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemVendorUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemVendorUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemVendorUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemVendorUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Update successful"
          },
          "404": {
            "description": "Item did not exist or no vendor existed at the specified index"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/jobs/{jobId}/cancel": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Cancel a specific job",
        "operationId": "CancelJob",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Job did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit Job"
        ]
      }
    },
    "/api/jobs": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Create a new job",
        "operationId": "CreateJob",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Job created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit Job"
        ]
      }
    },
    "/api/jobs/{jobId}": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get a specific job",
        "operationId": "GetJob",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The job for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/JobDto"
                }
              }
            }
          },
          "404": {
            "description": "Job did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      },
      "patch": {
        "tags": [
          "Job"
        ],
        "summary": "Partially update a job",
        "operationId": "PatchJob",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Job item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/JobDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Job did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit Job"
        ]
      },
      "put": {
        "tags": [
          "Job"
        ],
        "summary": "Update a job",
        "operationId": "UpdateJob",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Job item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/JobDto"
                }
              }
            }
          },
          "404": {
            "description": "Job did not exist"
          }
        }
      }
    },
    "/api/jobs/{jobId}/tracking": {
      "get": {
        "tags": [
          "Job"
        ],
        "summary": "Get a specific job's tracking information",
        "operationId": "GetJobTracking",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The job for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobTrackingDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/JobTrackingDto"
                }
              }
            }
          },
          "404": {
            "description": "Job did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/in-process-tracking/list": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Lists a job's in process tracking checkpoints together with every recorded operator reading.",
        "description": "The result is intentionally single-job-bounded to the job identified by jobId and is\nnot paginated: it returns every checkpoint on the job (across its items to make and operations) with all\nrecorded readings, and the readings axis is not independently bounded. Consumers should expect the\nresponse to scale with the job's routing size and production volume. Checkpoints are ordered by operation\norder then checkpoint order; each checkpoint's readings are ordered by sampling interval, then reading\nordinal within the interval, then recorded time.",
        "operationId": "JobInProcessTrackingResponseList",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/InProcessTrackingResponseFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InProcessTrackingResponseFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/InProcessTrackingResponseFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/InProcessTrackingResponseFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The job's in process tracking checkpoints and readings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JobInProcessTrackingCheckpointDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JobInProcessTrackingCheckpointDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Job did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/list": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Find jobs based on search parameters.",
        "operationId": "ListJob",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of jobs matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JobDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JobDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/status": {
      "post": {
        "tags": [
          "Job"
        ],
        "summary": "Update a job status",
        "operationId": "StatusUpdateJob",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobRequestUpdateStatus"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobRequestUpdateStatus"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobRequestUpdateStatus"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobRequestUpdateStatus"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Job cannot be moved to requested status"
          },
          "404": {
            "description": "Job did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit Job"
        ]
      }
    },
    "/api/job-tracking-timers/list": {
      "post": {
        "tags": [
          "Job Tracking Timers"
        ],
        "summary": "Finds job tracking timers based on search parameters",
        "operationId": "ListJobTrackingTimer",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The search parameters",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerRequestListTimersParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerRequestListTimersParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerRequestListTimersParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerRequestListTimersParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoTimerDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoTimerDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job",
          "Time-Time-View Time Management"
        ]
      }
    },
    "/api/job-tracking-timers/start": {
      "post": {
        "tags": [
          "Job Tracking Timers"
        ],
        "summary": "Starts a job tracking timer. When the operation is grouped under a work order, the work order operation's\ntimer is started instead; it covers every job operation grouped under it.",
        "operationId": "StartTimer",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerStartTimerDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerStartTimerDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerStartTimerDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerStartTimerDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Time-Time-Edit Time Managements"
        ]
      }
    },
    "/api/job-tracking-timers/stop": {
      "post": {
        "tags": [
          "Job Tracking Timers"
        ],
        "summary": "Stops a job tracking timer. Stopping a work order timer, or one of the job operation timers it holds, stops\nthe whole work order timer.",
        "operationId": "StopTimer",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerStopTimerDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerStopTimerDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerStopTimerDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerStopTimerDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Time-Time-Edit Time Managements"
        ]
      }
    },
    "/api/jobs/{jobId}/customFields": {
      "put": {
        "tags": [
          "Job Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a job",
        "operationId": "UpdateJobCustomFields",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit Job"
        ]
      }
    },
    "/api/jobs/{jobId}/custom-fields": {
      "put": {
        "tags": [
          "Job Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a job",
        "operationId": "UpdateJobCustomFields",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit Job"
        ]
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}/operations/{operationId}/ipts/{phase}/{iptId}": {
      "delete": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Deletes a full routing operation in process tracking field for a job",
        "operationId": "JobFullRoutingIptDelete",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          },
          {
            "name": "iptId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Job Part Line Item Full Routing"
        ],
        "summary": "Gets a full routing operation in process tracking field for a job",
        "operationId": "JobFullRoutingIptGet",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          },
          {
            "name": "iptId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingIptDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingIptDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}/operations/{operationId}/ipts/{phase}/list": {
      "post": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Lists full routing operation in process tracking field for a job",
        "operationId": "JobPartLineItemFullRoutingIptList",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingIptDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingIptDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{JobId}/routing/{routingId}/input-items": {
      "post": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Create a full routing input item for a job",
        "operationId": "JobFullRoutingInputItemCreate",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}/input-items/{inputItemId}": {
      "delete": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Delete a full routing input item from job",
        "operationId": "JobFullRoutingInputItemDelete",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Gets a full routing input item for a job",
        "operationId": "JobFullRoutingInputItemGet",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      },
      "post": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Update a full routing input item for a job\nLines assigned to an operation are not supported yet: the operation keeps its own copy of the line's\nquantities, so a change to `valueTypeUnits` or `fixedUnits` is reverted when the routing is next loaded.",
        "operationId": "JobFullRoutingInputItemUpdate",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}/input-items/list": {
      "post": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Lists the full routing input items for a job",
        "operationId": "JobFullRoutingInputItemList",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}/input-materials/list": {
      "post": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "List input materials for a job's routing",
        "operationId": "JobFullRoutingInputMaterialList",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}/operations/{operationId}/ipts/{phase}": {
      "post": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Creates a full routing operation in process tracking field for a job",
        "operationId": "JobFullRoutingIptCreate",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/jobs/{jobId}/make-summary": {
      "get": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Get a summary of the make routing for a job",
        "operationId": "JobFullRoutingMakeSummaryGet",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoutingDataFullRoutingMakeSummaryDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoutingDataFullRoutingMakeSummaryDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}/operations": {
      "post": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Creates a full routing operation for a job",
        "operationId": "JobFullRoutingOperationCreate",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}/operations/{operationId}": {
      "delete": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Removes a full routing operation for a job",
        "operationId": "JobFullRoutingOperationDelete",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Gets a full routing operation for a job",
        "operationId": "JobFullRoutingOperationGet",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingOperationDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingOperationDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      },
      "post": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Updates a full routing operation for a job",
        "operationId": "JobFullRoutingOperationUpdate",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}/operations/{operationId}/items/{operationItemId}": {
      "get": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Gets a full routing operation item for a job",
        "operationId": "JobFullRoutingOperationItemGet",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}/operations/{operationId}/items/list": {
      "post": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "List full routing operation items for a job",
        "operationId": "JobFullRoutingOperationItemList",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}/operations/list": {
      "post": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Lists full routing operations for a job",
        "operationId": "JobFullRoutingOperationList",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingOperationDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingOperationDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/routing/{routingId}": {
      "get": {
        "tags": [
          "Job Full Routing"
        ],
        "summary": "Gets a full routing routing for a job",
        "operationId": "JobFullRoutingRoutingGet",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/items-to-make/{itemToMakeId}": {
      "get": {
        "tags": [
          "Job Item To Make"
        ],
        "summary": "Get a specific item to make on a job",
        "operationId": "GetJobItemToMake",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemToMakeId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "includeCostBreakdown",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The item to make for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobItemToMakeDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/JobItemToMakeDto"
                }
              }
            }
          },
          "404": {
            "description": "Job or item to make did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/items-to-make/list": {
      "post": {
        "tags": [
          "Job Item To Make"
        ],
        "summary": "Get a list of items to make on a job",
        "operationId": "ListJobItemToMake",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "includeCostBreakdown",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The items to make for the given job id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JobItemToMakeDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JobItemToMakeDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Job did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/items-to-make/{itemToMakeId}/cost-breakdown": {
      "get": {
        "tags": [
          "Job Item To Make"
        ],
        "summary": "Get the cost breakdowns for specific item to make on a job",
        "operationId": "GetJobItemToMakeCostBreakdown",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemToMakeId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The item to make for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobItemToMakeCostBreakdownsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/JobItemToMakeCostBreakdownsDto"
                }
              }
            }
          },
          "404": {
            "description": "Job or item to make did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job",
          "Pricing-Margins-View Margins"
        ]
      }
    },
    "/api/jobs/{jobId}/items-to-make/{itemToMakeId}/operations/{operationId}/add-quantity-completed": {
      "post": {
        "tags": [
          "Job Item To Make Operation"
        ],
        "summary": "Adds additional quantity completed to a job operation without completing the operation.\nEach call will increment the quantity completed by the specified amount.",
        "description": "This is a non-idempotent action. Multiple calls with the same parameters will result in \nthe quantity being added multiple times. Implement appropriate client-side controls to \nprevent duplicate submissions.",
        "operationId": "AddQuantityCompletedToJobOperation",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The ID of the job",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "itemToMakeId",
            "in": "path",
            "description": "The ID of the item to make",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "description": "The ID of the operation",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The request containing the additional quantity to add",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemsToMakeOperationsAddQuantityCompletedRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemsToMakeOperationsAddQuantityCompletedRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemsToMakeOperationsAddQuantityCompletedRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemsToMakeOperationsAddQuantityCompletedRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsToMakeOperationsAddQuantityCompletedResponse"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsToMakeOperationsAddQuantityCompletedResponse"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit In Progress Job"
        ]
      }
    },
    "/api/jobs/{jobId}/items-to-make/{itemToMakeId}/operations/{operationId}/complete": {
      "post": {
        "tags": [
          "Job Item To Make Operation"
        ],
        "summary": "Completes a job operation, optionally recording a final completed quantity and scrap.",
        "description": "Closes any open timers on the operation, marks setup and run complete, readies downstream\noperations, and — when this is the item's final operation, or a split operation that\nproduces finished goods — receives finished goods into inventory (unless\naddItemsToInventory is false), completing the item on its final operation and the job once\nevery item is done. Quantity made is added on top of quantity recorded earlier, so a\ncaller that already reported production via add-quantity-completed should pass zero here.",
        "operationId": "CompleteJobOperation",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The ID of the job",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemToMakeId",
            "in": "path",
            "description": "The ID of the item to make",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "description": "The ID of the operation",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Completion details: final quantity, scrap, and inventory options",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemsToMakeOperationsCompleteJobOperationRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemsToMakeOperationsCompleteJobOperationRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemsToMakeOperationsCompleteJobOperationRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemsToMakeOperationsCompleteJobOperationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Operation completed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsToMakeOperationsCompleteJobOperationResponse"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsToMakeOperationsCompleteJobOperationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input, or the operation cannot be completed"
          },
          "404": {
            "description": "Job, item to make, or operation did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit In Progress Job"
        ]
      }
    },
    "/api/jobs/{jobId}/items-to-make/{itemToMakeId}/operations/{operationId}": {
      "get": {
        "tags": [
          "Job Item To Make Operation"
        ],
        "summary": "Get a specific operation for an item to make on a job",
        "operationId": "GetJobItemToMakeOperation",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemToMakeId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The operation for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemToMakeOperationDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemToMakeOperationDto"
                }
              }
            }
          },
          "404": {
            "description": "Job, item to make, or operation did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      },
      "post": {
        "tags": [
          "Job Item To Make Operation"
        ],
        "summary": "Get a specific operation for an item to make on a job",
        "operationId": "UpdateJobItemToMakeOperation",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemToMakeId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemToMakeOperationUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemToMakeOperationUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemToMakeOperationUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemToMakeOperationUpdateDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The operation for the given id"
          },
          "404": {
            "description": "Job, item to make, or operation did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit In Progress Job"
        ]
      }
    },
    "/api/jobs/{jobId}/items-to-make/{itemToMakeId}/operations/list": {
      "post": {
        "tags": [
          "Job Item To Make Operation"
        ],
        "summary": "Get a list of operations for an item to make on a job",
        "operationId": "ListJobItemToMakeOperation",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemToMakeId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The operations for the given item to make",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemToMakeOperationDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemToMakeOperationDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Job or item to make did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/items-to-make/{itemToMakeId}/operations/{operationId}/items-required/list": {
      "post": {
        "tags": [
          "Job Item To Make Operation"
        ],
        "summary": "Get a list of required items for an operation on a job item to make",
        "operationId": "ListJobItemToMakeOperationItemsRequired",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemToMakeId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The required items for the given operation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemToMakeOperationItemRequiredDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemToMakeOperationItemRequiredDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Job, item to make, or operation did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/items-to-make/{itemToMakeId}/operations/{operationId}/materials-required/list": {
      "post": {
        "tags": [
          "Job Item To Make Operation"
        ],
        "summary": "Get a list of required materials for an operation on a job item to make",
        "operationId": "ListJobItemToMakeOperationMaterialsRequired",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemToMakeId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The required materials for the given operation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemToMakeOperationMaterialRequiredDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemToMakeOperationMaterialRequiredDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Job, item to make, or operation did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/items-to-make/{itemToMakeId}/operations/{operationId}/pick": {
      "post": {
        "tags": [
          "Job Item To Make Operation"
        ],
        "summary": "Pick a specific item for a specific item to make on a job.",
        "operationId": "PickInventoryForJobItemToMakeOperation",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "itemToMakeId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobItemToMakeOperationPickInventoryDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobItemToMakeOperationPickInventoryDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobItemToMakeOperationPickInventoryDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobItemToMakeOperationPickInventoryDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Inventory transaction processed"
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "The job, item to make, or operation did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit In Progress Job"
        ]
      }
    },
    "/api/jobs/{jobId}/messages": {
      "post": {
        "tags": [
          "Job Message"
        ],
        "summary": "Post a chat message on a job. Omit itemToMakeId and operationId to post on the job-level chat;\nsupply both to post on one operation's chat. The message appears in the in-app job chat, and each\nmentioned user is subscribed to that chat.",
        "operationId": "CreateJobMessage",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The message to post",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobMessageCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobMessageCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobMessageCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobMessageCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Message posted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input, itemToMakeId and operationId were not supplied together, or a mention is not a user"
          },
          "404": {
            "description": "Job did not exist, or the operation is not on that item-to-make of the job"
          }
        },
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit Job"
        ]
      }
    },
    "/api/jobs/{jobId}/messages/list": {
      "post": {
        "tags": [
          "Job Message"
        ],
        "summary": "List the chat messages on a job, newest first. Omit the body (or both ids) for the job-level chat;\nsupply itemToMakeId and operationId together for one operation's chat.",
        "operationId": "ListJobMessages",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Which chat on the job to list",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MessageRequestListJobMessagesParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MessageRequestListJobMessagesParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MessageRequestListJobMessagesParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MessageRequestListJobMessagesParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The page of messages; an empty page when the chat has no messages yet",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoJobMessageDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoJobMessageDto"
                }
              }
            }
          },
          "400": {
            "description": "itemToMakeId and operationId were not supplied together, or a sort was requested"
          },
          "404": {
            "description": "Job did not exist, or the operation is not on that item-to-make of the job"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/jobs/{jobId}/operations/list": {
      "post": {
        "tags": [
          "Job Operation"
        ],
        "summary": "Get a list of operations for a job",
        "operationId": "ListJobOperations",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The operations for the given item to make",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JobTrackingOperationDetailsDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JobTrackingOperationDetailsDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Job did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/locations/{locationId}": {
      "delete": {
        "tags": [
          "Location"
        ],
        "summary": "Delete a specific location",
        "operationId": "DeleteLocation",
        "parameters": [
          {
            "name": "locationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Location did not exist, or is at a site the caller does not reach"
          }
        }
      }
    },
    "/api/locations/{id}": {
      "get": {
        "tags": [
          "Location"
        ],
        "summary": "Get a location.",
        "operationId": "GetLocation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The location for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LocationDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/LocationDto"
                }
              }
            }
          },
          "404": {
            "description": "Location did not exist, or the caller may not see it"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/locations/list": {
      "post": {
        "tags": [
          "Location"
        ],
        "summary": "Find locations based on search parameters. Only the locations the caller may see are returned.",
        "operationId": "ListLocation",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/LocationRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LocationRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/LocationRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/LocationRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of locations matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LocationDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LocationDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/materials/activate": {
      "post": {
        "tags": [
          "Material"
        ],
        "summary": "Activate materials based on ids",
        "operationId": "ActivateMaterial",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestActivateMaterials"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestActivateMaterials"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestActivateMaterials"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestActivateMaterials"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Activated of materials",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MaterialShapeDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MaterialShapeDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/materials/{id}": {
      "get": {
        "tags": [
          "Material"
        ],
        "summary": "Get a material. DEPRECATED: use POST /v2/materials/get instead, which accepts the\nmaterial id in the request body. This endpoint fails for material ids that contain\n'/' characters (e.g. \"SS-301-CR 1/2 HD\") because ASP.NET Core routing cannot match\nURL-encoded forward slashes in path segments.",
        "operationId": "GetMaterial",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The material for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialShapeDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialShapeDto"
                }
              }
            }
          },
          "404": {
            "description": "Material did not exist"
          }
        },
        "deprecated": true
      }
    },
    "/api/v2/materials/get": {
      "post": {
        "tags": [
          "Material"
        ],
        "summary": "Get a material by id. Use this endpoint instead of the path-based v1 when\nyour material ids may contain '/' characters, which ASP.NET Core routing\ncannot match once URL-encoded.",
        "operationId": "GetMaterialV2",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestGetMaterialRequestDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestGetMaterialRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestGetMaterialRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestGetMaterialRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The material for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialShapeDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialShapeDto"
                }
              }
            }
          },
          "404": {
            "description": "Material did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/materials/list": {
      "post": {
        "tags": [
          "Material"
        ],
        "summary": "Find materials based on search parameters.",
        "operationId": "ListMaterial",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of materials matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MaterialShapeDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MaterialShapeDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/material-codes/{id}": {
      "get": {
        "tags": [
          "Material Code"
        ],
        "summary": "Get a material code.",
        "operationId": "GetMaterialCode",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The material code for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "404": {
            "description": "Material code did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/material-codes/list": {
      "post": {
        "tags": [
          "Material Code"
        ],
        "summary": "Find material codes based on search parameters.",
        "operationId": "ListMaterialCode",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of material codes matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/materials/{materialId}/vendors": {
      "post": {
        "tags": [
          "Material Vendor"
        ],
        "summary": "Create a new material vendor. DEPRECATED: use POST /v2/material-vendors instead,\nwhich accepts the material id in the request body. This endpoint fails for material\nids that contain '/' characters (e.g. \"SS-301-CR 1/2 HD\") because ASP.NET Core routing\ncannot match URL-encoded forward slashes in path segments.",
        "operationId": "CreateMaterialVendor",
        "parameters": [
          {
            "name": "materialId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialShapeVendorCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialShapeVendorCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialShapeVendorCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialShapeVendorCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Material vendor created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Item with the given id did not exist"
          }
        },
        "deprecated": true
      }
    },
    "/api/v2/material-vendors": {
      "post": {
        "tags": [
          "Material Vendor"
        ],
        "summary": "Create a new material vendor. Use this endpoint instead of the path-based v1\nwhen your material ids may contain '/' characters, which ASP.NET Core routing\ncannot match once URL-encoded.",
        "operationId": "CreateMaterialVendorV2",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorCreateMaterialVendorRequestDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorCreateMaterialVendorRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorCreateMaterialVendorRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorCreateMaterialVendorRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Material vendor created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Item with the given id did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/materials/{materialId}/vendors/list": {
      "post": {
        "tags": [
          "Material Vendor"
        ],
        "summary": "Get a list of vendors for a material. DEPRECATED: use POST /v2/material-vendors/list\ninstead, which accepts the material id in the request body. This endpoint fails for\nmaterial ids that contain '/' characters (e.g. \"SS-301-CR 1/2 HD\") because ASP.NET Core\nrouting cannot match URL-encoded forward slashes in path segments.",
        "operationId": "ListMaterialVendor",
        "parameters": [
          {
            "name": "materialId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of vendors for the given material id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MaterialShapeVendorDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MaterialShapeVendorDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The material did not exist"
          }
        },
        "deprecated": true
      }
    },
    "/api/v2/material-vendors/list": {
      "post": {
        "tags": [
          "Material Vendor"
        ],
        "summary": "List the vendors for a material. Use this endpoint instead of the path-based v1\nwhen your material ids may contain '/' characters, which ASP.NET Core routing\ncannot match once URL-encoded.",
        "operationId": "ListMaterialVendorV2",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorListMaterialVendorRequestDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorListMaterialVendorRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorListMaterialVendorRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorListMaterialVendorRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "List of vendors for the given material id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MaterialShapeVendorDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MaterialShapeVendorDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The material did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Item"
        ]
      }
    },
    "/api/materials/{materialId}/vendors/{vendorId}": {
      "put": {
        "tags": [
          "Material Vendor"
        ],
        "summary": "Update a specific material vendor. DEPRECATED: use PUT /v2/material-vendors/{vendorId} instead,\nwhich accepts the material id in the request body. This endpoint fails for material\nids that contain '/' characters (e.g. \"SS-301-CR 1/2 HD\") because ASP.NET Core routing\ncannot match URL-encoded forward slashes in path segments.",
        "operationId": "UpdateMaterialVendor",
        "parameters": [
          {
            "name": "materialId",
            "in": "path",
            "description": "The id of the item to modify vendors for",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "vendorId",
            "in": "path",
            "description": "The id of the actual vendor.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The new data to apply to the given vendor detail",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialShapeVendorUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialShapeVendorUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialShapeVendorUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialShapeVendorUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Update successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialShapeVendorDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialShapeVendorDto"
                }
              }
            }
          },
          "404": {
            "description": "Material did not exist or no vendor existed"
          }
        },
        "deprecated": true
      }
    },
    "/api/v2/material-vendors/{vendorId}": {
      "put": {
        "tags": [
          "Material Vendor"
        ],
        "summary": "Update a specific material vendor. Use this endpoint instead of the path-based v1\nwhen your material ids may contain '/' characters, which ASP.NET Core routing\ncannot match once URL-encoded.",
        "operationId": "UpdateMaterialVendorV2",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "description": "Unique id of the vendor to update on the material.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The new data to apply to the given vendor detail, including the material id",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorUpdateMaterialVendorRequestDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorUpdateMaterialVendorRequestDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorUpdateMaterialVendorRequestDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/MaterialVendorUpdateMaterialVendorRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Update successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialShapeVendorDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/MaterialShapeVendorDto"
                }
              }
            }
          },
          "404": {
            "description": "Material did not exist or no vendor existed"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-Edit Item"
        ]
      }
    },
    "/api/ncrs": {
      "post": {
        "tags": [
          "NCRs"
        ],
        "summary": "Open a new NCR in status New. An affected job and/or item become the NCR's single impact;\nthe job's customer and sales order are recorded from the job itself. The NCR number is assigned\nby the server. Creates are not idempotent: a retried request opens a second NCR.",
        "operationId": "CreateNcr",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/NCRRequestNcrCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NCRRequestNcrCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/NCRRequestNcrCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/NCRRequestNcrCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The created NCR",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NCRNcrDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NCRNcrDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "The job or item does not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Quality-NCR-Create NCR"
        ]
      }
    },
    "/api/ncrs/{ncrId}": {
      "get": {
        "tags": [
          "NCRs"
        ],
        "summary": "Get a specific NCR by id.",
        "operationId": "GetNcr",
        "parameters": [
          {
            "name": "ncrId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The NCR for the given id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NCRNcrDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NCRNcrDto"
                }
              }
            }
          },
          "404": {
            "description": "An NCR with that id does not exist."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-NCR-View NCR"
        ]
      }
    },
    "/api/ncrs/list": {
      "post": {
        "tags": [
          "NCRs"
        ],
        "summary": "Finds NCRs based on search parameters",
        "operationId": "ListNCR",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/NCRRequestNcrListParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NCRRequestNcrListParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/NCRRequestNcrListParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/NCRRequestNcrListParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoNCRNcrDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoNCRNcrDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-NCR-View NCR"
        ]
      }
    },
    "/api/nesting/work-package-manifest": {
      "post": {
        "tags": [
          "Nesting"
        ],
        "summary": "Get the cut list for a set of job operations: each part's quantity, dates, material, and the\nDXF attachment ids to download. An entry that does not resolve to exactly one operation with a\nsystem operation is reported in `skipped` with a reason, not as an error.",
        "operationId": "GetNestingWorkPackageManifest",
        "requestBody": {
          "description": "The job operations to cut, each named by its job id and job-operation id.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/NestingWorkPackageManifestParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NestingWorkPackageManifestParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/NestingWorkPackageManifestParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/NestingWorkPackageManifestParameters"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The manifest. Every requested pair appears once, in `parts` or in `skipped`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NestingWorkPackageManifestDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NestingWorkPackageManifestDto"
                }
              }
            }
          },
          "400": {
            "description": "The body was missing or malformed, listed no entry or more than 500, or listed the same entry twice."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/nesting/nestable-jobs/list": {
      "post": {
        "tags": [
          "Nesting"
        ],
        "summary": "List nestable groups — each a material shape paired with the operation it is cut on, carrying\nthe job operations still waiting to be nested and the work-order operations already created.",
        "operationId": "ListNestableJobs",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Optional filter. Every field is optional and filters combine with AND.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/NestingRequestNestableJobsListParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NestingRequestNestableJobsListParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/NestingRequestNestableJobsListParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/NestingRequestNestableJobsListParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The page of matching groups.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoNestingNestableJobGroupDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoNestingNestableJobGroupDto"
                }
              }
            }
          },
          "400": {
            "description": "An unsupported sort field was requested, or Take was 0."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/notes": {
      "post": {
        "tags": [
          "Note"
        ],
        "summary": "Create a new note on a parent document",
        "operationId": "CreateNote",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/NoteCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NoteCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/NoteCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/NoteCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Note created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order",
          "Orders-PurchaseOrders-View Purchase Order",
          "Orders-Quotes-View Quote",
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/notes/{noteId}": {
      "get": {
        "tags": [
          "Note"
        ],
        "summary": "Get a specific note",
        "operationId": "GetNote",
        "parameters": [
          {
            "name": "noteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The note for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoteDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/NoteDto"
                }
              }
            }
          },
          "404": {
            "description": "Note did not exist"
          }
        }
      }
    },
    "/api/notes/list": {
      "post": {
        "tags": [
          "Note"
        ],
        "summary": "Find notes based on search parameters.",
        "operationId": "ListNote",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/NoteRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NoteRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/NoteRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/NoteRequestFindParameters"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "List of notes matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NoteDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/NoteDto"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/operation": {
      "post": {
        "tags": [
          "Operation"
        ],
        "summary": "Create a new operation",
        "operationId": "CreateOperation",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/OperationCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OperationCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OperationCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OperationCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Operation created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/operations/{id}": {
      "get": {
        "tags": [
          "Operation"
        ],
        "summary": "Get an operation.",
        "operationId": "GetOperation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The operation for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationDto"
                }
              }
            }
          },
          "404": {
            "description": "Operation did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      }
    },
    "/api/operations/list": {
      "post": {
        "tags": [
          "Operation"
        ],
        "summary": "Find operations based on search parameters.",
        "operationId": "ListOperation",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/OperationRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OperationRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OperationRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OperationRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of operations matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OperationDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OperationDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      }
    },
    "/api/operation/{id}": {
      "put": {
        "tags": [
          "Operation"
        ],
        "summary": "Update an operation.",
        "operationId": "UpdateOperation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/OperationUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OperationUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/OperationUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/OperationUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The updated operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Operation did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/payment-terms": {
      "post": {
        "tags": [
          "Payment Term"
        ],
        "summary": "Create a new payment term",
        "operationId": "CreatePaymentTerm",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CommonPaymentTermCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommonPaymentTermCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CommonPaymentTermCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CommonPaymentTermCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Payment term created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/payment-terms/{id}": {
      "get": {
        "tags": [
          "Payment Term"
        ],
        "summary": "Get a payment term.",
        "operationId": "GetPaymentTerm",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The payment terms for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonPaymentTermDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonPaymentTermDto"
                }
              }
            }
          },
          "404": {
            "description": "Payment terms did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/payment-terms/list": {
      "post": {
        "tags": [
          "Payment Term"
        ],
        "summary": "Find payment terms based on search parameters.",
        "operationId": "ListPaymentTerms",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentTermRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentTermRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentTermRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentTermRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of payment terms matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CommonPaymentTermDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CommonPaymentTermDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/purchase-orders": {
      "post": {
        "tags": [
          "Purchase Order"
        ],
        "summary": "Create a new draft purchase order",
        "operationId": "CreatePurchaseOrder",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Purchase order created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}": {
      "delete": {
        "tags": [
          "Purchase Order"
        ],
        "summary": "Delete a specific purchase order",
        "operationId": "DeletePurchaseOrder",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Purchase order did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Purchase Order"
        ],
        "summary": "Get a specific purchase order",
        "operationId": "GetPurchaseOrder",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The purchase order for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      },
      "patch": {
        "tags": [
          "Purchase Order"
        ],
        "summary": "Partially update a purchase order",
        "operationId": "PatchPurchaseOrder",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Purchase order item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Purchase order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      },
      "put": {
        "tags": [
          "Purchase Order"
        ],
        "summary": "Update a purchase order",
        "operationId": "UpdatePurchaseOrder",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Purchase order item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order did not exist"
          }
        }
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/pdf": {
      "get": {
        "tags": [
          "Purchase Order"
        ],
        "summary": "Download the PDF for a purchase order",
        "description": "The document is rendered when you call this, from the\norder's current state and the tenant's PDFs & Emails settings, so it is the same document\nthe product's Download button produces rather than a stored copy of one sent earlier. The\nfile name derives from the tenant's purchase-order title template with \"Purchase Order\"\nabbreviated to \"PO\" and spaces removed, so the default template yields `PO104.pdf` for an\nordered purchase order and `RFQ104.pdf` for one still in Draft. The title printed inside\nthe document keeps its spacing; only the file name is squashed. The printed line rows reflect\nthe tenant's line-consolidation setting: with it on, stored part lines that agree on item,\nunit price after discount, expected receive date and the item's custom unit-of-measure\nmultiplier print as one row carrying their summed quantity, their combined subtotal and each\nstored line's number, so the document may show fewer rows than the order holds. Outside\nprocessing lines consolidate on item, price and expected receive date.",
        "operationId": "GetPurchaseOrderPdf",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The purchase order PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "No purchase order with that id, or the order is deleted"
          },
          "500": {
            "description": "The renderer did not produce a usable document"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/list": {
      "post": {
        "tags": [
          "Purchase Order"
        ],
        "summary": "Find purchase orders based on search parameters.",
        "operationId": "ListPurchaseOrder",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of purchase orders matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderListDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderListDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/status": {
      "post": {
        "tags": [
          "Purchase Order"
        ],
        "summary": "Update a purchase order status",
        "operationId": "StatusUpdatePurchaseOrder",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderRequestUpdateStatus"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderRequestUpdateStatus"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderRequestUpdateStatus"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderRequestUpdateStatus"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Purchase order cannot be moved to requested status"
          },
          "404": {
            "description": "Purchase order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{id}/customFields": {
      "put": {
        "tags": [
          "Purchase Order Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a purchase order",
        "operationId": "UpdatePurchaseOrderCustomFields",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The purchase order identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{id}/custom-fields": {
      "put": {
        "tags": [
          "Purchase Order Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a purchase order",
        "operationId": "UpdatePurchaseOrderCustomFields",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The purchase order identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/discount-line-item": {
      "get": {
        "tags": [
          "Purchase Order Discount Line Item"
        ],
        "summary": "Get the discount line item for a purchase order",
        "operationId": "GetPurchaseOrderDiscountLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Discount line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderDiscountLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderDiscountLineItemDto"
                }
              }
            }
          },
          "204": {
            "description": "Discount line item does not exist"
          },
          "404": {
            "description": "Purchase order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/fee-line-items": {
      "post": {
        "tags": [
          "Purchase Order Fee Line Item"
        ],
        "summary": "Create a fee line item on a purchase order",
        "operationId": "CreatePurchaseOrderFeeLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderFeeLineItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderFeeLineItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderFeeLineItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderFeeLineItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Fee line item added to purchase order",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order does not exist"
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/fee-line-items/{lineItemId}": {
      "delete": {
        "tags": [
          "Purchase Order Fee Line Item"
        ],
        "summary": "Delete a fee line item on a purchase order",
        "operationId": "DeletePurchaseOrderFeeLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Purchase order or line item cannot be modified"
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Purchase Order Fee Line Item"
        ],
        "summary": "Get a specific fee line item for a purchase order",
        "operationId": "GetPurchaseOrderFeeLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderFeeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderFeeLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or fee line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      },
      "patch": {
        "tags": [
          "Purchase Order Fee Line Item"
        ],
        "summary": "Partially update a specific fee line item for a purchase order",
        "operationId": "PatchPurchaseOrderFeeLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderFeeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderFeeLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Purchase order or fee line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      },
      "put": {
        "tags": [
          "Purchase Order Fee Line Item"
        ],
        "summary": "Update a specific fee line item for a purchase order",
        "operationId": "UpdatePurchaseOrderFeeLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderFeeLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderFeeLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderFeeLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderFeeLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderFeeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderFeeLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or fee line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/fee-line-items/list": {
      "post": {
        "tags": [
          "Purchase Order Fee Line Item"
        ],
        "summary": "Get a list of fee lines items for a purchase order",
        "operationId": "ListPurchaseOrderFeeLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of fee line items for the given purchase order id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderFeeLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderFeeLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The purchase order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/fee-line-items/{lineItemId}/tax-allocations": {
      "get": {
        "tags": [
          "Purchase Order Fee Line Item"
        ],
        "summary": "Get tax allocations for a specific fee line item on a purchase order",
        "operationId": "GetPurchaseOrderFeeLineItemTaxAllocations",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tax allocation data for the fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderLineItemTaxAllocationResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderLineItemTaxAllocationResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Purchase Order Line Item"
        ],
        "summary": "Get a specific line item for a purchase order of generic type",
        "operationId": "GetPurchaseOrderLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/line-items/list": {
      "post": {
        "tags": [
          "Purchase Order Line Item"
        ],
        "summary": "Get a list of lines items for a purchase order, regardless of type",
        "operationId": "ListPurchaseOrderLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of all line items for the given purchase order id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The purchase order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/line-items/{lineItemId}/tax-allocations": {
      "get": {
        "tags": [
          "Purchase Order Line Item"
        ],
        "summary": "Get tax allocations for a specific line item on a purchase order",
        "operationId": "GetPurchaseOrderLineItemTaxAllocations",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tax allocation data for the line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderLineItemTaxAllocationResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderLineItemTaxAllocationResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/outside-processing-line-items": {
      "post": {
        "tags": [
          "Purchase Order Outside Processing Line Item"
        ],
        "summary": "Create an outside processing line item on a purchase order",
        "operationId": "CreatePurchaseOrderOutsideProcessingLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Outside processing line item added to purchase order",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order not found"
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/outside-processing-line-items/{lineItemId}": {
      "delete": {
        "tags": [
          "Purchase Order Outside Processing Line Item"
        ],
        "summary": "Delete an outside processing line item on a purchase order",
        "operationId": "DeletePurchaseOrderOutsideProcessingLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Purchase order or line item cannot be modified"
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Purchase Order Outside Processing Line Item"
        ],
        "summary": "Get a specific outside processing line item for a purchase order",
        "operationId": "GetPurchaseOrderOutsideProcessingLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Outside processing line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      },
      "patch": {
        "tags": [
          "Purchase Order Outside Processing Line Item"
        ],
        "summary": "Partially update a specific outside processing line item for a purchase order",
        "operationId": "PatchPurchaseOrderOutsideProcessingLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Outside processing line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "Purchase order or line item cannot be modified, or the patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      },
      "put": {
        "tags": [
          "Purchase Order Outside Processing Line Item"
        ],
        "summary": "Update a specific outside processing line item for a purchase order",
        "operationId": "UpdatePurchaseOrderOutsideProcessingLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Outside processing line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "Purchase order or line item cannot be modified"
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/outside-processing-line-items/list": {
      "post": {
        "tags": [
          "Purchase Order Outside Processing Line Item"
        ],
        "summary": "Get a list of outside processing lines items for a purchase order",
        "operationId": "ListPurchaseOrderOutsideProcessingLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of outside processing line items for the given purchase order id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderOutsideProcessingLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The purchase order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/outside-processing-line-items/{lineItemId}/tax-allocations": {
      "get": {
        "tags": [
          "Purchase Order Outside Processing Line Item"
        ],
        "summary": "Get tax allocations for a specific outside processing line item on a purchase order",
        "operationId": "GetPurchaseOrderOutsideProcessingLineItemTaxAllocations",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tax allocation data for the outside processing line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderLineItemTaxAllocationResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderLineItemTaxAllocationResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/part-line-items": {
      "post": {
        "tags": [
          "Purchase Order Part Line Item"
        ],
        "summary": "Create a part line item on a purchase order",
        "operationId": "CreatePurchaseOrderPartLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderPartLineItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderPartLineItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderPartLineItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderPartLineItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Part line item added to purchase order",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/part-line-items/{lineItemId}": {
      "delete": {
        "tags": [
          "Purchase Order Part Line Item"
        ],
        "summary": "Delete a part line item on a purchase order",
        "operationId": "DeletePurchaseOrderPartLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Purchase order or line item cannot be modified"
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Purchase Order Part Line Item"
        ],
        "summary": "Get a specific part line item for a purchase order",
        "operationId": "GetPurchaseOrderPartLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderPartLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderPartLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      },
      "patch": {
        "tags": [
          "Purchase Order Part Line Item"
        ],
        "summary": "Partially update a specific part line item for a purchase order",
        "operationId": "PatchPurchaseOrderPartLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderPartLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderPartLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      },
      "put": {
        "tags": [
          "Purchase Order Part Line Item"
        ],
        "summary": "Update a specific part line item for a purchase order",
        "operationId": "UpdatePurchaseOrderPartLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderPartLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderPartLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderPartLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderPartLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderPartLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderPartLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/part-line-items/list": {
      "post": {
        "tags": [
          "Purchase Order Part Line Item"
        ],
        "summary": "Get a list of part line items for a purchase order",
        "operationId": "ListPurchaseOrderPartLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of part line items for the given purchase order id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderPartLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderPartLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The purchase order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/part-line-items/{lineItemId}/tax-allocations": {
      "get": {
        "tags": [
          "Purchase Order Part Line Item"
        ],
        "summary": "Get tax allocations for a specific part line item on a purchase order",
        "operationId": "GetPurchaseOrderPartLineItemTaxAllocations",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tax allocation data for the part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderLineItemTaxAllocationResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderLineItemTaxAllocationResponseDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/tax-line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Purchase Order Tax Line Item"
        ],
        "summary": "Get a specific tax line item for a purchase order",
        "operationId": "GetPurchaseOrderTaxLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tax line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderTaxLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderTaxLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or tax line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/tax-line-items/list": {
      "post": {
        "tags": [
          "Purchase Order Tax Line Item"
        ],
        "summary": "Get a list of tax lines items for a purchase order",
        "operationId": "ListPurchaseOrderTaxLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of tax line items for the given purchase order id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderTaxLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderTaxLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The purchase order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/vendor-credit-line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Purchase Order Vendor Credit Line Item"
        ],
        "summary": "Get a specific vendor credit line item for a purchase order",
        "operationId": "GetPurchaseOrderVendorCreditLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Vendor credit line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      },
      "patch": {
        "tags": [
          "Purchase Order Vendor Credit Line Item"
        ],
        "summary": "Partially update a specific vendor credit line item for a purchase order",
        "operationId": "PatchPurchaseOrderVendorCreditLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Vendor credit line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      },
      "put": {
        "tags": [
          "Purchase Order Vendor Credit Line Item"
        ],
        "summary": "Update a specific vendor credit line item for a purchase order",
        "operationId": "UpdatePurchaseOrderVendorCreditLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Vendor credit line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Purchase order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-Edit Purchase Order"
        ]
      }
    },
    "/api/purchase-orders/{purchaseOrderId}/vendor-credit-line-items/list": {
      "post": {
        "tags": [
          "Purchase Order Vendor Credit Line Item"
        ],
        "summary": "Get a list of vendor credit line items for a specific purchase order",
        "operationId": "ListPurchaseOrderVendorCreditLineItem",
        "parameters": [
          {
            "name": "purchaseOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of vendor credit line items for the given purchase order id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PurchaseOrderVendorCreditLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Purchase order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-PurchaseOrders-View Purchase Order"
        ]
      }
    },
    "/api/quotes/{quoteId}/capable-to-promise": {
      "post": {
        "tags": [
          "Quote"
        ],
        "summary": "Calculate when a quote could be made",
        "description": "Queues a capable-to-promise calculation, which schedules the quote's make lines against the current\nschedule at high, moderate and low job priority without creating any jobs. The calculation runs in the\nbackground; read its result with Get Quote Capable To Promise. A calculation already pending for the quote is\nnot queued again, and the request still answers 202. The body and each of its fields are optional.",
        "operationId": "CalculateQuoteCapableToPromise",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCapableToPromiseRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCapableToPromiseRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCapableToPromiseRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCapableToPromiseRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "The calculation was queued, or one was already pending"
          },
          "403": {
            "description": "Capable to promise is disabled for this site",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoErrorDetails"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoErrorDetails"
                }
              }
            }
          },
          "404": {
            "description": "Quote did not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoErrorDetails"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoErrorDetails"
                }
              }
            }
          },
          "503": {
            "description": "This API host can't run the calculation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoErrorDetails"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoErrorDetails"
                }
              }
            }
          }
        },
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      },
      "get": {
        "tags": [
          "Quote"
        ],
        "summary": "Get the latest capable-to-promise calculation for a quote",
        "description": "Returns the latest calculation that has started for the quote. A calculation queued with Calculate Quote\nCapable To Promise is not returned until it starts; until then this returns the previous calculation, so\ncompare `createdUtc` with the value read before to tell when the new one has replaced it. A quote with\nno calculation returns `notRun`. Each run is one job-priority scenario; its `estimatedEndUtc` is\nwhen the whole quote could be made at that priority, and is null when any of its lines has no estimated end.",
        "operationId": "GetQuoteCapableToPromise",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The latest calculation for the quote",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteCapableToPromiseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteCapableToPromiseDto"
                }
              }
            }
          },
          "403": {
            "description": "Capable to promise is disabled for this site"
          },
          "404": {
            "description": "Quote did not exist"
          }
        },
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/to-sales-order": {
      "post": {
        "tags": [
          "Quote"
        ],
        "summary": "Convert a quote to a sales order",
        "operationId": "ConvertToSalesOrder",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sales order created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issue or invalid/bad request"
          },
          "404": {
            "description": "Quote did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote",
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/quote": {
      "post": {
        "tags": [
          "Quote"
        ],
        "summary": "TO BE REMOVED 06/30/2025 - Create a new draft quote",
        "description": "Please use provided route instead ==> quotes",
        "operationId": "CreateQuote_deprecated",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Quote created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "deprecated": true,
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes": {
      "post": {
        "tags": [
          "Quote"
        ],
        "summary": "Create a new draft quote",
        "operationId": "CreateQuote",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Quote created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quote/{quoteId}": {
      "delete": {
        "tags": [
          "Quote"
        ],
        "summary": "TO BE REMOVED 06/30/2025 - Delete a specific Quote",
        "description": "Please use provided route instead ==> quotes/{quoteId}",
        "operationId": "DeleteQuote_deprecated",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Quote did not exist"
          }
        },
        "deprecated": true
      }
    },
    "/api/quotes/{quoteId}": {
      "delete": {
        "tags": [
          "Quote"
        ],
        "summary": "Delete a specific Quote",
        "operationId": "DeleteQuote",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Quote did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Quote"
        ],
        "summary": "Get a specific Quote",
        "operationId": "GetQuote",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The Quote for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteDto"
                }
              }
            }
          },
          "404": {
            "description": "Quote did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      },
      "patch": {
        "tags": [
          "Quote"
        ],
        "summary": "Partially update a quote",
        "operationId": "PatchQuote",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Quote item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Quote did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      },
      "put": {
        "tags": [
          "Quote"
        ],
        "summary": "Update a quote",
        "operationId": "UpdateQuote",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Quote item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteDto"
                }
              }
            }
          },
          "404": {
            "description": "Quote did not exist"
          }
        }
      }
    },
    "/api/quotes/{quoteId}/pdf": {
      "get": {
        "tags": [
          "Quote"
        ],
        "summary": "Download the PDF for a quote",
        "description": "The document is rendered when you call this, from the\nquote's current state and the tenant's PDFs & Emails settings, so it is the same document\nthe product's Download button produces rather than a stored copy of one sent earlier. The\nfile name carries the quote's revision letter when it has one.",
        "operationId": "GetQuotePdf",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The quote PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "No quote with that id, or the quote is deleted"
          },
          "500": {
            "description": "The renderer did not produce a usable document"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/list": {
      "post": {
        "tags": [
          "Quote"
        ],
        "summary": "Find quotes based on search parameters.",
        "operationId": "ListQuote",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of quotes matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QuoteDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QuoteDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/status": {
      "post": {
        "tags": [
          "Quote"
        ],
        "summary": "Update a quote status",
        "operationId": "StatusUpdateQuote",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteRequestUpdateQuoteStatusRequest"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteRequestUpdateQuoteStatusRequest"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteRequestUpdateQuoteStatusRequest"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteRequestUpdateQuoteStatusRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "invalid status change"
          },
          "404": {
            "description": "quote did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{id}/customFields": {
      "put": {
        "tags": [
          "Quote Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a quote",
        "operationId": "UpdateQuoteCustomFields",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The quote identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{id}/custom-fields": {
      "put": {
        "tags": [
          "Quote Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a quote",
        "operationId": "UpdateQuoteCustomFields",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The quote identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/discount-line-item": {
      "delete": {
        "tags": [
          "Quote Discount Line Item"
        ],
        "summary": "Delete the discount line item for a Quote",
        "operationId": "DeleteQuoteDiscountLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Discount line item did not exist"
          },
          "404": {
            "description": "Quote did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Quote Discount Line Item"
        ],
        "summary": "Get the discount line item for a quote",
        "operationId": "GetQuoteDiscountLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Discount line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteDiscountLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteDiscountLineItemDto"
                }
              }
            }
          },
          "204": {
            "description": "Discount line item does not exist"
          },
          "404": {
            "description": "Quote did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quote/{quoteId}/discount-line-item": {
      "put": {
        "tags": [
          "Quote Discount Line Item"
        ],
        "summary": "Update the discount line item for a quote",
        "operationId": "UpdateQuoteDiscountLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteDiscountLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteDiscountLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteDiscountLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteDiscountLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Discount line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteDiscountLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteDiscountLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Quote does not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/fee-line-items": {
      "post": {
        "tags": [
          "Quote Fee Line Item"
        ],
        "summary": "Create a fee line item on a Quote",
        "operationId": "CreateQuoteFeeLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteFeeLineItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteFeeLineItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteFeeLineItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteFeeLineItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Fee line item added to Quote",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/fee-line-items/{lineItemId}": {
      "delete": {
        "tags": [
          "Quote Fee Line Item"
        ],
        "summary": "Delete a specific fee line item for a Quote",
        "operationId": "DeleteQuoteFeeLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Fee line item did not exist"
          },
          "404": {
            "description": "Quote did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Quote Fee Line Item"
        ],
        "summary": "Get a specific fee line item for a Quote",
        "operationId": "GetQuoteFeeLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteFeeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteFeeLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Quote or fee line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      },
      "put": {
        "tags": [
          "Quote Fee Line Item"
        ],
        "summary": "Update a specific fee line item for a Quote",
        "operationId": "UpdateQuoteFeeLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteFeeLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteFeeLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteFeeLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteFeeLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteFeeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteFeeLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Quote or fee line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/fee-line-items/list": {
      "post": {
        "tags": [
          "Quote Fee Line Item"
        ],
        "summary": "Get a list of fee lines items for a Quote",
        "operationId": "ListQuoteFeeLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of fee line items for the given Quote id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QuoteFeeLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QuoteFeeLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The Quote did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items": {
      "post": {
        "tags": [
          "Quote Part Line Item"
        ],
        "summary": "Create a part line item on a Quote",
        "operationId": "CreateQuotePartLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Part line item added to Quote",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/batch": {
      "post": {
        "tags": [
          "Quote Part Line Item"
        ],
        "summary": "Create one or more part line items on a quote",
        "operationId": "CreateQuotePartLineItemBatch",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemCreateBatchDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemCreateBatchDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemCreateBatchDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemCreateBatchDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Part line items added to quote",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchCreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchCreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}": {
      "delete": {
        "tags": [
          "Quote Part Line Item"
        ],
        "summary": "Delete a specific part line item for a Quote",
        "operationId": "DeleteQuotePartLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Part line item did not exist"
          },
          "404": {
            "description": "Quote did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Quote Part Line Item"
        ],
        "summary": "Get a specific part line item for a quote",
        "operationId": "GetQuotePartLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "includeCostBreakdown",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotePartLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotePartLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Quote or line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      },
      "put": {
        "tags": [
          "Quote Part Line Item"
        ],
        "summary": "Update a specific part line item for a Quote",
        "operationId": "UpdateQuotePartLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuotePartLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotePartLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotePartLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Quote or line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/list": {
      "post": {
        "tags": [
          "Quote Part Line Item"
        ],
        "summary": "Get a list of part lines items for a quote",
        "operationId": "ListQuotePartLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "includeCostBreakdown",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of part line items for the given quote id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QuotePartLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QuotePartLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The quote did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/cost-breakdown": {
      "get": {
        "tags": [
          "Quote Part Line Item"
        ],
        "summary": "Get the cost breakdown for a specific part line item for a quote",
        "operationId": "GetQuotePartLineItemCostBreakdown",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonCostBreakdownDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonCostBreakdownDto"
                }
              }
            }
          },
          "404": {
            "description": "Quote or line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote",
          "Pricing-Margins-View Margins"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/customFields": {
      "put": {
        "tags": [
          "Quote Part Line Item Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a line item",
        "operationId": "UpdateQuotePartLineItemCustomFields",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "description": "The quote identifier that contains the line item",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "description": "The line item identifier that contains the custom fields you want to update.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/custom-fields": {
      "put": {
        "tags": [
          "Quote Part Line Item Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a line item",
        "operationId": "UpdateQuotePartLineItemCustomFields",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "description": "The quote identifier that contains the line item",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "description": "The line item identifier that contains the custom fields you want to update.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{QuoteId}/part-line-items/{lineItemId}/routing/{routingId}/input-items": {
      "post": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Create a full routing input item for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingInputItemCreate",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}/input-items/{inputItemId}": {
      "delete": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Delete a full routing input item from quote part line item",
        "operationId": "QuotePartLineItemFullRoutingInputItemDelete",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Gets a full routing input item for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingInputItemGet",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      },
      "post": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Update a full routing input item for a quote part line item\nLines assigned to an operation are not supported yet: the operation keeps its own copy of the line's\nquantities, so a change to `valueTypeUnits` or `fixedUnits` is reverted when the routing is next loaded.",
        "operationId": "QuotePartLineItemFullRoutingInputItemUpdate",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}/input-items/list": {
      "post": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Lists the full routing input items for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingInputItemList",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}/input-materials/list": {
      "post": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "List input materials for a quote part line item's routing",
        "operationId": "QuotePartLineItemFullRoutingInputMaterialList",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}/ipts/{phase}": {
      "post": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Creates a full routing operations for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingIptCreate",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}/ipts/{phase}/{iptId}": {
      "delete": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Deletes a full routing operation in process tracking field for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingIptDelete",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          },
          {
            "name": "iptId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Gets a full routing operation in process tracking field for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingIptGet",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          },
          {
            "name": "iptId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingIptDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingIptDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}/ipts/{phase}/list": {
      "post": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Lists full routing operation in process tracking fields for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingIptList",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingIptDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingIptDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/make-summary": {
      "get": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Get a summary of the make routing for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingMakeSummaryGet",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoutingDataFullRoutingMakeSummaryDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoutingDataFullRoutingMakeSummaryDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}/operations": {
      "post": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Creates a full routing operation for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingOperationCreate",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}": {
      "delete": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Removes a full routing operation for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingOperationDelete",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Gets a full routing operation for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingOperationGet",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingOperationDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingOperationDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      },
      "post": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Updates a full routing operation for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingOperationUpdate",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}/items/{operationItemId}": {
      "get": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Gets a full routing operation item for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingOperationItemGet",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}/items/list": {
      "post": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "List full routing operation items for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingOperationItemList",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}/operations/list": {
      "post": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Lists full routing operations for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingOperationList",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingOperationDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingOperationDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/part-line-items/{lineItemId}/routing/{routingId}": {
      "get": {
        "tags": [
          "Quote Part Line Item Full Routing"
        ],
        "summary": "Gets a full routing routing for a quote part line item",
        "operationId": "QuotePartLineItemFullRoutingRoutingGet",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/tax-line-items": {
      "post": {
        "tags": [
          "Quote Tax Line Item"
        ],
        "summary": "Create a tax line item on a Quote",
        "operationId": "CreateQuoteTaxLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteTaxLineItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteTaxLineItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteTaxLineItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteTaxLineItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Tax line item added to Quote",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/tax-line-items/{lineItemId}": {
      "delete": {
        "tags": [
          "Quote Tax Line Item"
        ],
        "summary": "Delete a specific tax line item for a Quote",
        "operationId": "DeleteQuoteTaxLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Tax line item did not exist"
          },
          "404": {
            "description": "Quote did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Quote Tax Line Item"
        ],
        "summary": "Get a specific tax line item for a Quote",
        "operationId": "GetQuoteTaxLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tax line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteTaxLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteTaxLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Quote or tax line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      },
      "put": {
        "tags": [
          "Quote Tax Line Item"
        ],
        "summary": "Update a specific tax line item for a Quote",
        "operationId": "UpdateQuoteTaxLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteTaxLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteTaxLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteTaxLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteTaxLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Tax line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteTaxLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteTaxLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Quote or tax line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-Edit Quote"
        ]
      }
    },
    "/api/quotes/{quoteId}/tax-line-items/list": {
      "post": {
        "tags": [
          "Quote Tax Line Item"
        ],
        "summary": "Get a list of tax lines items for a Quote",
        "operationId": "ListQuoteTaxLineItem",
        "parameters": [
          {
            "name": "quoteId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of tax line items for the given Quote id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QuoteTaxLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QuoteTaxLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The Quote did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/receiving/receipts": {
      "post": {
        "tags": [
          "Receiving Receipt"
        ],
        "summary": "Create a receipt for a specific purchase or sales order",
        "operationId": "CreateReceipt",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingReceiptCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingReceiptCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingReceiptCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingReceiptCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Receipt created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingReceiptDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingReceiptDto"
                }
              }
            }
          },
          "404": {
            "description": "Receipt was not created"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Receiving-Receiving-Edit Receiving"
        ]
      }
    },
    "/api/receiving/receipts/{receiptId}": {
      "get": {
        "tags": [
          "Receiving Receipt"
        ],
        "summary": "Get a specific receipt on a purchase or sales order",
        "operationId": "GetReceipt",
        "parameters": [
          {
            "name": "receiptId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Receipt",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingReceiptDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingReceiptDto"
                }
              }
            }
          },
          "404": {
            "description": "Receipt did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Receiving-Receiving-View Receiving"
        ]
      },
      "patch": {
        "tags": [
          "Receiving Receipt"
        ],
        "summary": "Partially update a specific receipt for a purchase or sales order",
        "operationId": "PatchReceipt",
        "parameters": [
          {
            "name": "receiptId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Receipt",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingReceiptDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingReceiptDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Receipt did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Receiving-Receiving-Edit Receiving"
        ]
      },
      "put": {
        "tags": [
          "Receiving Receipt"
        ],
        "summary": "Update a specific receipt for a purchase or sales order",
        "operationId": "UpdateReceipt",
        "parameters": [
          {
            "name": "receiptId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingReceiptUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingReceiptUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingReceiptUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingReceiptUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Receipt",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingReceiptDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingReceiptDto"
                }
              }
            }
          },
          "404": {
            "description": "Receipt did not exist"
          }
        }
      }
    },
    "/api/receiving/receipts/list": {
      "post": {
        "tags": [
          "Receiving Receipt"
        ],
        "summary": "Get a list of receipts for purchase and sales orders",
        "operationId": "ListReceipt",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingRequestListFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingRequestListFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingRequestListFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingRequestListFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of receipts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceivingReceiptDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceivingReceiptDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Receiving-Receiving-View Receiving"
        ]
      }
    },
    "/api/receiving/receipts/{receiptId}/line-items/{lineId}": {
      "get": {
        "tags": [
          "Receiving Receipt Line Item"
        ],
        "summary": "Get a specific line item for a receipt on a purchase or sales order",
        "operationId": "GetReceiptLineItem",
        "parameters": [
          {
            "name": "receiptId",
            "in": "path",
            "description": "The receiving id",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "lineId",
            "in": "path",
            "description": "This will match on the line item id (from the purchase order or sales order) or the line id of the specific receiving",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Receipt or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Receiving-Receiving-View Receiving"
        ]
      },
      "patch": {
        "tags": [
          "Receiving Receipt Line Item"
        ],
        "summary": "Partially update a specific receipt for a purchase or sales order",
        "operationId": "PatchReceiptLineItem",
        "parameters": [
          {
            "name": "receiptId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "lineId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Receipt",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Receipt did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Receiving-Receiving-Edit Receiving"
        ]
      },
      "delete": {
        "tags": [
          "Receiving Receipt Line Item"
        ],
        "summary": "Roll back a specific line item for a receipt on a purchase or sales order",
        "operationId": "RollbackReceiptLineItem",
        "parameters": [
          {
            "name": "receiptId",
            "in": "path",
            "description": "The receiving id",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "lineId",
            "in": "path",
            "description": "This will match on the line item id (from the purchase order or sales order) or the line id of the specific receiving",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Receipt or line item did not exist"
          }
        }
      },
      "put": {
        "tags": [
          "Receiving Receipt Line Item"
        ],
        "summary": "Update a specific receipt line item for a purchase or sales order receiving",
        "operationId": "UpdateReceiptLineItem",
        "parameters": [
          {
            "name": "receiptId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "lineId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Receipt line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Receipt did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Receiving-Receiving-Edit Receiving"
        ]
      }
    },
    "/api/receiving/receipts/{receiptId}/line-items/list": {
      "post": {
        "tags": [
          "Receiving Receipt Line Item"
        ],
        "summary": "List line items for a receipt on a purchase or sales order",
        "operationId": "ListReceiptLineItem",
        "parameters": [
          {
            "name": "receiptId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Line items for the given receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Receipt did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Receiving-Receiving-View Receiving"
        ]
      }
    },
    "/api/refund-reason-codes/{id}": {
      "get": {
        "tags": [
          "Refund Reason Code"
        ],
        "summary": "Get a refund code.",
        "operationId": "GetRefundReasonCode",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The refund reason code for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "404": {
            "description": "Refund reason code did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/refund-reason-codes/list": {
      "post": {
        "tags": [
          "Refund Reason Code"
        ],
        "summary": "Find refund reason codes based on search parameters.",
        "operationId": "ListRefundReasonCode",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of refund reason codes matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/reporting/inventory/list": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Lists report-ready on-hand inventory rows from the inventory reporting view, including per-unit and\nextended valuation (material/labor/machine/OP), lot and location context, and item categorization\nso callers do not need to hand-join inventory to lots, items, and their details. Returns exactly\none row per (item, lot, location), so summing on-hand quantity or value across the rows does not\nover-count a lot.",
        "operationId": "ListInventoryReport",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingInventoryReportFilter"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingInventoryReportFilter"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingInventoryReportFilter"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingInventoryReportFilter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A page of inventory report rows with the total matching count.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingInventoryReportRow"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingInventoryReportRow"
                }
              }
            }
          },
          "403": {
            "description": "The viewer lacks the View Inventory permission."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "ItemsAndInventory-Items-View Inventory"
        ]
      }
    },
    "/api/reporting/invoice/list": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Lists report-ready invoice-line rows from the invoice reporting view, including line type,\npricing, tax, and aging detail joined to sales-order and shipment context so callers do not need\nto hand-join invoices to invoice line items, sales orders, and shipments.",
        "operationId": "ListInvoiceReport",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingInvoiceReportFilter"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingInvoiceReportFilter"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingInvoiceReportFilter"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingInvoiceReportFilter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A page of invoice report rows with the total matching count.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingInvoiceReportRow"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingInvoiceReportRow"
                }
              }
            }
          },
          "403": {
            "description": "The viewer lacks the View Invoices permission."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Invoicing-Invoicing-View Invoices"
        ]
      }
    },
    "/api/reporting/job-activity-by-operator/list": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Lists report-ready per-operator operation rows from the job-activity-by-operator reporting view,\nincluding setup/labor/machine time and cost, run-by-run quantities, rates, and job/routing context\nso callers do not need to hand-join jobs to items-to-make, operations, timers, and job logs.",
        "operationId": "ListJobActivityByOperatorReport",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingJobActivityByOperatorReportFilter"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingJobActivityByOperatorReportFilter"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingJobActivityByOperatorReportFilter"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingJobActivityByOperatorReportFilter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A page of job-activity-by-operator report rows with the total matching count.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingJobActivityByOperatorReportRow"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingJobActivityByOperatorReportRow"
                }
              }
            }
          },
          "403": {
            "description": "The viewer lacks one of the required permissions (View Job and View Time Management)."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/reporting/job-activity/list": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Lists report-ready job-operation rows from the job-activity reporting view, including schedule,\ntimer, completion-progress, and routing context so callers do not need to hand-join jobs to\nitems-to-make, operations, timers, and scheduling data.",
        "operationId": "ListJobActivityReport",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingJobActivityReportFilter"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingJobActivityReportFilter"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingJobActivityReportFilter"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingJobActivityReportFilter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A page of job-activity report rows with the total matching count.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingJobActivityReportRow"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingJobActivityReportRow"
                }
              }
            }
          },
          "403": {
            "description": "The viewer lacks the View Job permission."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/reporting/material-requirements/list": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Lists report-ready material and item requirement rows for scheduled job operations from the\nmaterial-requirements reporting view, with resolved required quantities, so callers do not need\nto fan out per job to routings, items-to-make, operations, and per-operation requirement lookups.",
        "operationId": "ListMaterialRequirementsReport",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingMaterialRequirementsReportFilter"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingMaterialRequirementsReportFilter"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingMaterialRequirementsReportFilter"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingMaterialRequirementsReportFilter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A page of material-requirements report rows with the total matching count.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingMaterialRequirementsReportRow"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingMaterialRequirementsReportRow"
                }
              }
            }
          },
          "403": {
            "description": "The viewer lacks the View Job permission."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/reporting/quote/list": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Lists report-ready quote rows from the quote reporting view, including totals, cost, status, and\nlifecycle dates, so callers do not need to hand-assemble quote-level summary data.",
        "operationId": "ListQuoteReport",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingQuoteReportFilter"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingQuoteReportFilter"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingQuoteReportFilter"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingQuoteReportFilter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A page of quote report rows with the total matching count.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingQuoteReportRow"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingQuoteReportRow"
                }
              }
            }
          },
          "403": {
            "description": "The viewer lacks the View Quote permission."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-Quotes-View Quote"
        ]
      }
    },
    "/api/reporting/sales-order-lines/list": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Lists report-ready sales-order line rows from the sales-order line-items reporting view,\nincluding pre-computed cost, invoice, ship, and return columns so callers do not need to\nhand-join sales orders to line items, jobs, invoices, shipments, and returns.",
        "operationId": "ListSalesOrderLinesReport",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingSalesOrderLinesReportFilter"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingSalesOrderLinesReportFilter"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingSalesOrderLinesReportFilter"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingSalesOrderLinesReportFilter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A page of sales-order line report rows with the total matching count.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingSalesOrderLinesReportRow"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingSalesOrderLinesReportRow"
                }
              }
            }
          },
          "403": {
            "description": "The viewer lacks one of the required permissions (View Sales Order, View Customer, View Job, View Invoices, and View Shipments)."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/reporting/shipping/list": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Lists report-ready shipment line rows from the shipping reporting view, including pre-computed\ndollar columns ($ shipped, $ unshipped, total $ ordered, unit price) so callers do not need to\nhand-join shipments to sales-order line items.",
        "operationId": "ListShippingReport",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingShippingReportFilter"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingShippingReportFilter"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingShippingReportFilter"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingShippingReportFilter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A page of shipping report rows with the total matching count.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingShippingReportRow"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingShippingReportRow"
                }
              }
            }
          },
          "403": {
            "description": "The viewer lacks the View Shipments permission."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Shipping-Shipping-View Shipments"
        ]
      }
    },
    "/api/reporting/time-clock/list": {
      "post": {
        "tags": [
          "Reporting"
        ],
        "summary": "Lists report-ready time-clock rows from the time-clock reporting view, including clock-in/clock-out\ntimes, computed shift hours, reason and clock codes, and override-audit context so callers do not\nneed to hand-join timer entries to their reason and clock-code tags.",
        "operationId": "ListTimeClockReport",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingTimeClockReportFilter"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingTimeClockReportFilter"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingTimeClockReportFilter"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/DtoReportingTimeClockReportFilter"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A page of time-clock report rows with the total matching count.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingTimeClockReportRow"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoDtoReportingTimeClockReportRow"
                }
              }
            }
          },
          "403": {
            "description": "The viewer lacks the View Time Management permission."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Time-Time-View Time Management"
        ]
      }
    },
    "/api/sales-orders": {
      "post": {
        "tags": [
          "Sales Order"
        ],
        "summary": "Create a new draft sales order",
        "operationId": "CreateSalesOrder",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Sales order created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}": {
      "delete": {
        "tags": [
          "Sales Order"
        ],
        "summary": "Delete a specific sales order",
        "operationId": "DeleteSalesOrder",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Sales order did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Sales Order"
        ],
        "summary": "Get a specific sales order",
        "operationId": "GetSalesOrder",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The sales order for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      },
      "patch": {
        "tags": [
          "Sales Order"
        ],
        "summary": "Partially update an SalesOrder",
        "operationId": "PatchSalesOrder",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "SalesOrder item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "SalesOrder did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      },
      "put": {
        "tags": [
          "Sales Order"
        ],
        "summary": "Update a sales order",
        "operationId": "UpdateSalesOrder",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Sales order item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order did not exist"
          }
        }
      }
    },
    "/api/sales-orders/{salesOrderId}/pdf": {
      "get": {
        "tags": [
          "Sales Order"
        ],
        "summary": "Download the PDF for a sales order",
        "description": "The document is rendered when you call this, from the\norder's current state and the tenant's PDFs & Emails settings, so it is the same document\nthe product's Download button produces rather than a stored copy of one sent earlier.",
        "operationId": "GetSalesOrderPdf",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The sales order PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "No sales order with that id, or the order is deleted"
          },
          "500": {
            "description": "The renderer did not produce a usable document"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/list": {
      "post": {
        "tags": [
          "Sales Order"
        ],
        "summary": "Find sales orders based on search parameters.",
        "operationId": "ListSalesOrder",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of sales orders matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/status": {
      "post": {
        "tags": [
          "Sales Order"
        ],
        "summary": "Update a sales order status",
        "operationId": "StatusUpdateSalesOrder",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRequestUpdateStatus"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRequestUpdateStatus"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRequestUpdateStatus"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRequestUpdateStatus"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success"
          },
          "404": {
            "description": "Sales order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/blanket-line-items/list": {
      "post": {
        "tags": [
          "Sales Order Blanket Line Item"
        ],
        "summary": "Get a list of blanket lines items for a sales order",
        "operationId": "ListSalesOrderBlanketLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of blanket line items for the given sales order id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderBlanketLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderBlanketLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The sales order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/blanket-line-items/{lineItemId}": {
      "patch": {
        "tags": [
          "Sales Order Blanket Line Item"
        ],
        "summary": "Partially update a specific blanket line item for a sales order",
        "operationId": "PatchSalesOrderBlanketLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Blanket line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderBlanketLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderBlanketLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Sales order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      },
      "put": {
        "tags": [
          "Sales Order Blanket Line Item"
        ],
        "summary": "Update a specific blanket line item for a sales order",
        "operationId": "UpdateSalesOrderBlanketLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderBlanketLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderBlanketLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderBlanketLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderBlanketLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Blanket line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderBlanketLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderBlanketLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or blanket line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      },
      "get": {
        "tags": [
          "Sales Order Blanket Line Item"
        ],
        "summary": "Get a specific blanket line item for a sales order",
        "operationId": "GetSalesOrderBlanketLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Blanket line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderBlanketLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderBlanketLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or blanket line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{id}/customFields": {
      "put": {
        "tags": [
          "Sales Order Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a sales order",
        "operationId": "UpdateSalesOrderCustomFields",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The sales order identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{id}/custom-fields": {
      "put": {
        "tags": [
          "Sales Order Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a sales order",
        "operationId": "UpdateSalesOrderCustomFields",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The sales order identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/discount-line-item": {
      "get": {
        "tags": [
          "Sales Order Discount Line Item"
        ],
        "summary": "Get the discount line item for a sales order",
        "operationId": "GetSalesOrderDiscountLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Discount line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderDiscountLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderDiscountLineItemDto"
                }
              }
            }
          },
          "204": {
            "description": "Discount line item does not exist"
          },
          "404": {
            "description": "Sales order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      },
      "put": {
        "tags": [
          "Sales Order Discount Line Item"
        ],
        "summary": "Update the discount line item for a sales order",
        "operationId": "UpdateSalesOrderDiscountLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderDiscountLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderDiscountLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderDiscountLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderDiscountLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Discount line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderDiscountLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderDiscountLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or discount line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      },
      "delete": {
        "tags": [
          "Sales Order Discount Line Item"
        ],
        "summary": "Delete the discount line item for a sales order",
        "operationId": "DeleteSalesDiscountLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Discount line item did not exist"
          },
          "404": {
            "description": "Sales order did not exist"
          }
        }
      }
    },
    "/api/sales-orders/{salesOrderId}/fee-line-items/{lineItemId}": {
      "delete": {
        "tags": [
          "Sales Order Fee Line Item"
        ],
        "summary": "Delete a specific fee line item for a sales order",
        "operationId": "DeleteSalesOrderFeeLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Fee line item did not exist"
          },
          "404": {
            "description": "Sales order did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Sales Order Fee Line Item"
        ],
        "summary": "Get a specific fee line item for a sales order",
        "operationId": "GetSalesOrderFeeLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderFeeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderFeeLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or fee line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      },
      "patch": {
        "tags": [
          "Sales Order Fee Line Item"
        ],
        "summary": "Partially update a specific fee line item for a sales order",
        "operationId": "PatchSalesOrderFeeLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderFeeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderFeeLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch could not be applied — the patch document is malformed (an unknown path, an unsupported operation, or a value the target field cannot hold), or the patched result failed validation"
          },
          "404": {
            "description": "Sales order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      },
      "put": {
        "tags": [
          "Sales Order Fee Line Item"
        ],
        "summary": "Update a specific fee line item for a sales order",
        "operationId": "UpdateSalesOrderFeeLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderFeeLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderFeeLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderFeeLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderFeeLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Fee line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderFeeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderFeeLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or fee line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/fee-line-items": {
      "post": {
        "tags": [
          "Sales Order Fee Line Item"
        ],
        "summary": "Create a fee line item on a sales order",
        "operationId": "CreateSalesOrderFeeLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderFeeLineItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderFeeLineItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderFeeLineItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderFeeLineItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Fee line item added to sales order",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/fee-line-items/list": {
      "post": {
        "tags": [
          "Sales Order Fee Line Item"
        ],
        "summary": "Get a list of fee lines items for a sales order",
        "operationId": "ListSalesOrderFeeLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of fee line items for the given sales order id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderFeeLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderFeeLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The sales order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Sales Order Line Item"
        ],
        "summary": "Get a specific line item for a sales order of generic type",
        "operationId": "GetSalesOrderLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or line item did not exist, or the line item is a blanket line"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/line-items/list": {
      "post": {
        "tags": [
          "Sales Order Line Item"
        ],
        "summary": "Get a list of the line items for a sales order of every type except blanket lines",
        "operationId": "ListSalesOrderLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Line items for the given sales order id, without blanket lines",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The sales order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items": {
      "post": {
        "tags": [
          "Sales Order Part Line Item"
        ],
        "summary": "Create a part line item on a sales order",
        "operationId": "CreateSalesOrderPartLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Part line item added to sales order",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/batch": {
      "post": {
        "tags": [
          "Sales Order Part Line Item"
        ],
        "summary": "Create one or more part line items on a sales order",
        "operationId": "CreateSalesOrderPartLineItemBatch",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemCreateBatchDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemCreateBatchDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemCreateBatchDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemCreateBatchDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Part line items added to sales order",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchCreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchCreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}": {
      "get": {
        "tags": [
          "Sales Order Part Line Item"
        ],
        "summary": "Get a specific part line item for a sales order",
        "operationId": "GetSalesOrderPartLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "includeCostBreakdown",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderPartLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderPartLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      },
      "patch": {
        "tags": [
          "Sales Order Part Line Item"
        ],
        "summary": "Partially update a specific part line item for an salesOrder",
        "operationId": "PatchSalesOrderPartLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderPartLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderPartLineItemDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch could not be applied — the patch document is malformed (an unknown path, an unsupported operation, or a value the target field cannot hold), or the patched result failed validation"
          },
          "404": {
            "description": "SalesOrder or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      },
      "put": {
        "tags": [
          "Sales Order Part Line Item"
        ],
        "summary": "Update a specific part line item for a sales order",
        "operationId": "UpdateSalesOrderPartLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderPartLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderPartLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      },
      "delete": {
        "tags": [
          "Sales Order Part Line Item"
        ],
        "summary": "Delete a specific part line item for a sales order",
        "operationId": "DeleteSalesOrderPartLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Part line item did not exist"
          },
          "404": {
            "description": "Sales order did not exist"
          }
        }
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/list": {
      "post": {
        "tags": [
          "Sales Order Part Line Item"
        ],
        "summary": "Get a list of part lines items for a sales order",
        "operationId": "ListSalesOrderPartLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "includeCostBreakdown",
            "in": "query",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of part line items for the given sales order id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderPartLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderPartLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The sales order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/cost-breakdown": {
      "get": {
        "tags": [
          "Sales Order Part Line Item"
        ],
        "summary": "Get the cost breakdown for a specific part line item for a sales order",
        "operationId": "GetSalesOrderPartLineItemCostBreakdown",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Part line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonCostBreakdownDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CommonCostBreakdownDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order",
          "Pricing-Margins-View Margins"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/customFields": {
      "put": {
        "tags": [
          "Sales Order Part Line Item Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a line item",
        "operationId": "UpdateSalesOrderPartLineItemCustomFields",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "description": "The sales order identifier that contains the line item",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "description": "The line item identifier that contains the custom fields you want to update.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/custom-fields": {
      "put": {
        "tags": [
          "Sales Order Part Line Item Custom Fields"
        ],
        "summary": "Update (selectively) custom fields on a line item",
        "operationId": "UpdateSalesOrderPartLineItemCustomFields",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "description": "The sales order identifier that contains the line item",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "description": "The line item identifier that contains the custom fields you want to update.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields to update",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/input-items": {
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Create a full routing input item for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingInputItemCreate",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/input-items/{inputItemId}": {
      "delete": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Delete a full routing input item from sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingInputItemDelete",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Gets a full routing input item for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingInputItemGet",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      },
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Update a full routing input item for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingInputItemUpdate",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "inputItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/input-items/list": {
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Lists the full routing input items for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingInputItemList",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/input-materials": {
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Create a full routing input material for a sales order part line item. The material is added to this line's\nrouting only; the item's own routing is not changed.",
        "operationId": "SalesOrderPartLineItemFullRoutingInputMaterialCreate",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingInputMaterialCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "An input material was created on the line item's routing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "The sales order, material or routing was not found"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/input-materials/{inputMaterialId}": {
      "delete": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Delete a full routing input material from a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingInputMaterialDelete",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "inputMaterialId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The input material was deleted from the line item's routing"
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "The sales order, routing or input material was not found"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      },
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Update a full routing input material for a sales order part line item. Omitting routingStepId clears the\nmaterial's operation.",
        "operationId": "SalesOrderPartLineItemFullRoutingInputMaterialUpdate",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "inputMaterialId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemFullRoutingInputMaterialUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemFullRoutingInputMaterialUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemFullRoutingInputMaterialUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderPartLineItemFullRoutingInputMaterialUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The input material was updated on the line item's routing"
          },
          "400": {
            "description": "Validation issue with input"
          },
          "404": {
            "description": "The sales order, routing or input material was not found"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/input-materials/list": {
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "List input materials for a sales order part line item's routing",
        "operationId": "SalesOrderPartLineItemFullRoutingInputMaterialList",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputMaterialDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}/ipts/{phase}": {
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Creates a full routing operation in process tracking fields for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingIptCreate",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingIptCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}/ipts/{phase}/{iptId}": {
      "delete": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Deletes a full routing operation in process tracking field for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingIptDelete",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          },
          {
            "name": "iptId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Gets a full routing operation in process tracking field for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingIptGet",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          },
          {
            "name": "iptId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingIptDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingIptDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}/ipts/{phase}/list": {
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Lists full routing operation in process tracking fields for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingIptList",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "phase",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/DomainInProcessTrackingFieldCheckpointPhase"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestIptFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingIptDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingIptDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/make-summary": {
      "get": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Get a summary of the make routing for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingMakeSummaryGet",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoutingDataFullRoutingMakeSummaryDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RoutingDataFullRoutingMakeSummaryDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/operations": {
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Creates a full routing operation for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingOperationCreate",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        }
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}": {
      "delete": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Removes a full routing operation for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingOperationDelete",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      },
      "get": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Gets a full routing operation for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingOperationGet",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingOperationDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingOperationDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      },
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Updates a full routing operation for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingOperationUpdate",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ItemRoutingOperationUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}/items/{operationItemId}": {
      "get": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Gets a full routing operation item for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingOperationItemGet",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/operations/{operationId}/items/list": {
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "List full routing operation items for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingOperationItemList",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "operationId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestItemFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingInputItemDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}/operations/list": {
      "post": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Lists full routing operations for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingOperationList",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "take",
            "in": "query",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/RoutingRequestOperationFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingOperationDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ItemRoutingOperationDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/part-line-items/{lineItemId}/routing/{routingId}": {
      "get": {
        "tags": [
          "Sales Order Part Line Item Full Routing"
        ],
        "summary": "Gets a full routing routing for a sales order part line item",
        "operationId": "SalesOrderPartLineItemFullRoutingRoutingGet",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          },
          {
            "name": "routingId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemRoutingDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/refund-line-items": {
      "post": {
        "tags": [
          "Sales Order Refund Line Item"
        ],
        "summary": "Create a refund line item on a sales order",
        "operationId": "CreateSalesOrderRefundLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRefundLineItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRefundLineItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRefundLineItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRefundLineItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Refund line item added to sales order",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/refund-line-items/{lineId}": {
      "delete": {
        "tags": [
          "Sales Order Refund Line Item"
        ],
        "summary": "Delete a specific refund line item for a sales order",
        "operationId": "DeleteSalesOrderRefundLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Refund line item did not exist"
          },
          "404": {
            "description": "Sales order did not exist"
          }
        }
      }
    },
    "/api/sales-orders/{salesOrderId}/refund-line-items/list": {
      "post": {
        "tags": [
          "Sales Order Refund Line Item"
        ],
        "summary": "Get a list of refund lines items for a sales order",
        "operationId": "ListSalesOrderRefundLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of refund line items for the given sales order id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderRefundLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderRefundLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The sales order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/refund-line-items/{lineItemId}": {
      "put": {
        "tags": [
          "Sales Order Refund Line Item"
        ],
        "summary": "Update a specific refund line item for a sales order",
        "operationId": "UpdateSalesOrderRefundLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRefundLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRefundLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRefundLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderRefundLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Refund line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderRefundLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderRefundLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/shipping-charge-line-item": {
      "get": {
        "tags": [
          "Sales Order Shipping Charge Line Item"
        ],
        "summary": "Get a specific line item for a sales order of generic type",
        "operationId": "GetSalesOrderShippingChargeLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderShippingChargeLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderShippingChargeLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or line item did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/tax-line-items": {
      "post": {
        "tags": [
          "Sales Order Tax Line Item"
        ],
        "summary": "Create a tax line item on a sales order",
        "operationId": "CreateSalesOrderTaxLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderTaxLineItemCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderTaxLineItemCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderTaxLineItemCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderTaxLineItemCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Tax line item added to sales order",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/tax-line-items/{lineItemId}": {
      "delete": {
        "tags": [
          "Sales Order Tax Line Item"
        ],
        "summary": "Delete a specific tax line item for a sales order",
        "operationId": "DeleteSalesOrderTaxLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Tax line item did not exist"
          },
          "404": {
            "description": "Sales order did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Sales Order Tax Line Item"
        ],
        "summary": "Get a specific tax line item for a sales order",
        "operationId": "GetSalesOrderTaxLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tax line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderTaxLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderTaxLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or tax line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      },
      "put": {
        "tags": [
          "Sales Order Tax Line Item"
        ],
        "summary": "Update a specific tax line item for a sales order",
        "operationId": "UpdateSalesOrderTaxLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "lineItemId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderTaxLineItemUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderTaxLineItemUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderTaxLineItemUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/SalesOrderTaxLineItemUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Tax line item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderTaxLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesOrderTaxLineItemDto"
                }
              }
            }
          },
          "404": {
            "description": "Sales order or tax line items did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/sales-orders/{salesOrderId}/tax-line-items/list": {
      "post": {
        "tags": [
          "Sales Order Tax Line Item"
        ],
        "summary": "Get a list of tax lines items for a sales order",
        "operationId": "ListSalesOrderTaxLineItem",
        "parameters": [
          {
            "name": "salesOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of tax line items for the given sales order id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderTaxLineItemDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SalesOrderTaxLineItemDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The sales order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/scrap-reports": {
      "get": {
        "tags": [
          "ScrapReport"
        ],
        "summary": "Returns scrap entries logged within the supplied date range. Both\ndates are optional; the Domain layer defaults to the prior 90 days\nwhen neither is supplied.",
        "operationId": "GetScrapReports",
        "parameters": [
          {
            "name": "startDateUtc",
            "in": "query",
            "description": "Inclusive start of the report window (UTC). Defaults to today minus 90 days when omitted.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endDateUtc",
            "in": "query",
            "description": "Exclusive end of the report window (UTC). Defaults to tomorrow when omitted.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Scrap entries within the requested window.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ScrapReportEntryDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ScrapReportEntryDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/settings/costing": {
      "get": {
        "tags": [
          "Settings"
        ],
        "summary": "Get the account's costing configuration.",
        "operationId": "GetCostingSettings",
        "responses": {
          "200": {
            "description": "The account's costing configuration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SettingsCostingSettingsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SettingsCostingSettingsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/settings/pricing": {
      "get": {
        "tags": [
          "Settings"
        ],
        "summary": "Get the account's sales pricing configuration: whether margin-based and Shop Rate pricing are on, and the\ndefault margin and material markup, as percentages.",
        "operationId": "GetPricingSettings",
        "responses": {
          "200": {
            "description": "The account's sales pricing configuration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SettingsPricingSettingsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/SettingsPricingSettingsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Pricing-Margins-View Margins"
        ]
      }
    },
    "/api/shape-codes/{id}": {
      "get": {
        "tags": [
          "Shape Code"
        ],
        "summary": "Get a shape code.",
        "operationId": "GetShapeCode",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The shape code for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "404": {
            "description": "Shape code did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/shape-codes/list": {
      "post": {
        "tags": [
          "Shape Code"
        ],
        "summary": "Find shape codes based on search parameters.",
        "operationId": "ListShapeCode",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParametersBase"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of shape codes matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/shipment-line-items/list": {
      "post": {
        "tags": [
          "Shipment Line Items (V3)"
        ],
        "summary": "Search for shipment line items based on parameters.",
        "operationId": "ListShipmentLineItems",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The search parameters",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentLineItemsListParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentLineItemsListParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentLineItemsListParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentLineItemsListParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoShipmentLineItemDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoShipmentLineItemDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Shipping-Shipping-View Shipments"
        ]
      }
    },
    "/api/shipments/{id}/custom-fields": {
      "put": {
        "tags": [
          "Shipment Custom Fields"
        ],
        "summary": "Updates custom fields on a shipment",
        "operationId": "UpdateShipmentCustomFields",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The shipment identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The custom fields",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CustomFieldsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomFieldsDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Shipping-Shipping-Edit Shipments"
        ]
      }
    },
    "/api/shipments/{shipmentId}": {
      "get": {
        "tags": [
          "Shipments"
        ],
        "summary": "Get a specific shipment. Includes the scheduled ship by date and, once shipped, the actual shipped date.",
        "operationId": "GetShipment",
        "parameters": [
          {
            "name": "shipmentId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The shipment for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentsShipmentDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentsShipmentDto"
                }
              }
            }
          },
          "404": {
            "description": "Shipment did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Shipping-Shipping-View Shipments"
        ]
      },
      "patch": {
        "tags": [
          "Shipments"
        ],
        "summary": "Partially update a Shipment",
        "operationId": "PatchShipment",
        "parameters": [
          {
            "name": "shipmentId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Shipment item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentsShipmentDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentsShipmentDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Shipment did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Shipping-Shipping-Edit Shipments"
        ]
      },
      "put": {
        "tags": [
          "Shipments"
        ],
        "summary": "Update a specific shipment",
        "operationId": "UpdateShipment",
        "parameters": [
          {
            "name": "shipmentId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentsShipmentUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentsShipmentUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentsShipmentUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentsShipmentUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Shipment",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentsShipmentDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentsShipmentDto"
                }
              }
            }
          },
          "404": {
            "description": "Shipment did not exist"
          }
        }
      }
    },
    "/api/shipments/{shipmentId}/pdf": {
      "get": {
        "tags": [
          "Shipments"
        ],
        "summary": "Download the PDF for a shipment",
        "description": "The document is rendered when you call this, from\nthe shipment's current state and the tenant's PDFs & Emails settings, so it is the same\ndocument the product's Download button produces rather than a stored copy of one sent\nearlier. Served in every shipment status, including Cancelled.\n\nThe file name is composed from the order the shipment fulfils and the shipment's sequence\nnumber rather than from the id you request by: `SO1862-2.pdf` for a shipment against\nsales order 1862, and `PO104-1.pdf` for an outside-processing shipment against purchase\norder 104. The packing slip is rendered against that order, so a shipment whose order has\nbeen deleted, or which is attached to neither, has no document to return and gives a 404.",
        "operationId": "GetShipmentPdf",
        "parameters": [
          {
            "name": "shipmentId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The shipment's packing slip PDF",
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "No shipment with that id, the shipment is deleted, or the order it fulfils is missing or deleted"
          },
          "500": {
            "description": "The renderer did not produce a usable document"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Shipping-Shipping-View Shipments"
        ]
      }
    },
    "/api/shipments/list": {
      "post": {
        "tags": [
          "Shipments"
        ],
        "summary": "Finds shipments based on search parameters",
        "operationId": "ListShipments",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentsListParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentsListParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentsListParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentsListParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoShipmentsShipmentDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoShipmentsShipmentDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Shipping-Shipping-View Shipments"
        ]
      }
    },
    "/api/shipping-methods/{id}": {
      "get": {
        "tags": [
          "Shipping Method"
        ],
        "summary": "Get a shipping method.",
        "operationId": "GetShippingMethod",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The shipping method for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShippingMethodDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ShippingMethodDto"
                }
              }
            }
          },
          "404": {
            "description": "Shipping method did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/shipping-methods/list": {
      "post": {
        "tags": [
          "Shipping Method"
        ],
        "summary": "Find shipping methods based on search parameters.",
        "operationId": "ListShippingMethod",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ShippingMethodRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShippingMethodRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ShippingMethodRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ShippingMethodRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of shipping methods matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ShippingMethodDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ShippingMethodDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/tags/{id}": {
      "get": {
        "tags": [
          "Tag"
        ],
        "summary": "Get a tag.",
        "operationId": "GetTag",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The tag for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "404": {
            "description": "Tag did not exist"
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/tags/list": {
      "post": {
        "tags": [
          "Tag"
        ],
        "summary": "Find tags based on search parameters.",
        "operationId": "ListTag",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of tags matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/tags": {
      "post": {
        "tags": [
          "Tag"
        ],
        "summary": "Create a tag",
        "operationId": "CreateTag",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Tag created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/tags/{tagId}": {
      "patch": {
        "tags": [
          "Tag"
        ],
        "summary": "Patch a tag",
        "operationId": "PatchTag",
        "parameters": [
          {
            "name": "tagId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Tag patched",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      },
      "put": {
        "tags": [
          "Tag"
        ],
        "summary": "Update a tag",
        "operationId": "UpdateTag",
        "parameters": [
          {
            "name": "tagId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TagUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TagUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TagUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Tag updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TagDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/tasks": {
      "post": {
        "tags": [
          "Task"
        ],
        "summary": "Add a task to a record. `title` and `relatedRecord.id` are required, and\n`relatedRecord.id` must resolve to a change order; `taskGroupId` must resolve to\nan active change order task group and `assignedToUserId` to a user. `sequence`\nomitted appends the task after the last step, and a value places it at that step, alongside\nany task already there. Creating the task already complete stamps `completedUtc` and\n`completedBy`.",
        "operationId": "CreateTask",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TaskSaveDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskSaveDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskSaveDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TaskSaveDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The created task",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/tasks/{id}": {
      "delete": {
        "tags": [
          "Task"
        ],
        "summary": "Delete a task, with the attachments filed under it. The remaining tasks on its record are\nrenumbered to close the step it vacated.",
        "operationId": "DeleteTask",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Task did not exist"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      },
      "get": {
        "tags": [
          "Task"
        ],
        "summary": "Get a task by id, with the record it hangs off. A task whose record has been deleted is\ntreated as not existing.",
        "operationId": "GetTask",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The task for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskDto"
                }
              }
            }
          },
          "404": {
            "description": "Task did not exist"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      },
      "put": {
        "tags": [
          "Task"
        ],
        "summary": "Update a task. A full replacement: omitted fields are cleared. `complete` true\ncompletes the task and stamps `completedUtc` and `completedBy`; false re-opens it\nand clears both. `sequence` is the public reorder — a value of 1 or more moves the task\nto that step, alongside any task already there; omitted or below 1 leaves it where it is.\n`relatedRecord` is ignored: a task stays on the record it was created on.",
        "operationId": "UpdateTask",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TaskSaveDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskSaveDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TaskSaveDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TaskSaveDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The updated task",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Task did not exist"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-Edit Sales Order"
        ]
      }
    },
    "/api/tasks/list": {
      "post": {
        "tags": [
          "Task"
        ],
        "summary": "Finds tasks across every record they hang off; every task currently hangs off a change order.\nNarrow to one record's tasks with `relatedRecordIds`. Sorts on `title`,\n`sequence`, `dueDateUtc`, `completedUtc`, `complete`,\n`relatedRecordNumber`, `customer`, `assignedTo` or `taskGroup`; an\nunrecognised sort field falls back to `dueDateUtc` ascending.",
        "operationId": "ListTasks",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TasksListParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TasksListParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TasksListParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TasksListParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The matching tasks",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoTaskDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoTaskDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-required-permissions": [
          "Orders-SalesOrders-View Sales Order"
        ]
      }
    },
    "/api/tax-rates": {
      "post": {
        "tags": [
          "Tax Rate"
        ],
        "summary": "Create a new tax rate",
        "operationId": "CreateTaxRate",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Tax rate created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/tax-rates/{id}": {
      "get": {
        "tags": [
          "Tax Rate"
        ],
        "summary": "Get a tax rate.",
        "operationId": "GetTaxRate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The tax rate for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxRateDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxRateDto"
                }
              }
            }
          },
          "404": {
            "description": "Tax rate did not exist"
          }
        },
        "x-c4-exposed": true
      },
      "put": {
        "tags": [
          "Tax Rate"
        ],
        "summary": "Update a tax rate",
        "operationId": "UpdateTaxRate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Tax rate update",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxRateDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxRateDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/tax-rates/list": {
      "post": {
        "tags": [
          "Tax Rate"
        ],
        "summary": "Find tax rates based on search parameters.",
        "operationId": "ListTaxRate",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TaxRateRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of tax rates matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TaxRateDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TaxRateDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true
      }
    },
    "/api/time-clock-timers/clock-in": {
      "post": {
        "tags": [
          "Time Clock Timers"
        ],
        "summary": "Clocks in a specific user",
        "operationId": "ClockIn",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockClockInDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockClockInDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockClockInDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockClockInDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Time-Time-Edit Time Managements"
        ]
      }
    },
    "/api/time-clock-timers/clock-out": {
      "post": {
        "tags": [
          "Time Clock Timers"
        ],
        "summary": "Clocks out a specific user",
        "operationId": "ClockOut",
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockClockOutDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockClockOutDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockClockOutDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockClockOutDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Time-Time-Edit Time Managements"
        ]
      }
    },
    "/api/time-clock-timers/list": {
      "post": {
        "tags": [
          "Time Clock Timers"
        ],
        "summary": "Finds daily time clocks based on search parameters",
        "operationId": "ListTimeClock",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The search parameters",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockRequestListTimeClocksParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockRequestListTimeClocksParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockRequestListTimeClocksParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TimeClockRequestListTimeClocksParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoTimeClockDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoTimeClockDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Time-Time-View Time Management"
        ]
      }
    },
    "/api/timers": {
      "post": {
        "tags": [
          "Timer"
        ],
        "summary": "Creates a completed timer block retroactively. Unlike the start/stop endpoints, which stamp the server\ntime on receipt, this endpoint accepts explicit timestamps so integrations can submit a whole block of\ntime after the fact. Blocks may not be in the future, older than 30 days, or longer than 7 days.",
        "operationId": "CreateTimer",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TimerCreateTimerDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimerCreateTimerDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TimerCreateTimerDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TimerCreateTimerDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The created timer. When the operation already has a machine timer, a Machine block\n            is added to that timer as a segment and the combined timer is returned.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimerDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TimerDto"
                }
              }
            }
          },
          "400": {
            "description": "The block failed validation (bad timestamps, disallowed type, or overlap with\n            existing machine time on the operation)"
          },
          "404": {
            "description": "The job, item to make, operation, or user did not exist"
          },
          "409": {
            "description": "A machine timer is currently running for the operation"
          }
        },
        "x-c4-required-permissions": [
          "Time-Time-Edit Time Managements"
        ]
      }
    },
    "/api/timers/list": {
      "post": {
        "tags": [
          "Timer"
        ],
        "summary": "Finds timers based on search parameters",
        "operationId": "ListTimer",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "The search parameters",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerRequestListTimersParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerRequestListTimersParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerRequestListTimersParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/JobTrackingTimerRequestListTimersParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoTimerDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoTimerDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job",
          "Time-Time-View Time Management"
        ]
      }
    },
    "/api/timers/{timerId}": {
      "patch": {
        "tags": [
          "Timer"
        ],
        "summary": "Partially update a timer",
        "operationId": "PatchTimer",
        "parameters": [
          {
            "name": "timerId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Timer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimerDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TimerDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch document is malformed — an unknown path, an unsupported operation, or a value the target field cannot hold"
          },
          "404": {
            "description": "Timer did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Time-Time-Edit Time Managements"
        ]
      },
      "put": {
        "tags": [
          "Timer"
        ],
        "summary": "Update a specific timer",
        "operationId": "UpdateTimer",
        "parameters": [
          {
            "name": "timerId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/TimerUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimerUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/TimerUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/TimerUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Timer",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TimerDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TimerDto"
                }
              }
            }
          },
          "404": {
            "description": "Timer did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Time-Time-Edit Time Managements"
        ]
      }
    },
    "/api/tools": {
      "post": {
        "tags": [
          "Tool"
        ],
        "summary": "Create a tool. A calibration frequency of none creates a reference gage, which is never due\nfor calibration and takes no calibration records; every other frequency requires the last\ncalibration date. The tool's sequential number is assigned server-side. Creates are not\nidempotent: a retried request creates a second tool — list tools before re-sending after a\ntimeout.",
        "operationId": "CreateTool",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The created tool, with its assigned number and computed calibration schedule",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-Edit Tool Template"
        ]
      }
    },
    "/api/tools/{toolId}/calibration-template": {
      "post": {
        "tags": [
          "Tool"
        ],
        "summary": "Publish a new calibration template version for a tool. Template versions are append-only and\nimmutable: this becomes the tool's new latest version, prior versions remain readable history,\nand existing calibration records stay pinned to the version they were measured against.\nReference gages never take a calibration template. Publishes are not idempotent: a retried\nrequest publishes another version — check the latest version before re-sending after a timeout.",
        "operationId": "CreateToolCalibrationTemplate",
        "parameters": [
          {
            "name": "toolId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolRequestCalibrationTemplateCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolRequestCalibrationTemplateCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolRequestCalibrationTemplateCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolRequestCalibrationTemplateCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The published template version, with its assigned version number and checkpoint ids",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationTemplateDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationTemplateDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Tool did not exist"
          },
          "409": {
            "description": "Another caller published a version for this tool at the same time"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-Edit Tool Template"
        ]
      }
    },
    "/api/tools/{id}": {
      "get": {
        "tags": [
          "Tool"
        ],
        "summary": "Get a tool by id, including its calibration schedule and latest calibration outcome.",
        "operationId": "GetTool",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The tool for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolDto"
                }
              }
            }
          },
          "404": {
            "description": "Tool did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-View Tool Calibration"
        ]
      },
      "put": {
        "tags": [
          "Tool"
        ],
        "summary": "Update a tool. A full replacement: omitted fields are cleared. The tool's calibration\nhistory is untouched — existing calibration records keep their pinned template versions and\nresults.",
        "operationId": "UpdateTool",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The updated tool",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Tool did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-Edit Tool Template"
        ]
      }
    },
    "/api/tools/{toolId}/calibration-template/latest": {
      "get": {
        "tags": [
          "Tool"
        ],
        "summary": "Get the latest calibration template version for a tool — the checkpoints, tolerances,\ntrial counts, environment ranges, and master gauges an in-house calibration is measured against.",
        "operationId": "GetToolCalibrationTemplateLatest",
        "parameters": [
          {
            "name": "toolId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The tool's latest calibration template version",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationTemplateDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationTemplateDto"
                }
              }
            }
          },
          "404": {
            "description": "Tool did not exist, or the tool has no calibration template"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-View Tool Calibration"
        ]
      }
    },
    "/api/tools/{toolId}/calibration-template/versions/{version}": {
      "get": {
        "tags": [
          "Tool"
        ],
        "summary": "Get one calibration template version for a tool — for example the version a historical\ncalibration record was measured against.",
        "operationId": "GetToolCalibrationTemplateVersion",
        "parameters": [
          {
            "name": "toolId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The requested calibration template version",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationTemplateDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationTemplateDto"
                }
              }
            }
          },
          "404": {
            "description": "Tool did not exist, or the tool has no template version with that number"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-View Tool Calibration"
        ]
      }
    },
    "/api/tools/{toolId}/calibration-template/versions": {
      "get": {
        "tags": [
          "Tool"
        ],
        "summary": "List a tool's calibration template versions, newest first, with each version's effective range.",
        "operationId": "ListToolCalibrationTemplateVersions",
        "parameters": [
          {
            "name": "toolId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The tool's calibration template versions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoToolCalibrationTemplateVersionDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoToolCalibrationTemplateVersionDto"
                }
              }
            }
          },
          "404": {
            "description": "Tool did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-View Tool Calibration"
        ]
      }
    },
    "/api/tools/list": {
      "post": {
        "tags": [
          "Tool"
        ],
        "summary": "Finds tools based on search parameters, including calibration due-date windows and the\nderived calibration status.",
        "operationId": "ListTools",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolsListParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolsListParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolsListParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolsListParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The matching tools",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoToolSummaryDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoToolSummaryDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-View Tool Calibration"
        ]
      }
    },
    "/api/tool-calibrations": {
      "post": {
        "tags": [
          "Tool Calibration"
        ],
        "summary": "Record a tool calibration: an external (vendor or customer) attestation, or an in-house\ncalibration with per-checkpoint measurements against the tool's current calibration template.\nThe server derives the result from the measurements and rejects a submitted result that\ndisagrees; reference gages never take calibration records. A save recording a failure\nautomatically opens an NCR, echoed as createdNcr. Creates are not idempotent: a retried\nrequest records a second calibration (and opens a second NCR on a failure) — list the tool's\nrecords before re-sending after a timeout.",
        "operationId": "CreateToolCalibration",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The created calibration record, with its derived results and concurrency token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationSavedDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationSavedDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Tool did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-Perform Calibration"
        ]
      }
    },
    "/api/tool-calibrations/{id}": {
      "get": {
        "tags": [
          "Tool Calibration"
        ],
        "summary": "Get a tool calibration record by id, including its per-checkpoint measurements, the pinned\ntemplate version, and its sign state.",
        "operationId": "GetToolCalibration",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The calibration record for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationDto"
                }
              }
            }
          },
          "404": {
            "description": "Calibration record did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-View Tool Calibration"
        ]
      },
      "put": {
        "tags": [
          "Tool Calibration"
        ],
        "summary": "Edit an unsigned tool calibration record. A full replacement: the submitted measurements\nreplace the record's response set wholesale and the result is re-derived against the record's\npinned template version. Signed records are immutable and reject every edit. The request must\nround-trip the version token from a read of the record; a stale token is rejected with 409.",
        "operationId": "UpdateToolCalibration",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The updated calibration record, with its derived results and refreshed concurrency token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationSavedDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ToolCalibrationSavedDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input, or the record is signed"
          },
          "404": {
            "description": "Calibration record did not exist"
          },
          "409": {
            "description": "The record changed after the supplied version token was read"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-Perform Calibration"
        ]
      }
    },
    "/api/tool-calibrations/{id}/certificate": {
      "get": {
        "tags": [
          "Tool Calibration"
        ],
        "summary": "Download the calibration certificate PDF for a record. A signed record serves the exact\ncertificate frozen at signing; an unsigned record renders its certificate on demand.",
        "operationId": "GetToolCalibrationCertificate",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The certificate PDF"
          },
          "404": {
            "description": "Calibration record did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-View Tool Calibration"
        ]
      }
    },
    "/api/tool-calibrations/list": {
      "post": {
        "tags": [
          "Tool Calibration"
        ],
        "summary": "Finds tool calibration records based on search parameters. Rows exclude the per-checkpoint\nmeasurements; fetch a record by id for those.",
        "operationId": "ListToolCalibrations",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationsListParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationsListParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationsListParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ToolCalibrationsListParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The matching calibration records",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoToolCalibrationSummaryDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DtoPagedResultDtoToolCalibrationSummaryDto"
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Quality-Tool Calibration-View Tool Calibration"
        ]
      }
    },
    "/api/users/{userId}": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get a specific user",
        "operationId": "GetUser",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The user for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UserDto"
                }
              }
            }
          },
          "404": {
            "description": "User order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "System-Users-View Users"
        ]
      }
    },
    "/api/users/list": {
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Find users based on search parameters.",
        "operationId": "ListUser",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/UserRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/UserRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/UserRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of users matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserListDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserListDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "System-Users-View Users"
        ]
      }
    },
    "/api/users/{userId}/status": {
      "get": {
        "tags": [
          "User Status"
        ],
        "summary": "Gets a status object for a user that displays various timer metrics (jobs/ops clocked into, whether on break, etc)",
        "operationId": "GetUserStatus",
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "The user identifier",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserStatusDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/UserStatusDto"
                }
              }
            }
          },
          "404": {
            "description": "User did not exists"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "System-Users-View Users"
        ]
      }
    },
    "/api/users/status": {
      "post": {
        "tags": [
          "User Status"
        ],
        "summary": "Gets a list of user status objects based on parameters",
        "operationId": "ListUserStatus",
        "requestBody": {
          "description": "The filter parameters",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/ControllerUsersListUserStatus+UserStatusListParams"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ControllerUsersListUserStatus+UserStatusListParams"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/ControllerUsersListUserStatus+UserStatusListParams"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/ControllerUsersListUserStatus+UserStatusListParams"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserStatusDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserStatusDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "System-Users-View Users"
        ]
      }
    },
    "/api/vendors": {
      "post": {
        "tags": [
          "Vendor"
        ],
        "summary": "Create a new vendor",
        "operationId": "CreateVendor",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Vendor created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-Edit Vendor"
        ]
      }
    },
    "/api/vendors/{vendorId}": {
      "patch": {
        "tags": [
          "Vendor"
        ],
        "summary": "Partially update a vendor",
        "operationId": "PatchVendor",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/JsonPatchDocument"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Vendor item",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorDto"
                }
              }
            }
          },
          "400": {
            "description": "The patch could not be applied — the patch document is malformed (an unknown path, an unsupported operation, or a value the target field cannot hold), or the patched result failed validation"
          },
          "404": {
            "description": "Vendor did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-Edit Vendor"
        ]
      },
      "put": {
        "tags": [
          "Vendor"
        ],
        "summary": "Update a specific vendor",
        "operationId": "UpdateVendor",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The vendor for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorDto"
                }
              }
            }
          },
          "404": {
            "description": "Vendor did not exist"
          }
        }
      }
    },
    "/api/vendors/{id}": {
      "get": {
        "tags": [
          "Vendor"
        ],
        "summary": "Get a vendor.",
        "operationId": "GetVendor",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The vendor for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorDto"
                }
              }
            }
          },
          "404": {
            "description": "Vendor did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-View Vendor"
        ]
      }
    },
    "/api/vendors/list": {
      "post": {
        "tags": [
          "Vendor"
        ],
        "summary": "Find vendors based on search parameters.",
        "operationId": "ListVendor",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of vendors matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DtoVendorDtoWithDetails"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DtoVendorDtoWithDetails"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-View Vendor"
        ]
      }
    },
    "/api/vendors/{vendorId}/addresses": {
      "post": {
        "tags": [
          "Vendor Address"
        ],
        "summary": "Create a new vendor address",
        "operationId": "CreateVendorAddress",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/CommonAddressCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommonAddressCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/CommonAddressCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/CommonAddressCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Vendor address created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Vendor with the given id did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-Edit Vendor"
        ]
      }
    },
    "/api/vendors/{vendorId}/addresses/{vendorAddressId}": {
      "delete": {
        "tags": [
          "Vendor Address"
        ],
        "summary": "Delete a specific vendor address",
        "operationId": "DeleteVendorAddress",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "vendorAddressId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Vendor address did not exist"
          },
          "404": {
            "description": "The vendor did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Vendor Address"
        ],
        "summary": "Get a specific vendor address",
        "operationId": "GetVendorAddress",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "vendorAddressId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The vendor address for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorAddressDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorAddressDto"
                }
              }
            }
          },
          "404": {
            "description": "Vendor did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-View Vendor"
        ]
      },
      "put": {
        "tags": [
          "Vendor Address"
        ],
        "summary": "Update a specific vendor address",
        "operationId": "UpdateVendorAddress",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "vendorAddressId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorAddressUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorAddressUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorAddressUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorAddressUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The vendor address for the given id"
          },
          "400": {
            "description": "Validation issues with the update"
          },
          "404": {
            "description": "Vendor did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-Edit Vendor"
        ]
      }
    },
    "/api/vendors/{vendorId}/addresses/list": {
      "post": {
        "tags": [
          "Vendor Address"
        ],
        "summary": "Get a list of addresses for a vendor",
        "operationId": "ListVendorAddress",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of addresses for the given vendor id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VendorAddressDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VendorAddressDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The vendor did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-View Vendor"
        ]
      }
    },
    "/api/vendors/{vendorId}/contacts": {
      "post": {
        "tags": [
          "Vendor Contact"
        ],
        "summary": "Create a new vendor contact",
        "operationId": "CreateVendorContact",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorContactCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorContactCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorContactCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorContactCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Vendor contact created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Vendor with the given id did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-Edit Vendor"
        ]
      }
    },
    "/api/vendors/{vendorId}/contacts/{contactId}": {
      "delete": {
        "tags": [
          "Vendor Contact"
        ],
        "summary": "Delete a specific customer contact",
        "operationId": "DeleteVendorContact",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "description": "The id of the vendor to modify contacts for",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "path",
            "description": "The id of the vendor contact.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "204": {
            "description": "Vendor contact did not exist"
          },
          "404": {
            "description": "The vendor did not exist"
          }
        }
      },
      "get": {
        "tags": [
          "Vendor Contact"
        ],
        "summary": "Get a specific vendor contact",
        "operationId": "GetVendorContact",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "description": "The id of the vendor to modify contacts for",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "path",
            "description": "The id of the vendor contact.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The vendor contact for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorContactDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/VendorContactDto"
                }
              }
            }
          },
          "404": {
            "description": "Vendor or contact did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-View Vendor"
        ]
      },
      "put": {
        "tags": [
          "Vendor Contact"
        ],
        "summary": "Update a specific vendor contact",
        "operationId": "UpdateVendorContact",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "description": "The id of the vendor to modify contacts for",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "contactId",
            "in": "path",
            "description": "The id of the vendor contact.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 36,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The new data to apply to the given contact",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorContactUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorContactUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/VendorContactUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/VendorContactUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Vendor contact updated"
          },
          "404": {
            "description": "Vendor did not exist or no contact existed with the specified Id"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-Edit Vendor"
        ]
      }
    },
    "/api/vendors/{vendorId}/contacts/list": {
      "post": {
        "tags": [
          "Vendor Contact"
        ],
        "summary": "Get a list of contacts for a vendor",
        "operationId": "ListVendorContact",
        "parameters": [
          {
            "name": "vendorId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of contacts for the given vendor id",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VendorContactDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/VendorContactDto"
                  }
                }
              }
            }
          },
          "404": {
            "description": "The vendor did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Vendor-Vendors-View Vendor"
        ]
      }
    },
    "/api/work-orders": {
      "post": {
        "tags": [
          "Work Order"
        ],
        "summary": "Create a work order from job operations. Each entry in `operations` becomes one work-order\noperation owning the job operations it lists; every job operation is claimed for this work order,\nso a later request naming one of them is refused. `status` accepts only `needsReview`\n(the default) or `approved`.",
        "operationId": "CreateWorkOrder",
        "requestBody": {
          "description": "The work order to create.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The id of the created work order.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "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": {
            "description": "A job operation in the request does not exist."
          },
          "409": {
            "description": "A job operation in the request is already on another work order."
          }
        },
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit Job"
        ]
      }
    },
    "/api/work-orders/{workOrderId}": {
      "get": {
        "tags": [
          "Work Order"
        ],
        "summary": "Get a specific work order",
        "operationId": "GetWorkOrder",
        "parameters": [
          {
            "name": "workOrderId",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The work order for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkOrderDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkOrderDto"
                }
              }
            }
          },
          "404": {
            "description": "Work order did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/work-orders/{workOrderId}/operations/{workOrderOperationId}/nesting-setup": {
      "get": {
        "tags": [
          "Work Order"
        ],
        "summary": "Get the nest planned onto a work-order operation — the parts it cuts, the sheets it cuts them\nfrom, how far through those sheets the shop is, and the parts the nest could not place.",
        "operationId": "GetWorkOrderOperationNestingSetup",
        "parameters": [
          {
            "name": "workOrderId",
            "in": "path",
            "description": "Id of the work order the operation belongs to.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "workOrderOperationId",
            "in": "path",
            "description": "Id of the work-order operation to read the nest from.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The operation's nest. An operation with no nest answers 200 with `isNested` false and empty lists.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkOrderOperationNestingSetupDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkOrderOperationNestingSetupDto"
                }
              }
            }
          },
          "404": {
            "description": "The work order did not exist or was deleted, or it has no operation with that id."
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      },
      "put": {
        "tags": [
          "Work Order"
        ],
        "summary": "Replace the nest planned onto a work-order operation with the parts, sheets and unplaced parts\nsent. The stored parts list is derived from the sheets — a part on no sheet is dropped and a sheet\npart number with no `parts` entry is added at quantity 0 — so the response carries the nest\nas stored, not an echo. Sheets linked to a material item become the operation's required\nmaterials. Empty `parts` and `plates` clear the nest. The nest report the stored nest\nwas read from is kept across the replace.",
        "operationId": "UpdateWorkOrderOperationNestingSetup",
        "parameters": [
          {
            "name": "workOrderId",
            "in": "path",
            "description": "Id of the work order the operation belongs to.",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          },
          {
            "name": "workOrderOperationId",
            "in": "path",
            "description": "Id of the work-order operation to store the nest on.",
            "required": true,
            "schema": {
              "maxLength": 36,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The nest to store.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderOperationNestingSetupSaveDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderOperationNestingSetupSaveDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderOperationNestingSetupSaveDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderOperationNestingSetupSaveDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The stored nest, with the validation issues found on it. Issues never refuse the write.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkOrderOperationNestingSetupSaveResultDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkOrderOperationNestingSetupSaveResultDto"
                }
              }
            }
          },
          "400": {
            "description": "The body was missing or malformed, a list held a null entry, two parts named the same part number, a part named the same job operation twice, `nestingSoftware` named no member, more than 20000 placements were sent across all sheets, or the sheet runtimes summed past what one machine time can hold."
          },
          "404": {
            "description": "The work order did not exist or was deleted, or it has no operation with that id."
          },
          "409": {
            "description": "The stored nest has a sheet with a completed repetition, posted inventory events, or recorded scrap, so it cannot be replaced."
          }
        },
        "x-c4-required-permissions": [
          "Jobs-Jobs-Edit Job"
        ]
      }
    },
    "/api/work-orders/list": {
      "post": {
        "tags": [
          "Work Order"
        ],
        "summary": "Find work orders based on search parameters.",
        "operationId": "ListWorkOrder",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkOrderRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of work orders matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkOrderDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkOrderDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Jobs-Jobs-View Job"
        ]
      }
    },
    "/api/work-centers": {
      "post": {
        "tags": [
          "WorkCenter"
        ],
        "summary": "Create a work center.",
        "operationId": "CreateWorkCenter",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterCreateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterCreateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterCreateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterCreateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Work center created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/work-centers/{id}": {
      "get": {
        "tags": [
          "WorkCenter"
        ],
        "summary": "Get a workcenter.",
        "operationId": "GetWorkCenter",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The workcenter for the given id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkCenterDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkCenterDto"
                }
              }
            }
          },
          "404": {
            "description": "Workcenter did not exist, or the caller may not see it"
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      },
      "put": {
        "tags": [
          "WorkCenter"
        ],
        "summary": "Update a work center.",
        "operationId": "UpdateWorkCenter",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterUpdateDto"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterUpdateDto"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterUpdateDto"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterUpdateDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "The updated work center",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkCenterDto"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkCenterDto"
                }
              }
            }
          },
          "400": {
            "description": "Validation issues with input"
          },
          "404": {
            "description": "Work center did not exist"
          }
        },
        "x-c4-exposed": true,
        "x-c4-mutation": true,
        "x-c4-required-permissions": [
          "System-System Data-Manage System Data"
        ]
      }
    },
    "/api/work-centers/list": {
      "post": {
        "tags": [
          "WorkCenter"
        ],
        "summary": "Find workcenters based on search parameters.",
        "operationId": "ListWorkCenter",
        "parameters": [
          {
            "name": "Sort.Field",
            "in": "query",
            "description": "Sort field",
            "schema": {
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "name": "Sort.Dir",
            "in": "query",
            "description": "Sort direction",
            "schema": {
              "$ref": "#/components/schemas/CommonEnumSortDirectionEnum"
            }
          },
          {
            "name": "Skip",
            "in": "query",
            "description": "Number of records to skip. Defaults to 0. Combine with FulcrumProduct.PublicApi.Dto.Common.PagingDto.Take to page\nthrough a result set larger than one page.",
            "schema": {
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "Take",
            "in": "query",
            "description": "Number of records to return. Validation accepts 0 through 5000, but `0` is not a\npage size and what an endpoint does with it varies, so send a value from 1 to 5000.\n\nTwo cases differ. A request that supplies paging but leaves this field out takes this\nfield's default of <b>50</b>. A request that supplies no paging at all is\nendpoint-specific — some define their own fallback — so it does not reliably mean any\nparticular number of records. Either way the response says nothing about records it\ndid not return, so send this explicitly whenever the size of the answer matters.\nEndpoints returning a paged envelope report `totalCount` and `hasNextPage`\nalongside the records; endpoints returning a bare array report neither, so page those\nwith FulcrumProduct.PublicApi.Dto.Common.PagingDto.Skip until a page comes back shorter than the value requested.",
            "schema": {
              "maximum": 5000,
              "minimum": 0,
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterRequestFindParameters"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterRequestFindParameters"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterRequestFindParameters"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/WorkCenterRequestFindParameters"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of workcenters matching the filters",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkCenterDto"
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/WorkCenterDto"
                  }
                }
              }
            }
          }
        },
        "x-c4-exposed": true,
        "x-c4-required-permissions": [
          "Scheduling-Schedule-View Schedule"
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "AlertDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique id of the alert.",
            "format": "int32"
          },
          "alertName": {
            "type": "string",
            "description": "The alert type's name, as configured in the job-tracking alert settings.",
            "nullable": true
          },
          "active": {
            "type": "boolean",
            "description": "Whether the alert is raised. A cleared alert is removed and no longer listed."
          },
          "raisedAtUtc": {
            "type": "string",
            "description": "When the alert was raised, in UTC.",
            "format": "date-time"
          },
          "source": {
            "$ref": "#/components/schemas/DtoAlertSourceEnum"
          },
          "job": {
            "$ref": "#/components/schemas/AlertJobDto"
          },
          "itemToMake": {
            "$ref": "#/components/schemas/AlertItemToMakeDto"
          },
          "workOrder": {
            "$ref": "#/components/schemas/AlertWorkOrderDto"
          },
          "operation": {
            "$ref": "#/components/schemas/AlertOperationDto"
          }
        },
        "additionalProperties": false,
        "description": "An active job-tracking alert, such as \"Waiting on Material\" or \"Machine Down\", raised from the\nJob Tracking tablet against one job operation or one work-order operation."
      },
      "AlertItemToMakeDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique id of the item to make within its job.",
            "nullable": true
          },
          "itemId": {
            "type": "string",
            "description": "Id of the item being made.",
            "nullable": true
          },
          "itemName": {
            "type": "string",
            "description": "Name of the item being made.",
            "nullable": true
          },
          "itemNumber": {
            "type": "string",
            "description": "Number of the item being made.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The job item to make an alerted operation belongs to."
      },
      "AlertJobDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique id of the job."
          },
          "number": {
            "type": "integer",
            "description": "The job number.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "The job name.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The job an alerted operation belongs to."
      },
      "AlertOperationDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique id of the job operation, or of the work-order operation when the alert's source is\n`workOrder`.",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The operation name.",
            "nullable": true
          },
          "workCenter": {
            "$ref": "#/components/schemas/AlertReferenceDto"
          },
          "equipment": {
            "$ref": "#/components/schemas/AlertReferenceDto"
          }
        },
        "additionalProperties": false,
        "description": "The operation an alert was raised on."
      },
      "AlertReferenceDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique id."
          },
          "name": {
            "type": "string",
            "description": "Name.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "An id and name reference on an alerted operation."
      },
      "AlertRequestFindParameters": {
        "type": "object",
        "properties": {
          "jobIds": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter alerts to those raised on an operation of one of these jobs.",
            "nullable": true
          },
          "workOrderIds": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter alerts to those raised on an operation of one of these work orders.",
            "nullable": true
          },
          "workCenterIds": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter alerts to those raised on an operation scheduled to one of these work centers.",
            "nullable": true
          },
          "equipmentIds": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter alerts to those raised on an operation scheduled to one of these pieces of equipment.",
            "nullable": true
          },
          "alertNames": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter alerts to those with one of these alert names.",
            "nullable": true
          },
          "raisedAfterUtc": {
            "type": "string",
            "description": "Filter alerts raised after (exclusive) this time in UTC. If no time component is passed,\nmidnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "raisedBeforeUtc": {
            "type": "string",
            "description": "Filter alerts raised before (exclusive) this time in UTC. If no time component is passed,\nmidnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding active job-tracking alerts. Filters combine with AND."
      },
      "AlertWorkOrderDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique id of the work order."
          },
          "number": {
            "type": "integer",
            "description": "The work order number.",
            "format": "int32"
          },
          "name": {
            "type": "string",
            "description": "The work order name.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The work order an alerted operation belongs to."
      },
      "AttachmentDto": {
        "required": [
          "fileId",
          "id",
          "owner"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique Id associated to this entity"
          },
          "owner": {
            "$ref": "#/components/schemas/AttachmentOwnerDto"
          },
          "name": {
            "type": "string",
            "description": "The file name.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Description",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/CommonEnumAttachmentTypeEnum"
          },
          "format": {
            "$ref": "#/components/schemas/CommonEnumAttachmentMediaFormatEnum"
          },
          "size": {
            "type": "integer",
            "description": "File size in bytes",
            "format": "int64",
            "nullable": true
          },
          "fileId": {
            "minLength": 1,
            "type": "string",
            "description": "Internal file identifier"
          },
          "createdUtc": {
            "type": "string",
            "description": "UTC timestamp when this attachment record was created on its current owner.\nNote: when an attachment is copied between owners (for example, from a quote to a job),\na new attachment record is created and this value reflects the copy time, not the original upload time.",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Represents a file attachment."
      },
      "AttachmentOwnerCreateDto": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/CommonEnumOwnerTypeCreateEnum"
          },
          "id": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "The primary owner id of this attachment."
          }
        },
        "additionalProperties": false,
        "description": "Attachment owner"
      },
      "AttachmentOwnerDto": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/CommonEnumOwnerTypeEnum"
          },
          "id": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "The primary owner id of this attachment."
          }
        },
        "additionalProperties": false,
        "description": "Attachment owner"
      },
      "AttachmentRemoteCreateDto": {
        "required": [
          "accessUrl",
          "fileName",
          "owner"
        ],
        "type": "object",
        "properties": {
          "owner": {
            "$ref": "#/components/schemas/AttachmentOwnerCreateDto"
          },
          "parent": {
            "$ref": "#/components/schemas/AttachmentOwnerCreateDto"
          },
          "fileName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "File name"
          },
          "accessUrl": {
            "minLength": 1,
            "type": "string",
            "description": "File access url",
            "format": "uri"
          },
          "token": {
            "type": "string",
            "description": "Optional token that may be required for access the AccessUrl",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Create an attachment."
      },
      "AttachmentRequestFindParameters": {
        "type": "object",
        "properties": {
          "owner": {
            "$ref": "#/components/schemas/AttachmentOwnerDto"
          },
          "owners": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AttachmentOwnerDto"
            },
            "description": "The primary owners of the attachment.",
            "nullable": true
          },
          "attachmentIds": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter to attachments whose ids are in the list.",
            "nullable": true
          },
          "formats": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonEnumAttachmentMediaFormatEnum"
            },
            "description": "Allows for filtering based on specific attachment format types.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding attachmewnts.\n\nNote: These filters are applied using the AND operator. If both attachmentIds and owner are provided, attachments that do match the owner will not be returned."
      },
      "AuthValidateResultDto": {
        "required": [
          "domain",
          "expirationUtc",
          "name",
          "revocationId"
        ],
        "type": "object",
        "properties": {
          "revocationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id used to revoke the token"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the token",
            "readOnly": true
          },
          "domain": {
            "maxLength": 500,
            "minLength": 0,
            "type": "string",
            "description": "The product domain for the associated customer"
          },
          "expirationUtc": {
            "type": "string",
            "description": "UTC instant at which the token stops being accepted. For any token this endpoint answers it is\na future instant, since an expired one is rejected before the request is served. Tokens created\nwithout an expiry report the maximum representable date rather than a real one.",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Details about the token used to validate the request"
      },
      "BatchCreatedResponseDto": {
        "required": [
          "ids"
        ],
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The ids of the created records"
          }
        },
        "additionalProperties": false,
        "description": "Response for a batch created record"
      },
      "CAPACapaCreateDto": {
        "required": [
          "capaType",
          "problemStatement"
        ],
        "type": "object",
        "properties": {
          "capaType": {
            "$ref": "#/components/schemas/CAPACapaTypeDto"
          },
          "problemStatement": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "What went wrong, or what could go wrong."
          },
          "rootCauseAnalysis": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Root cause analysis text, when it is already known.",
            "nullable": true
          },
          "dueDate": {
            "type": "string",
            "description": "When the CAPA is due. Defaults to one month after creation.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Definition for creating a CAPA. The CAPA is created in the New status; the linked NCR,\nowner and tasks are set in the app after creation."
      },
      "CAPACapaDto": {
        "required": [
          "capaType",
          "id",
          "number",
          "problemStatement"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Number",
            "format": "int32"
          },
          "capaType": {
            "minLength": 1,
            "type": "string",
            "description": "CAPA Type"
          },
          "problemStatement": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Problem statement"
          },
          "status": {
            "type": "string",
            "description": "CAPA Status",
            "nullable": true
          },
          "rootCauseAnalysis": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Root cause analysis",
            "nullable": true
          },
          "correctiveAction": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Corrective action",
            "nullable": true
          },
          "ncrId": {
            "type": "string",
            "description": "Related NCR ID",
            "nullable": true
          },
          "createdUtc": {
            "type": "string",
            "description": "Created Date",
            "format": "date-time",
            "nullable": true
          },
          "dueDate": {
            "type": "string",
            "description": "Completed Date",
            "format": "date-time",
            "nullable": true
          },
          "closedUtc": {
            "type": "string",
            "description": "Completed Date",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an CAPA"
      },
      "CAPACapaTypeDto": {
        "enum": [
          "correctiveAction",
          "preventiveAction",
          "supplierIssue",
          "safetyIssue"
        ],
        "type": "string",
        "description": "The kind of corrective and preventive action a CAPA tracks."
      },
      "CAPARequestCapaListParameters": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Filter CAPAs by a specific status\nAccepted Values:\nClosed, Hold, New, Quality Review, Engineering Review",
            "nullable": true
          },
          "type": {
            "type": "string",
            "description": "Filter CAPAs by a specific type. Available values are configured per tenant in Quality settings (NCR dropdowns).",
            "nullable": true
          },
          "ncrId": {
            "type": "string",
            "description": "Filter CAPAs by a NCR Id",
            "nullable": true
          },
          "createdUtc": {
            "type": "string",
            "description": "Filter CAPAs created on or after this instant, time of day included. Combines with\nFulcrumProduct.PublicApi.Controllers.CAPAs.Request.CapaListParameters.CreatedFrom when both are sent.",
            "format": "date-time",
            "nullable": true
          },
          "createdFrom": {
            "type": "string",
            "description": "Filter to CAPAs created on or after this date, as a whole day in the shop's timezone. Any time\ncomponent is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "createdTo": {
            "type": "string",
            "description": "Filter to CAPAs created on or before this date, as a whole day in the shop's timezone, so\na CAPA created later that same shop day still matches.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching CAPAs"
      },
      "ChangeOrderDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the change order",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "The change order's sequential number, unique within the tenant and assigned server-side",
            "format": "int32"
          },
          "customer": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "originalRevisionItem": {
            "$ref": "#/components/schemas/ChangeOrderItemReferenceDto"
          },
          "newRevisionItem": {
            "$ref": "#/components/schemas/ChangeOrderItemReferenceDto"
          },
          "requestedUtc": {
            "type": "string",
            "description": "When the change was requested (UTC). Defaults to the moment of creation when not supplied",
            "format": "date-time",
            "nullable": true
          },
          "dueDateUtc": {
            "type": "string",
            "description": "When the change order is due (UTC), or null when it carries no date",
            "format": "date-time",
            "nullable": true
          },
          "approvedUtc": {
            "type": "string",
            "description": "When the change order was approved (UTC), or null when it has not been",
            "format": "date-time",
            "nullable": true
          },
          "completedUtc": {
            "type": "string",
            "description": "When the change order was completed (UTC). Stamped server-side when status moves to Completed\nwithout one supplied",
            "format": "date-time",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/ChangeOrderStatusEnum"
          },
          "detail": {
            "type": "string",
            "description": "What the change is",
            "nullable": true
          },
          "disposition": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "notificationsEnabled": {
            "type": "boolean",
            "description": "Whether completing a task on this change order tells the owners of the next step",
            "nullable": true
          },
          "createdBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "createdUtc": {
            "type": "string",
            "description": "When the change order was created (UTC). Read-only",
            "format": "date-time",
            "nullable": true
          },
          "modifiedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "modifiedUtc": {
            "type": "string",
            "description": "When the change order was last modified (UTC); supports incremental sync. Read-only",
            "format": "date-time",
            "nullable": true
          },
          "impactedRecords": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChangeOrderImpactedRecordDto"
            },
            "description": "The sales orders, jobs and quotes the change order impacts; empty when it impacts none.\nRead-only — create and update never write it, so a change made to it elsewhere while an update\nis in flight stands"
          }
        },
        "additionalProperties": false,
        "description": "A change order: an item revision being replaced, and the sales orders, jobs and quotes it\ntouches. Its tasks are a separate resource."
      },
      "ChangeOrderEnumImpactedRecordDocumentTypeEnum": {
        "enum": [
          "salesOrder",
          "job",
          "quote"
        ],
        "type": "string",
        "description": "The kind of document a change order impacts."
      },
      "ChangeOrderImpactedRecordDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the impacted record",
            "nullable": true
          },
          "documentType": {
            "$ref": "#/components/schemas/ChangeOrderEnumImpactedRecordDocumentTypeEnum"
          },
          "documentId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the impacted sales order, job or quote",
            "nullable": true
          },
          "originalRevDocumentLineId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "For a sales order or quote, the impacted line item at the original revision. For a job, the\nsales order line item the job was created from",
            "nullable": true
          },
          "newRevDocumentLineId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "For a sales order or quote, the replacement line created at the new revision when the change\norder is applied; null until then",
            "nullable": true
          },
          "disposition": {
            "type": "string",
            "description": "What happens to the original line when the change order is applied",
            "nullable": true
          },
          "rolledRev": {
            "type": "boolean",
            "description": "Whether the document now sits at the change order's new revision item"
          }
        },
        "additionalProperties": false,
        "description": "One document a change order impacts. Read-only: the change order write endpoints ignore the\ncollection, which is maintained in the app."
      },
      "ChangeOrderItemReferenceDto": {
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the item revision, as returned by Item List",
            "nullable": true
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item's number and revision together, as the app displays it. Read-only",
            "nullable": true
          },
          "number": {
            "type": "string",
            "description": "The item's number. Read-only",
            "nullable": true
          },
          "revision": {
            "type": "string",
            "description": "The item's revision, or null when the item carries none. Read-only",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A reference to an item revision on a change order."
      },
      "ChangeOrderSaveDto": {
        "required": [
          "originalRevisionItem"
        ],
        "type": "object",
        "properties": {
          "customer": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "originalRevisionItem": {
            "$ref": "#/components/schemas/ChangeOrderItemReferenceDto"
          },
          "newRevisionItem": {
            "$ref": "#/components/schemas/ChangeOrderItemReferenceDto"
          },
          "requestedUtc": {
            "type": "string",
            "description": "When the change was requested (UTC). Defaults to the moment of creation when not supplied",
            "format": "date-time",
            "nullable": true
          },
          "dueDateUtc": {
            "type": "string",
            "description": "When the change order is due (UTC)",
            "format": "date-time",
            "nullable": true
          },
          "approvedUtc": {
            "type": "string",
            "description": "When the change order was approved (UTC)",
            "format": "date-time",
            "nullable": true
          },
          "completedUtc": {
            "type": "string",
            "description": "When the change order was completed (UTC). Stamped server-side when status is Completed and\nnone is supplied",
            "format": "date-time",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/ChangeOrderStatusEnum"
          },
          "detail": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "What the change is",
            "nullable": true
          },
          "disposition": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "notificationsEnabled": {
            "type": "boolean",
            "description": "Whether completing a task on this change order tells the owners of the next step. Null on a\ncreate takes the company default; null on an update keeps what the change order carries",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The writable state of a change order. Create and update both take the whole object: update is a\nfull replacement, so an omitted field is cleared."
      },
      "ChangeOrderStatusEnum": {
        "enum": [
          "new",
          "inProgress",
          "completed"
        ],
        "type": "string",
        "description": "Where a change order stands."
      },
      "ChangeOrderSummaryDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the change order",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "The change order's sequential number, unique within the tenant and assigned server-side",
            "format": "int32"
          },
          "customer": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "originalRevisionItem": {
            "$ref": "#/components/schemas/ChangeOrderItemReferenceDto"
          },
          "newRevisionItem": {
            "$ref": "#/components/schemas/ChangeOrderItemReferenceDto"
          },
          "requestedUtc": {
            "type": "string",
            "description": "When the change was requested (UTC). Defaults to the moment of creation when not supplied",
            "format": "date-time",
            "nullable": true
          },
          "dueDateUtc": {
            "type": "string",
            "description": "When the change order is due (UTC), or null when it carries no date",
            "format": "date-time",
            "nullable": true
          },
          "approvedUtc": {
            "type": "string",
            "description": "When the change order was approved (UTC), or null when it has not been",
            "format": "date-time",
            "nullable": true
          },
          "completedUtc": {
            "type": "string",
            "description": "When the change order was completed (UTC). Stamped server-side when status moves to Completed\nwithout one supplied",
            "format": "date-time",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/ChangeOrderStatusEnum"
          },
          "detail": {
            "type": "string",
            "description": "What the change is",
            "nullable": true
          },
          "disposition": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "notificationsEnabled": {
            "type": "boolean",
            "description": "Whether completing a task on this change order tells the owners of the next step",
            "nullable": true
          },
          "createdBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "createdUtc": {
            "type": "string",
            "description": "When the change order was created (UTC). Read-only",
            "format": "date-time",
            "nullable": true
          },
          "modifiedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "modifiedUtc": {
            "type": "string",
            "description": "When the change order was last modified (UTC); supports incremental sync. Read-only",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A change order row returned by the change order list: the header, without the impacted records."
      },
      "ChangeOrdersListParameters": {
        "type": "object",
        "properties": {
          "search": {
            "type": "string",
            "description": "Case-insensitive search over the customer name, the original and new revision items, and the\ndetail",
            "nullable": true
          },
          "statuses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChangeOrderStatusEnum"
            },
            "description": "Only change orders in these statuses",
            "nullable": true
          },
          "customerIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Only change orders raised for these customers",
            "nullable": true
          },
          "dispositionIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Only change orders carrying these dispositions",
            "nullable": true
          },
          "requestedFromUtc": {
            "type": "string",
            "description": "Inclusive lower bound on requestedUtc",
            "format": "date-time",
            "nullable": true
          },
          "requestedToUtc": {
            "type": "string",
            "description": "Inclusive upper bound on requestedUtc",
            "format": "date-time",
            "nullable": true
          },
          "dueFromUtc": {
            "type": "string",
            "description": "Inclusive lower bound on dueDateUtc",
            "format": "date-time",
            "nullable": true
          },
          "dueToUtc": {
            "type": "string",
            "description": "Inclusive upper bound on dueDateUtc",
            "format": "date-time",
            "nullable": true
          },
          "createdFromUtc": {
            "type": "string",
            "description": "Inclusive lower bound on createdUtc",
            "format": "date-time",
            "nullable": true
          },
          "createdToUtc": {
            "type": "string",
            "description": "Inclusive upper bound on createdUtc",
            "format": "date-time",
            "nullable": true
          },
          "completedFromUtc": {
            "type": "string",
            "description": "Inclusive lower bound on completedUtc",
            "format": "date-time",
            "nullable": true
          },
          "completedToUtc": {
            "type": "string",
            "description": "Inclusive upper bound on completedUtc",
            "format": "date-time",
            "nullable": true
          },
          "overdue": {
            "type": "boolean",
            "description": "True narrows to change orders whose due date has passed and that are not Completed. False and\nomitted both apply no clause — this narrows, it does not select the complement",
            "nullable": true
          },
          "impactedDocumentId": {
            "type": "string",
            "description": "Only change orders impacting this sales order, job or quote",
            "nullable": true
          },
          "revisionItemId": {
            "type": "string",
            "description": "Only change orders whose original or new revision item is this item",
            "nullable": true
          },
          "modifiedAfterUtc": {
            "type": "string",
            "description": "Only change orders written strictly after this UTC instant. Poll with the largest\nmodifiedUtc you hold to pick up creates and edits; deletions do not advance modifiedUtc",
            "format": "date-time",
            "nullable": true
          },
          "modifiedBeforeUtc": {
            "type": "string",
            "description": "Only change orders written at or before this UTC instant",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Filters for the change order list. All filters are optional and combine with AND semantics\n(list-valued filters match any of their values)."
      },
      "CommonAccountingDetailsDto": {
        "type": "object",
        "properties": {
          "classId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item class identifier. Please reference /api/item-classes endpoint.",
            "nullable": true
          },
          "incomeAccountId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Income account (chart of accounts) key identifier. Please reference /api/chart-of-accounts endpoint.",
            "nullable": true
          },
          "assetAccountId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Asset account (chart of accounts) key identifier. Please reference /api/chart-of-accounts endpoint.",
            "nullable": true
          },
          "expenseAccountId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Expense account (chart of accounts) key identifier. Please reference /api/chart-of-accounts endpoint.",
            "nullable": true
          },
          "cogsAccountId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "COGS account (chart of accounts) key identifier. Please reference /api/chart-of-accounts endpoint.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "An object that contains all accounting details."
      },
      "CommonAddressCreateDto": {
        "required": [
          "address1",
          "city",
          "postalCode"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the address (Bob's Shipping, Primary, Reno Warehouse, etc).",
            "nullable": true
          },
          "address1": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Primary address line."
          },
          "address2": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Second address line.",
            "nullable": true
          },
          "address3": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Third address line.",
            "nullable": true
          },
          "city": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address city"
          },
          "stateProvince": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address state/province.",
            "nullable": true
          },
          "postalCode": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Postal/zip code."
          },
          "country": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Country identifier.",
            "nullable": true
          },
          "shippingLeadTime": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead time for shipping contents.",
            "format": "int32",
            "nullable": true
          },
          "primaryBilling": {
            "type": "boolean",
            "description": "Signifies if this is a primary billing address."
          },
          "primaryShipping": {
            "type": "boolean",
            "description": "Signifies if this is a primary billing address."
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Associated phone number",
            "nullable": true
          },
          "fax": {
            "type": "string",
            "description": "Associated fax number",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "General notes associated to this customer address",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Address with additional context"
      },
      "CommonAddressDto": {
        "required": [
          "address1",
          "city",
          "postalCode"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the address (Bob's Shipping, Primary, Reno Warehouse, etc).",
            "nullable": true
          },
          "address1": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Primary address line."
          },
          "address2": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Second address line.",
            "nullable": true
          },
          "address3": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Third address line.",
            "nullable": true
          },
          "city": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address city"
          },
          "stateProvince": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address state/province.",
            "nullable": true
          },
          "postalCode": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Postal/zip code."
          },
          "country": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Country identifier.",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Phone number.",
            "format": "tel",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Address definition"
      },
      "CommonCostBreakdownDto": {
        "required": [
          "calculatedOn",
          "componentLabor",
          "componentMachine",
          "componentMaterial",
          "componentOutsideProcessing",
          "cumulative",
          "cumulativeLabor",
          "cumulativeMachine",
          "cumulativeMaterial",
          "cumulativeOutsideProcessing",
          "id",
          "itemLabor",
          "itemMachine",
          "itemMaterial",
          "itemOutsideProcessing",
          "lines",
          "quantity",
          "shopRateMachine",
          "shopRateRun",
          "shopRateSetup",
          "time",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "The id of the parent item."
          },
          "type": {
            "$ref": "#/components/schemas/ItemsAndInventoryRoutingsCostBreakdownType"
          },
          "quantity": {
            "minimum": 0,
            "type": "integer",
            "description": "Number of units.",
            "format": "int32"
          },
          "quantityScrapped": {
            "minimum": 0,
            "type": "integer",
            "description": "Number of units scrapped.",
            "format": "int32",
            "nullable": true
          },
          "calculatedOn": {
            "type": "string",
            "description": "When was this cost breakdown last calculated/aggregated.",
            "format": "date-time"
          },
          "time": {
            "$ref": "#/components/schemas/CommonTimeDto"
          },
          "cumulative": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "cumulativeMaterial": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "cumulativeLabor": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "cumulativeMachine": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "cumulativeOutsideProcessing": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "itemMaterial": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "itemLabor": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "itemMachine": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "itemOutsideProcessing": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "shopRateSetup": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "shopRateRun": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "shopRateMachine": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "componentMaterial": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "componentLabor": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "componentMachine": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "componentOutsideProcessing": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "lines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonCostBreakdownLineDto"
            },
            "description": "Cost breakdown line details."
          }
        },
        "additionalProperties": false,
        "description": "Cost breakdown"
      },
      "CommonCostBreakdownLineDto": {
        "required": [
          "cost",
          "costType",
          "name"
        ],
        "type": "object",
        "properties": {
          "costType": {
            "$ref": "#/components/schemas/CommonEnumCostBreakdownLineTypeEnum"
          },
          "operationType": {
            "$ref": "#/components/schemas/CommonEnumOperationTypeEnum"
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Decription of this line."
          },
          "cost": {
            "minimum": 0,
            "type": "number",
            "description": "Cost.",
            "format": "double"
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "Quantity (if applicable)",
            "format": "double",
            "nullable": true
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the item that was picked. Please reference /api/items endpoint.",
            "nullable": true
          },
          "itemName": {
            "type": "string",
            "description": "The name of the item that was picked.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code affected. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "operationInformation": {
            "$ref": "#/components/schemas/CommonCostBreakdownOperationDto"
          }
        },
        "additionalProperties": false,
        "description": "Cost breakdown line information."
      },
      "CommonCostBreakdownOperationDto": {
        "required": [
          "operationId"
        ],
        "type": "object",
        "properties": {
          "operationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Operation id. Please reference /api/operations"
          },
          "name": {
            "type": "string",
            "description": "Operation name.",
            "nullable": true
          },
          "timeInSeconds": {
            "minimum": 0,
            "type": "number",
            "description": "Time in seconds.",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "timeInHours": {
            "minimum": 0,
            "type": "number",
            "description": "Time in hours",
            "format": "double",
            "nullable": true
          },
          "ratePerSecond": {
            "minimum": 0,
            "type": "number",
            "description": "Rate per second",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "ratePerHour": {
            "minimum": 0,
            "type": "number",
            "description": "Rate per hour",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Operation information"
      },
      "CommonCostDto": {
        "required": [
          "perUnit",
          "total"
        ],
        "type": "object",
        "properties": {
          "total": {
            "minimum": 0,
            "type": "number",
            "description": "Total",
            "format": "double"
          },
          "perUnit": {
            "minimum": 0,
            "type": "number",
            "description": "Cost per unit",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Cost information"
      },
      "CommonCustomFieldSearchDto": {
        "required": [
          "key",
          "value"
        ],
        "type": "object",
        "properties": {
          "key": {
            "minLength": 1,
            "type": "string",
            "description": "Key/identifier for the custom field"
          },
          "value": {
            "minLength": 1,
            "type": "string",
            "description": "Underlying value of the custom field"
          }
        },
        "additionalProperties": false,
        "description": "Custom field associated to an entity."
      },
      "CommonDepositCreateDto": {
        "required": [
          "depositType"
        ],
        "type": "object",
        "properties": {
          "depositType": {
            "$ref": "#/components/schemas/CommonEnumSalesOrderDepositRequirementEnum"
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "This represents the literal amount of the deposit if FulcrumProduct.PublicApi.Dto.Common.DepositCreateDto.DepositType == FulcrumProduct.PublicApi.Dto.Common.Enum.SalesOrderDepositRequirementEnum.Fixed or the percentage (0 - 100) when FulcrumProduct.PublicApi.Dto.Common.DepositCreateDto.DepositType == FulcrumProduct.Domain.SalesOrders.SalesOrderDepositRequirement.Percentage",
            "format": "double",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Deposit creation."
      },
      "CommonDepositDto": {
        "required": [
          "depositType"
        ],
        "type": "object",
        "properties": {
          "depositType": {
            "$ref": "#/components/schemas/CommonEnumSalesOrderDepositRequirementEnum"
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "This represents the literal amount of the deposit if FulcrumProduct.PublicApi.Dto.Common.DepositDto.DepositType == FulcrumProduct.PublicApi.Dto.Common.Enum.SalesOrderDepositRequirementEnum.Fixed or the percentage (0 - 100) when see cref=\"DepositType\"/> == FulcrumProduct.PublicApi.Dto.Common.Enum.SalesOrderDepositRequirementEnum.Percentage",
            "format": "double",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "amountInvoiced": {
            "minimum": 0,
            "type": "number",
            "description": "The amount that has already been invoiced.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Deposit information"
      },
      "CommonEnumAttachmentMediaFormatEnum": {
        "enum": [
          "undefined",
          "cad",
          "document",
          "image",
          "video"
        ],
        "type": "string",
        "description": "Attachment format"
      },
      "CommonEnumAttachmentTypeEnum": {
        "enum": [
          "standard",
          "externalAccessDocument",
          "certification"
        ],
        "type": "string",
        "description": "Attachment types"
      },
      "CommonEnumCasingOption": {
        "enum": [
          "caseSensitive",
          "caseInsensitive"
        ],
        "type": "string",
        "description": "Case sensititivy options. Of note, in a SQL environment, this should have no impact as SQL is case-insensitive naturally."
      },
      "CommonEnumCostBreakdownLineTypeEnum": {
        "enum": [
          "material",
          "labor",
          "setup",
          "machine",
          "outsideProcessing",
          "componentMaterial",
          "componentLabor",
          "componentMachine",
          "componentOutsideProcessing",
          "nestPartMaterialUsage",
          "nestPartMaterialScrap",
          "overhead",
          "unknown"
        ],
        "type": "string",
        "description": "Cost breakdown types"
      },
      "CommonEnumInputItemValueTypeEnum": {
        "enum": [
          "creates",
          "requires"
        ],
        "type": "string",
        "description": "Specifies how a routing input item quantity is measured."
      },
      "CommonEnumLineItemUomEnum": {
        "enum": [
          "notApplicable",
          "piece",
          "linearFeet",
          "hour",
          "yard"
        ],
        "type": "string",
        "description": "Line item unit of measure."
      },
      "CommonEnumMaterialFormEnum": {
        "enum": [
          "sheet",
          "plate",
          "roundBar",
          "flatBar",
          "channel",
          "squareTube",
          "angle",
          "treadPlate",
          "hexBar",
          "squareBar",
          "teeBar",
          "hBeam",
          "rectTube",
          "pipe",
          "wBeam",
          "sBeam",
          "roundTube",
          "rectBar",
          "wideBar"
        ],
        "type": "string",
        "description": "Specifies the form of the material."
      },
      "CommonEnumMaterialRequirementCostingEnum": {
        "enum": [
          "fullCost",
          "usageBased"
        ],
        "type": "string",
        "description": "Specifies the costing of the material."
      },
      "CommonEnumMaterialVendorPriceUnitEnum": {
        "enum": [
          "kilogram",
          "pound"
        ],
        "type": "string",
        "description": "Specifies how a routing input item quantity is measured."
      },
      "CommonEnumOperationTypeEnum": {
        "enum": [
          "labor",
          "setup",
          "machine",
          "outsideProcessing"
        ],
        "type": "string",
        "description": "Operation type"
      },
      "CommonEnumOrderType": {
        "enum": [
          "purchaseOrder",
          "salesOrder"
        ],
        "type": "string",
        "description": "Order type enum"
      },
      "CommonEnumOwnerTypeCertificationEnum": {
        "enum": [
          "item",
          "purchaseOrderReceivingLineItem",
          "salesOrderReceivingLineItem"
        ],
        "type": "string",
        "description": "Owner types that can be used for certification attachments"
      },
      "CommonEnumOwnerTypeCreateEnum": {
        "enum": [
          "salesOrder",
          "salesOrderReceiving",
          "salesOrderPartLineItem",
          "quote",
          "quotePartLineItem",
          "purchaseOrder",
          "purchaseOrderReceiving",
          "purchaseOrderPartLineItem",
          "invoice",
          "workOrderOperation",
          "operation",
          "item",
          "job",
          "shipment"
        ],
        "type": "string",
        "description": "Owner types"
      },
      "CommonEnumOwnerTypeEnum": {
        "enum": [
          "salesOrder",
          "salesOrderReceiving",
          "salesOrderPartLineItem",
          "quote",
          "quotePartLineItem",
          "purchaseOrder",
          "purchaseOrderReceiving",
          "purchaseOrderPartLineItem",
          "invoice",
          "workOrderOperation",
          "operation",
          "inventoryLot",
          "item",
          "job",
          "shipment"
        ],
        "type": "string",
        "description": "Owner types"
      },
      "CommonEnumPricingSchemeInputEnum": {
        "enum": [
          "price",
          "margin"
        ],
        "type": "string",
        "description": "How a part line item is priced; omit to keep the line's current scheme.\n`price`: the line keeps the price sent and its margin is derived from cost. On a line with quantity price\nbreaks, the price replaces that of the break applying at the line's quantity (the highest break at or below it,\nelse the lowest); the other breaks are kept.\n`margin`: the price is derived from the line's margin and cost. A non-zero price other than the line's current\nprice (on create, any non-zero price) is rejected with a 400."
      },
      "CommonEnumSalesOrderDepositRequirementEnum": {
        "enum": [
          "fixed",
          "percentage",
          "none"
        ],
        "type": "string",
        "description": "Deposit type."
      },
      "CommonEnumSortDirectionEnum": {
        "enum": [
          "ascending",
          "descending"
        ],
        "type": "string",
        "description": "Specify sorting direction."
      },
      "CommonEnumStyleEnum": {
        "enum": [
          "primary",
          "secondary",
          "success",
          "danger",
          "warning",
          "info",
          "light",
          "dark",
          "connected"
        ],
        "type": "string",
        "description": "Style enum (for tags)."
      },
      "CommonEnumTagTypeEnum": {
        "enum": [
          "item",
          "accountingCode",
          "itemCategory",
          "itemShape",
          "itemMaterial",
          "itemGrade",
          "itemGauge",
          "itemShippingContainer",
          "itemClass",
          "breakReasonCode",
          "refundReasonCode",
          "vendorOrderIssueCode",
          "chartOfAccounts"
        ],
        "type": "string",
        "description": "What the tag is used for (can be many)."
      },
      "CommonExternalReferenceDto": {
        "required": [
          "externalId"
        ],
        "type": "object",
        "properties": {
          "type": {
            "maxLength": 50,
            "minLength": 0,
            "type": "string",
            "description": "Specifies the type of this identifier.",
            "nullable": true
          },
          "externalId": {
            "maxLength": 500,
            "minLength": 0,
            "type": "string",
            "description": "The external identifier"
          },
          "displayId": {
            "maxLength": 500,
            "minLength": 0,
            "type": "string",
            "description": "The id/number that a human sees. For a quote, this might be 'Q1000'.  If this is null, the display\nwill fall back to the ExternalId",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "A status for the external reference",
            "nullable": true
          },
          "url": {
            "type": "string",
            "description": "An external url for the reference",
            "nullable": true
          },
          "modifiedUtc": {
            "type": "string",
            "description": "Date the external reference was modified",
            "format": "date-time",
            "nullable": true
          },
          "lastSyncedUtc": {
            "type": "string",
            "description": "Date the external system last successfully synced this reference. Set by integrations\non successful sync only; null means never synced or that the sync timestamp isn't\nmaintained by the integration.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The external reference for entities that implement FulcrumProduct.Domain.Common.IHasExternalReferences"
      },
      "CommonExternalReferenceFindDto": {
        "required": [
          "key"
        ],
        "type": "object",
        "properties": {
          "key": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string",
            "description": "Specifies the group name (key) that this external reference originates from (e.g. an external application name)"
          },
          "type": {
            "maxLength": 50,
            "minLength": 0,
            "type": "string",
            "description": "Arbitrary sub-key that can be used to qualify the value",
            "nullable": true
          },
          "externalId": {
            "maxLength": 500,
            "minLength": 0,
            "type": "string",
            "description": "The external identifier",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Search parameter for identifier record(s) via their external identifiers."
      },
      "CommonGuidOrMongoReferenceDto": {
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Unique Id associated to the referenced object",
            "nullable": true
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Descriptive name associated to the object",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A reference to an object whose id is either a GUID or a Mongo id, such as a routing operation."
      },
      "CommonImpactDto": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID for this object.",
            "format": "uuid"
          },
          "operation": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "workCenter": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "scheduledEquipment": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "job": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "salesOrder": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "quantityImpacted": {
            "type": "number",
            "description": "Quantity Impacted",
            "format": "double",
            "nullable": true
          },
          "incrementalCost": {
            "type": "number",
            "description": "Incremental Cost",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Impact Dto."
      },
      "CommonNoteDto": {
        "type": "object",
        "properties": {
          "body": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Content of the note.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a note."
      },
      "CommonPaymentTermCreateDto": {
        "required": [
          "dueDays",
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "dueDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Due days.",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Payment terms definition."
      },
      "CommonPaymentTermDto": {
        "required": [
          "deleted",
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "dueDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Due days.",
            "format": "int32"
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicate if this payment term has been deleted."
          }
        },
        "additionalProperties": false,
        "description": "Payment terms definition."
      },
      "CommonPriceBreakDto": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "quantity": {
            "type": "integer",
            "description": "Indicates at what quantity this price break becomes active.",
            "format": "int32",
            "nullable": true
          },
          "price": {
            "type": "number",
            "description": "The price \"per unit\" at this price break.",
            "format": "double",
            "nullable": true
          },
          "margin": {
            "type": "number",
            "description": "Margin",
            "format": "double",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "Currency code associated to this price break.",
            "nullable": true
          },
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor identifier. Please reference /api/vendors endpoint.",
            "nullable": true
          },
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Customer identifier. Please reference /api/customers endpoint.",
            "nullable": true
          },
          "customerTierId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Customer tier identifier. Please reference /api/customer-tiers endpoint.",
            "nullable": true
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "The unit of measurement.",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/DomainPriceBreaksPriceBreakTypeEnum"
          }
        },
        "additionalProperties": false,
        "description": "Price break definition"
      },
      "CommonReferenceDto": {
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique Id associated to the referenced object",
            "nullable": true
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Descriptive name associated to the object",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a reference to a document in a DB collection"
      },
      "CommonTimeDto": {
        "required": [
          "labor",
          "machine",
          "setup"
        ],
        "type": "object",
        "properties": {
          "labor": {
            "minimum": 0,
            "type": "number",
            "description": "Total",
            "format": "double"
          },
          "machine": {
            "minimum": 0,
            "type": "number",
            "description": "Cost per unit",
            "format": "double"
          },
          "setup": {
            "minimum": 0,
            "type": "number",
            "description": "Cost per unit",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Time information"
      },
      "CommonUnitOfMeasureConversionDto": {
        "required": [
          "destinationQuantity",
          "destinationUnitOfMeasureName",
          "sourceQuantity"
        ],
        "type": "object",
        "properties": {
          "sourceQuantity": {
            "type": "number",
            "description": "This value signifies the quantity of the item's source unit of measure.",
            "format": "double"
          },
          "destinationQuantity": {
            "type": "number",
            "description": "This value signifies the quantity of the \"destination\" unit of measure.",
            "format": "double"
          },
          "destinationUnitOfMeasureName": {
            "minLength": 1,
            "type": "string",
            "description": "The destination unit of measure."
          },
          "isCustom": {
            "type": "boolean",
            "description": "Indicate if this is a custom (not out-of-the-box) unit of measure."
          },
          "isDefault": {
            "type": "boolean",
            "description": "Indicate if this is the default unit of measure"
          },
          "multiplier": {
            "type": "number",
            "description": "Indicates the conversion factor used to calculate source to converted units.",
            "format": "double",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Unit of measure conversion definition"
      },
      "CommonUrlDto": {
        "required": [
          "uri"
        ],
        "type": "object",
        "properties": {
          "uri": {
            "minLength": 1,
            "type": "string",
            "description": "The uri to save. e.g. https://fulcrumpro.com",
            "format": "uri"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A URL along with a name description of the link"
      },
      "CompanyInfoDto": {
        "required": [
          "id",
          "isPrimary",
          "name",
          "remitToAddress",
          "shipToAddress"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "isPrimary": {
            "type": "boolean",
            "description": "Denotes whether this is the primary/default company information"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Company name"
          },
          "shipToAddress": {
            "$ref": "#/components/schemas/CommonAddressDto"
          },
          "remitToAddress": {
            "$ref": "#/components/schemas/CommonAddressDto"
          },
          "websiteUrl": {
            "type": "string",
            "description": "Company website",
            "format": "uri",
            "nullable": true
          },
          "phoneNumber": {
            "type": "string",
            "description": "Company phone number",
            "nullable": true
          },
          "faxNumber": {
            "type": "string",
            "description": "Company fax number",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Company email address",
            "format": "email",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Company information"
      },
      "CompanyInfoRequestFindParameters": {
        "type": "object",
        "properties": {
          "isPrimary": {
            "type": "boolean",
            "description": "Filter on primary company info",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding company information."
      },
      "ControllerUsersListUserStatus+UserStatusListParams": {
        "type": "object",
        "properties": {
          "userIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The user identifiers"
          }
        },
        "additionalProperties": false,
        "description": "The user status list params"
      },
      "CreatedResponseDto": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "The id of the created record"
          }
        },
        "additionalProperties": false,
        "description": "Response for a created record"
      },
      "CurrencyInfoDto": {
        "required": [
          "documentCurrencyCode",
          "primaryCurrencyCode"
        ],
        "type": "object",
        "properties": {
          "documentCurrencyCode": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Document Currency Code"
          },
          "primaryCurrencyCode": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Primary Currency Code"
          }
        },
        "additionalProperties": false,
        "description": "Currency Info Dto"
      },
      "CustomFieldDto": {
        "required": [
          "id",
          "label",
          "module",
          "name",
          "required",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "label": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Label name. Must be unique and cannot contain spaces."
          },
          "type": {
            "$ref": "#/components/schemas/DomainSystemDataCustomFieldDefinitionType"
          },
          "module": {
            "$ref": "#/components/schemas/DomainSystemDataCustomFieldDefinitionModule"
          },
          "required": {
            "type": "boolean",
            "description": "Required."
          },
          "options": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The options available (only applicable to dropdown and multiplechoicedropdown types).",
            "nullable": true
          },
          "prepend": {
            "type": "string",
            "description": "Prepended text.",
            "nullable": true
          },
          "append": {
            "type": "string",
            "description": "Appended text.",
            "nullable": true
          },
          "helpText": {
            "type": "string",
            "description": "Help information that will be visble to the user.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Custom field definition."
      },
      "CustomFieldRequestFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter custom fields based on their name.",
            "nullable": true
          },
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter custom fields based on matching ids.",
            "nullable": true
          },
          "module": {
            "$ref": "#/components/schemas/DomainSystemDataCustomFieldDefinitionModule"
          },
          "type": {
            "$ref": "#/components/schemas/DomainSystemDataCustomFieldDefinitionType"
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding custom fields."
      },
      "CustomFieldsDto": {
        "type": "object",
        "properties": {
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "The custom fields"
          }
        },
        "additionalProperties": false,
        "description": "Represents custom fields"
      },
      "CustomerAddressDto": {
        "required": [
          "address1",
          "city",
          "id",
          "postalCode"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the address (Bob's Shipping, Primary, Reno Warehouse, etc).",
            "nullable": true
          },
          "address1": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Primary address line."
          },
          "address2": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Second address line.",
            "nullable": true
          },
          "address3": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Third address line.",
            "nullable": true
          },
          "city": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address city"
          },
          "stateProvince": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address state/province.",
            "nullable": true
          },
          "postalCode": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Postal/zip code."
          },
          "country": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Country identifier.",
            "nullable": true
          },
          "shippingLeadTime": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead time for shipping contents.",
            "format": "int32",
            "nullable": true
          },
          "primaryBilling": {
            "type": "boolean",
            "description": "Signifies if this is a primary billing address."
          },
          "primaryShipping": {
            "type": "boolean",
            "description": "Signifies if this is a primary billing address."
          },
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Associated phone number",
            "nullable": true
          },
          "fax": {
            "type": "string",
            "description": "Associated fax number",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "General notes associated to this customer address",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Address with additional context for a customer"
      },
      "CustomerAddressUpdateDto": {
        "required": [
          "address1",
          "city",
          "postalCode"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the address (Bob's Shipping, Primary, Reno Warehouse, etc).",
            "nullable": true
          },
          "address1": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Primary address line."
          },
          "address2": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Second address line.",
            "nullable": true
          },
          "address3": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Third address line.",
            "nullable": true
          },
          "city": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address city"
          },
          "stateProvince": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address state/province.",
            "nullable": true
          },
          "postalCode": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Postal/zip code."
          },
          "country": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Country identifier.",
            "nullable": true
          },
          "shippingLeadTime": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead time for shipping contents.",
            "format": "int32",
            "nullable": true
          },
          "primaryBilling": {
            "type": "boolean",
            "description": "Signifies if this is a primary billing address."
          },
          "primaryShipping": {
            "type": "boolean",
            "description": "Signifies if this is a primary billing address."
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Associated phone number",
            "nullable": true
          },
          "fax": {
            "type": "string",
            "description": "Associated fax number",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "General notes associated to this customer address",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Address with additional context for updating for a customer"
      },
      "CustomerContactCreateDto": {
        "required": [
          "firstName"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "First name"
          },
          "lastName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Last name",
            "nullable": true
          },
          "position": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Position / Job Title",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Phone number",
            "nullable": true
          },
          "cellPhone": {
            "type": "string",
            "description": "Cellphone number",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A customer contact"
      },
      "CustomerContactDto": {
        "required": [
          "firstName",
          "id",
          "lastName"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id"
          },
          "firstName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "First name"
          },
          "lastName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Last name"
          },
          "position": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Position / Job Title",
            "nullable": true
          },
          "cellPhone": {
            "type": "string",
            "description": "Cellphone number",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Phone number",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A customer contact"
      },
      "CustomerContactUpdateDto": {
        "required": [
          "firstName"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "First name"
          },
          "lastName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Last name",
            "nullable": true
          },
          "position": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Position / Job Title",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Phone number",
            "nullable": true
          },
          "cellPhone": {
            "type": "string",
            "description": "Cellphone number",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A customer contact"
      },
      "CustomerCreateDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name to give the customer. Must be unique to all active customers."
          },
          "customerCode": {
            "minLength": 1,
            "type": "string",
            "description": "Unique identifier for this customer",
            "nullable": true
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Currency code/denomination associated to this customer.\nIf not provided, default to the primary currency code for the organization.",
            "nullable": true
          },
          "creditLimit": {
            "minimum": 0,
            "type": "number",
            "description": "Credit limit",
            "format": "double",
            "nullable": true
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms.",
            "nullable": true
          },
          "salesPersonId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms.",
            "nullable": true
          },
          "customerTierId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Customer tier identifier. Please reference the /api/customer-tiers endpoints.\nIf not provided, the customer is created without a tier.",
            "nullable": true
          },
          "url": {
            "type": "string",
            "description": "The Customer's website",
            "format": "uri",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Whether or not this customer is taxable on Sales Orders and Quotes",
            "nullable": true
          },
          "taxRateIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of tax codes to be automatically added to new SalesOrders for the customer when AutoAddTaxLineItems process setting is enabled.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for the customer",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Notes associated to the customer.",
            "nullable": true
          },
          "hasCustomerPortal": {
            "type": "boolean",
            "description": "Indicates if this customer is set up to use the customer portal.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of customer to be created"
      },
      "CustomerDto": {
        "required": [
          "hasCustomerPortal",
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name to give the customer. Must be unique to all active customers."
          },
          "customerCode": {
            "minLength": 1,
            "type": "string",
            "description": "Unique identifier for this customer",
            "nullable": true
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Currency code/denomination associated to this customer.\nIf not provided, default to the primary currency code for the organization.",
            "nullable": true
          },
          "url": {
            "type": "string",
            "description": "The Customer's website",
            "format": "uri",
            "nullable": true
          },
          "creditLimit": {
            "minimum": 0,
            "type": "number",
            "description": "Credit limit",
            "format": "double",
            "nullable": true
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms identifier. Please reference /api/payment-terms endpoint.",
            "nullable": true
          },
          "paymentTerms": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "salesPersonId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Sales person identifier. Please reference /api/users endpoint.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Whether or not this customer is taxable on Sales Orders and Quotes"
          },
          "taxRateIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of tax codes to be automatically added to new SalesOrders for the customer when AutoAddTaxLineItems process setting is enabled.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes associated to the customer.",
            "nullable": true
          },
          "hasCustomerPortal": {
            "type": "boolean",
            "description": "Indicates if this customer is set up to use the customer portal."
          },
          "customerTierId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Customer tier identifier. Please reference /api/customer-tiers endpoint.",
            "nullable": true
          },
          "customerTierName": {
            "type": "string",
            "description": "Customer tier name.",
            "nullable": true
          },
          "customerTypeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Customer type identifier. Read-only; assigned in the app.",
            "nullable": true
          },
          "customerTypeName": {
            "type": "string",
            "description": "Customer type name. Read-only; assigned in the app.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A customer"
      },
      "CustomerRequestFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter to customers who's name contains the given string",
            "nullable": true
          },
          "customerCode": {
            "minLength": 1,
            "type": "string",
            "description": "Unique identifier for this customer.",
            "nullable": true
          },
          "email": {
            "minLength": 1,
            "type": "string",
            "description": "The email of the customer",
            "nullable": true
          },
          "modifiedAfterUtc": {
            "type": "string",
            "description": "Filter to customer records modified after the given datetime (in UTC)",
            "format": "date-time",
            "nullable": true
          },
          "externalReference": {
            "$ref": "#/components/schemas/CommonExternalReferenceFindDto"
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding customers."
      },
      "CustomerTierDto": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Description",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Customer tier definition."
      },
      "CustomerTierRequestFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter customer tierds based on their name.",
            "nullable": true
          },
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter customer tiers based on matching ids.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding customer tiers."
      },
      "CustomerUpdateDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name to give the customer. Must be unique to all active customers."
          },
          "customerCode": {
            "minLength": 1,
            "type": "string",
            "description": "Unique identifier for this customer",
            "nullable": true
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Currency code/denomination associated to this customer.\nIf not provided, default to the primary currency code for the organization.",
            "nullable": true
          },
          "url": {
            "type": "string",
            "description": "The Customer's website",
            "format": "uri",
            "nullable": true
          },
          "creditLimit": {
            "minimum": 0,
            "type": "number",
            "description": "Credit limit",
            "format": "double",
            "nullable": true
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms identifier. Please reference /api/payment-terms endpoint.",
            "nullable": true
          },
          "salesPersonId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Sales person identifier. Please reference /api/users endpoint.",
            "nullable": true
          },
          "customerTierId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Customer tier identifier. Please reference the /api/customer-tiers endpoints.\nIf not provided or null, the customer's tier is left unchanged. To remove the tier,\nPATCH the customer with a `remove` operation on `/customerTierId`.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Whether or not this customer is taxable on Sales Orders and Quotes",
            "nullable": true
          },
          "taxRateIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of tax codes to be automatically added to new SalesOrders for the customer when AutoAddTaxLineItems process setting is enabled.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Notes associated to the customer.",
            "nullable": true
          },
          "hasCustomerPortal": {
            "type": "boolean",
            "description": "Indicates if this customer is set up to use the customer portal.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of customer to be updated"
      },
      "DepartmentCreateDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Description of the department.",
            "nullable": true
          },
          "workCenterIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the work centers associated with this department. Please reference /api/work-centers endpoint.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of a department to be created."
      },
      "DepartmentDto": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicates whether this department has been deleted"
          },
          "workCenters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkCenterDto"
            },
            "description": "Workcenters associated with this department."
          }
        },
        "additionalProperties": false,
        "description": "Department definition."
      },
      "DepartmentRequestFindParameters": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter departments based on matching ids.",
            "nullable": true
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter departments based on their name.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding departments."
      },
      "DepartmentShiftAvailableEquipmentDto": {
        "type": "object",
        "properties": {
          "equipmentId": {
            "type": "string",
            "description": "Id of the equipment. Null for an equipment row saved without an id.",
            "nullable": true
          },
          "equipmentName": {
            "type": "string",
            "description": "Name of the equipment when it was assigned to the shift.",
            "nullable": true
          },
          "monday": {
            "type": "boolean",
            "description": "Available on Monday."
          },
          "tuesday": {
            "type": "boolean",
            "description": "Available on Tuesday."
          },
          "wednesday": {
            "type": "boolean",
            "description": "Available on Wednesday."
          },
          "thursday": {
            "type": "boolean",
            "description": "Available on Thursday."
          },
          "friday": {
            "type": "boolean",
            "description": "Available on Friday."
          },
          "saturday": {
            "type": "boolean",
            "description": "Available on Saturday."
          },
          "sunday": {
            "type": "boolean",
            "description": "Available on Sunday."
          }
        },
        "additionalProperties": false,
        "description": "A piece of equipment available during a shift, and the days of the week it is available."
      },
      "DepartmentShiftCreateDto": {
        "required": [
          "departmentId",
          "endTime",
          "name",
          "startTime"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the shift."
          },
          "startTime": {
            "minLength": 1,
            "type": "string",
            "description": "Time the shift starts, as a four-digit 24-hour clock value in HHmm format, \"0000\" to \"2359\":\n\"0000\" is midnight, \"0800\" is 8:00 AM and \"1730\" is 5:30 PM."
          },
          "endTime": {
            "minLength": 1,
            "type": "string",
            "description": "Time the shift ends, in the same HHmm format as `startTime`. An end time earlier than the\nstart time means the shift runs overnight and ends on the next day. An end time equal to the start\ntime is allowed."
          },
          "days": {
            "$ref": "#/components/schemas/DepartmentShiftDaysSaveDto"
          },
          "simultaneousEquipment": {
            "$ref": "#/components/schemas/DepartmentShiftDailyCountsSaveDto"
          },
          "unlimitedCapacity": {
            "type": "boolean",
            "description": "When true, the shift has no limit on how many pieces of equipment can run at the same time, and\n`simultaneousEquipment` is not applied on any day. Omitted or null is saved as false.",
            "nullable": true
          },
          "maxDailyNewJobs": {
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of new jobs to schedule per shift, 0 or more. Omitted or null means no maximum.",
            "format": "int32",
            "nullable": true
          },
          "availableEquipment": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DepartmentShiftEquipmentSaveDto"
            },
            "description": "The equipment available during the shift. Each `equipmentId` must be equipment in the\nshift's department and can be listed only once. The server fills each `equipmentName` from\nthe equipment. Omitted or null means no equipment, so an update clears the list.",
            "nullable": true
          },
          "departmentId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the department that works this shift. The department must exist and not be deleted. It\ncannot be changed after the shift is created. Please reference the /api/departments endpoint."
          }
        },
        "additionalProperties": false,
        "description": "Details of a department shift to create. An omitted or null optional field is saved as its default."
      },
      "DepartmentShiftDailyCountsDto": {
        "type": "object",
        "properties": {
          "monday": {
            "type": "integer",
            "description": "Count for Monday.",
            "format": "int32"
          },
          "tuesday": {
            "type": "integer",
            "description": "Count for Tuesday.",
            "format": "int32"
          },
          "wednesday": {
            "type": "integer",
            "description": "Count for Wednesday.",
            "format": "int32"
          },
          "thursday": {
            "type": "integer",
            "description": "Count for Thursday.",
            "format": "int32"
          },
          "friday": {
            "type": "integer",
            "description": "Count for Friday.",
            "format": "int32"
          },
          "saturday": {
            "type": "integer",
            "description": "Count for Saturday.",
            "format": "int32"
          },
          "sunday": {
            "type": "integer",
            "description": "Count for Sunday.",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "A whole-number count for each day of the week."
      },
      "DepartmentShiftDailyCountsSaveDto": {
        "type": "object",
        "properties": {
          "monday": {
            "minimum": 0,
            "type": "integer",
            "description": "Count for Monday.",
            "format": "int32",
            "nullable": true
          },
          "tuesday": {
            "minimum": 0,
            "type": "integer",
            "description": "Count for Tuesday.",
            "format": "int32",
            "nullable": true
          },
          "wednesday": {
            "minimum": 0,
            "type": "integer",
            "description": "Count for Wednesday.",
            "format": "int32",
            "nullable": true
          },
          "thursday": {
            "minimum": 0,
            "type": "integer",
            "description": "Count for Thursday.",
            "format": "int32",
            "nullable": true
          },
          "friday": {
            "minimum": 0,
            "type": "integer",
            "description": "Count for Friday.",
            "format": "int32",
            "nullable": true
          },
          "saturday": {
            "minimum": 0,
            "type": "integer",
            "description": "Count for Saturday.",
            "format": "int32",
            "nullable": true
          },
          "sunday": {
            "minimum": 0,
            "type": "integer",
            "description": "Count for Sunday.",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A whole-number count of 0 or more for each day of the week. An omitted or null day is saved as 0."
      },
      "DepartmentShiftDaysDto": {
        "type": "object",
        "properties": {
          "monday": {
            "type": "boolean",
            "description": "Monday."
          },
          "tuesday": {
            "type": "boolean",
            "description": "Tuesday."
          },
          "wednesday": {
            "type": "boolean",
            "description": "Wednesday."
          },
          "thursday": {
            "type": "boolean",
            "description": "Thursday."
          },
          "friday": {
            "type": "boolean",
            "description": "Friday."
          },
          "saturday": {
            "type": "boolean",
            "description": "Saturday."
          },
          "sunday": {
            "type": "boolean",
            "description": "Sunday."
          }
        },
        "additionalProperties": false,
        "description": "A true or false value for each day of the week."
      },
      "DepartmentShiftDaysSaveDto": {
        "type": "object",
        "properties": {
          "monday": {
            "type": "boolean",
            "description": "Monday.",
            "nullable": true
          },
          "tuesday": {
            "type": "boolean",
            "description": "Tuesday.",
            "nullable": true
          },
          "wednesday": {
            "type": "boolean",
            "description": "Wednesday.",
            "nullable": true
          },
          "thursday": {
            "type": "boolean",
            "description": "Thursday.",
            "nullable": true
          },
          "friday": {
            "type": "boolean",
            "description": "Friday.",
            "nullable": true
          },
          "saturday": {
            "type": "boolean",
            "description": "Saturday.",
            "nullable": true
          },
          "sunday": {
            "type": "boolean",
            "description": "Sunday.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The days of the week a shift is worked. An omitted or null day is saved as false."
      },
      "DepartmentShiftDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique id of the shift."
          },
          "departmentId": {
            "type": "string",
            "description": "Id of the department that works this shift.",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "Name of the shift.",
            "nullable": true
          },
          "startTime": {
            "type": "string",
            "description": "Time the shift starts, as a four-digit 24-hour clock value in HHmm format: \"0000\" is midnight,\n\"0800\" is 8:00 AM and \"1730\" is 5:30 PM. Returned exactly as stored.",
            "nullable": true
          },
          "endTime": {
            "type": "string",
            "description": "Time the shift ends, in the same HHmm format as `startTime`. An end time earlier than the\nstart time means the shift runs overnight and ends on the next day. Returned exactly as stored.",
            "nullable": true
          },
          "lengthOfShiftInMinutes": {
            "type": "integer",
            "description": "Length of the shift in minutes, from `startTime` to `endTime`. An overnight shift\nwraps past midnight, so \"2200\" to \"0600\" is 480. Equal start and end times give 0. Null when\neither time is not a valid HHmm value (four digits, hours 00 to 23, minutes 00 to 59).",
            "format": "int32",
            "nullable": true
          },
          "days": {
            "$ref": "#/components/schemas/DepartmentShiftDaysDto"
          },
          "simultaneousEquipment": {
            "$ref": "#/components/schemas/DepartmentShiftDailyCountsDto"
          },
          "unlimitedCapacity": {
            "type": "boolean",
            "description": "When true, the shift has no limit on how many pieces of equipment can run at the same time, and\n`simultaneousEquipment` is not applied on any day."
          },
          "maxDailyNewJobs": {
            "type": "integer",
            "description": "Maximum number of new jobs to schedule per shift. Null when no maximum is set.",
            "format": "int32",
            "nullable": true
          },
          "availableEquipment": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DepartmentShiftAvailableEquipmentDto"
            },
            "description": "The equipment available during the shift and the days of the week each piece is available,\nordered by `equipmentId`. Empty when no equipment is assigned."
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicates whether this shift has been deleted."
          }
        },
        "additionalProperties": false,
        "description": "A shift worked by a department. A department can have several department shifts."
      },
      "DepartmentShiftEquipmentSaveDto": {
        "required": [
          "equipmentId"
        ],
        "type": "object",
        "properties": {
          "equipmentId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the equipment. It must be equipment in one of the shift's department's work centers, and it\ncan be listed only once. Please reference the /api/equipment endpoint."
          },
          "monday": {
            "type": "boolean",
            "description": "Available on Monday. Omitted or null is saved as false.",
            "nullable": true
          },
          "tuesday": {
            "type": "boolean",
            "description": "Available on Tuesday. Omitted or null is saved as false.",
            "nullable": true
          },
          "wednesday": {
            "type": "boolean",
            "description": "Available on Wednesday. Omitted or null is saved as false.",
            "nullable": true
          },
          "thursday": {
            "type": "boolean",
            "description": "Available on Thursday. Omitted or null is saved as false.",
            "nullable": true
          },
          "friday": {
            "type": "boolean",
            "description": "Available on Friday. Omitted or null is saved as false.",
            "nullable": true
          },
          "saturday": {
            "type": "boolean",
            "description": "Available on Saturday. Omitted or null is saved as false.",
            "nullable": true
          },
          "sunday": {
            "type": "boolean",
            "description": "Available on Sunday. Omitted or null is saved as false.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A piece of equipment to make available during a shift, and the days of the week it is available.\nThe equipment name is not sent; the server fills `equipmentName` from the equipment."
      },
      "DepartmentShiftRequestFindParameters": {
        "type": "object",
        "properties": {
          "ids": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter shifts to those with one of these ids.",
            "nullable": true
          },
          "departmentIds": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter shifts to those belonging to one of these departments.",
            "nullable": true
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter shifts whose name contains this text, ignoring case.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding department shifts. Filters combine with AND."
      },
      "DepartmentShiftUpdateDto": {
        "required": [
          "endTime",
          "name",
          "startTime"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the shift."
          },
          "startTime": {
            "minLength": 1,
            "type": "string",
            "description": "Time the shift starts, as a four-digit 24-hour clock value in HHmm format, \"0000\" to \"2359\":\n\"0000\" is midnight, \"0800\" is 8:00 AM and \"1730\" is 5:30 PM."
          },
          "endTime": {
            "minLength": 1,
            "type": "string",
            "description": "Time the shift ends, in the same HHmm format as `startTime`. An end time earlier than the\nstart time means the shift runs overnight and ends on the next day. An end time equal to the start\ntime is allowed."
          },
          "days": {
            "$ref": "#/components/schemas/DepartmentShiftDaysSaveDto"
          },
          "simultaneousEquipment": {
            "$ref": "#/components/schemas/DepartmentShiftDailyCountsSaveDto"
          },
          "unlimitedCapacity": {
            "type": "boolean",
            "description": "When true, the shift has no limit on how many pieces of equipment can run at the same time, and\n`simultaneousEquipment` is not applied on any day. Omitted or null is saved as false.",
            "nullable": true
          },
          "maxDailyNewJobs": {
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of new jobs to schedule per shift, 0 or more. Omitted or null means no maximum.",
            "format": "int32",
            "nullable": true
          },
          "availableEquipment": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DepartmentShiftEquipmentSaveDto"
            },
            "description": "The equipment available during the shift. Each `equipmentId` must be equipment in the\nshift's department and can be listed only once. The server fills each `equipmentName` from\nthe equipment. Omitted or null means no equipment, so an update clears the list.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of a department shift to save. An update replaces the whole shift: an omitted or null field\nis saved as its default, not left as it was. The shift's department cannot be changed."
      },
      "DepartmentUpdateDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Description of the department. Replaces the existing value.",
            "nullable": true
          },
          "workCenterIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the work centers associated with this department. Replaces the existing set.\nPlease reference /api/work-centers endpoint.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of a department to be updated. This is a full replacement: any field omitted\n(description, work centers) is treated as cleared."
      },
      "DomainCommonEntityType": {
        "enum": [
          "job",
          "salesOrder",
          "shipment",
          "shipmentLineItem",
          "invoice",
          "invoiceLineItem",
          "customer",
          "customerAddress",
          "item",
          "receivingInspection",
          "failedInspection"
        ],
        "type": "string"
      },
      "DomainCurrenciesDocumentCurrencyInfo": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "documentCurrencyCode": {
            "type": "string",
            "nullable": true
          },
          "primaryCurrencyCode": {
            "type": "string",
            "nullable": true
          },
          "exchangeRate": {
            "type": "number",
            "format": "double"
          },
          "exchangeRateUpdatedOnUtc": {
            "type": "string",
            "format": "date-time"
          },
          "exchangeRateError": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DomainInProcessTrackingFieldCheckpointPhase": {
        "enum": [
          "preOperation",
          "duringOperation",
          "postOperation"
        ],
        "type": "string"
      },
      "DomainInProcessTrackingFieldDataType": {
        "enum": [
          "boolean",
          "number",
          "dropdown",
          "text",
          "checkbox"
        ],
        "type": "string"
      },
      "DomainItemsAndInventoryItemOrigin": {
        "enum": [
          "make",
          "buy",
          "makeOrBuy",
          "customerSupplied",
          "kit",
          "none"
        ],
        "type": "string"
      },
      "DomainOperationsRouting_Step_RunTimeOption": {
        "enum": [
          "fixed",
          "perUnit",
          "unitsPerHour"
        ],
        "type": "string"
      },
      "DomainOperationsRouting_Step_SetupTimeOption": {
        "enum": [
          "fixed",
          "perUnit"
        ],
        "type": "string"
      },
      "DomainPriceBreaksPriceBreakTypeEnum": {
        "enum": [
          "price",
          "margin",
          "cost",
          "operation",
          "shopRate"
        ],
        "type": "string"
      },
      "DomainSystemDataCustomFieldDefinitionModule": {
        "enum": [
          "item",
          "item_Make",
          "item_Buy",
          "customer",
          "vendor",
          "quote",
          "sales_Order",
          "job",
          "invoice",
          "purchase_Order",
          "receive_Order",
          "ship_Order",
          "quote_Part_LineItem",
          "sales_Order_Part_LineItem",
          "purchase_Order_Part_LineItem",
          "outsideProcessing_LineItem",
          "shipping_Part_LineItem",
          "invoice_Part_LineItem",
          "job_Operation",
          "ncr",
          "capa"
        ],
        "type": "string"
      },
      "DomainSystemDataCustomFieldDefinitionType": {
        "enum": [
          "text",
          "multilineText",
          "dropdown",
          "multipleChoiceDropdown",
          "integerNumber",
          "decimalNumber",
          "floatingPointNumber",
          "boolean",
          "list",
          "date",
          "multipleChoiceUser"
        ],
        "type": "string"
      },
      "DomainSystemDataTaxCodeProvider": {
        "enum": [
          "avalaraOrder",
          "avalaraInvoice"
        ],
        "type": "string"
      },
      "DomainTimeTrackingTimer_Type": {
        "enum": [
          "setup",
          "run",
          "clockIn",
          "break",
          "labor",
          "machine"
        ],
        "type": "string"
      },
      "DtoAlertSourceEnum": {
        "enum": [
          "job",
          "workOrder"
        ],
        "type": "string",
        "description": "What a job-tracking alert was raised on."
      },
      "DtoCommonAvalaraOptions": {
        "type": "object",
        "properties": {
          "address": {
            "$ref": "#/components/schemas/CommonAddressDto"
          }
        },
        "additionalProperties": false,
        "description": "Options for use with Avalara (if enabled)."
      },
      "DtoCommonDateRangeFilter": {
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "description": "Inclusive start date to filter by",
            "format": "date-time",
            "nullable": true
          },
          "end": {
            "type": "string",
            "description": "Inclusive end date to filter by",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Date range used for filters"
      },
      "DtoErrorDetails": {
        "type": "object",
        "properties": {
          "errorMessage": {
            "type": "string",
            "description": "Error Message"
          }
        },
        "additionalProperties": false,
        "description": ""
      },
      "DtoInventoryEventsInventoryEventChangeDetails": {
        "required": [
          "quantity",
          "transactionId"
        ],
        "type": "object",
        "properties": {
          "transactionId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The resulting \"transaction\" id. Please reference /api/inventory-transactions endpoint."
          },
          "quantity": {
            "type": "number",
            "description": "Quantity",
            "format": "double"
          },
          "quantityChangeType": {
            "$ref": "#/components/schemas/V2InventoryRestResourcesTransactionChangeType"
          },
          "laborValue": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "machineValue": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "outsideProcessingValue": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "materialValue": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "totalValue": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "netValueChange": {
            "$ref": "#/components/schemas/CommonCostDto"
          }
        },
        "additionalProperties": false,
        "description": "Inventory event change information."
      },
      "DtoItemInputUnitCostBasisEnum": {
        "enum": [
          "none",
          "vendorPriceBreak",
          "vendorPrice",
          "inventoryValue",
          "inventoryAndVendor",
          "materialVendor"
        ],
        "type": "string",
        "description": "The source that priced an item's input unit cost."
      },
      "DtoOperationRates": {
        "type": "object",
        "properties": {
          "hourlyRateForSetupInPrimaryCurrency": {
            "type": "number",
            "description": "Hourly cost rate applied to setup time.",
            "format": "double",
            "nullable": true
          },
          "hourlyRateForLaborInPrimaryCurrency": {
            "type": "number",
            "description": "Hourly cost rate applied to labor time.",
            "format": "double",
            "nullable": true
          },
          "hourlyRateForOverheadInPrimaryCurrency": {
            "type": "number",
            "description": "Hourly overhead cost rate.",
            "format": "double",
            "nullable": true
          },
          "hourlyRateForMachineInPrimaryCurrency": {
            "type": "number",
            "description": "Hourly cost rate applied to machine time.",
            "format": "double",
            "nullable": true
          },
          "hourlyShopRateForSetupInPrimaryCurrency": {
            "type": "number",
            "description": "Hourly shop rate charged for setup time when pricing.",
            "format": "double",
            "nullable": true
          },
          "hourlyShopRateForRunInPrimaryCurrency": {
            "type": "number",
            "description": "Hourly shop rate charged for run time when pricing.",
            "format": "double",
            "nullable": true
          },
          "hourlyShopRateForMachineInPrimaryCurrency": {
            "type": "number",
            "description": "Hourly shop rate charged for machine time when pricing.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Hourly cost and shop rates for an operation, in the shop's primary currency. Cost rates\noverride work-center rates when costing jobs; shop rates drive quoted pricing for the\noperation. A null rate means no operation-level rate is set and the work-center rates apply."
      },
      "DtoPagedResultDtoCAPACapaDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CAPACapaDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoChangeOrderSummaryDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChangeOrderSummaryDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoCommonCostBreakdownDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonCostBreakdownDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoDtoReportingInventoryReportRow": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DtoReportingInventoryReportRow"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoDtoReportingInvoiceReportRow": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DtoReportingInvoiceReportRow"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoDtoReportingJobActivityByOperatorReportRow": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DtoReportingJobActivityByOperatorReportRow"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoDtoReportingJobActivityReportRow": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DtoReportingJobActivityReportRow"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoDtoReportingMaterialRequirementsReportRow": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DtoReportingMaterialRequirementsReportRow"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoDtoReportingQuoteReportRow": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DtoReportingQuoteReportRow"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoDtoReportingSalesOrderLinesReportRow": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DtoReportingSalesOrderLinesReportRow"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoDtoReportingShippingReportRow": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DtoReportingShippingReportRow"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoDtoReportingTimeClockReportRow": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DtoReportingTimeClockReportRow"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoInventoryEventsInventoryEventDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InventoryEventsInventoryEventDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoInventoryTransactionDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InventoryTransactionDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoJobMessageDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobMessageDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoNCRNcrDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NCRNcrDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoNestingNestableJobGroupDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NestingNestableJobGroupDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoShipmentLineItemDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentLineItemDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoShipmentsShipmentDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentsShipmentDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoTagDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TagDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoTaskDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TaskDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoTimeClockDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TimeClockDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoTimerDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TimerDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoToolCalibrationSummaryDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolCalibrationSummaryDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoToolCalibrationTemplateVersionDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolCalibrationTemplateVersionDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPagedResultDtoToolSummaryDto": {
        "required": [
          "data",
          "hasNextPage",
          "hasPreviousPage",
          "page",
          "pageSize",
          "totalCount",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolSummaryDto"
            },
            "description": "The data"
          },
          "page": {
            "type": "integer",
            "description": "The 1-indexed page",
            "format": "int32",
            "readOnly": true
          },
          "pageSize": {
            "type": "integer",
            "description": "The page size",
            "format": "int32",
            "readOnly": true
          },
          "totalCount": {
            "type": "integer",
            "description": "The total count of records",
            "format": "int32"
          },
          "totalPages": {
            "type": "integer",
            "description": "The total pages",
            "format": "int32",
            "readOnly": true
          },
          "hasPreviousPage": {
            "type": "boolean",
            "description": "True if there is a previous page",
            "readOnly": true
          },
          "hasNextPage": {
            "type": "boolean",
            "description": "True if there is a next page",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Paged result"
      },
      "DtoPriceBreakSalesPriceBreakPricingTypeEnum": {
        "enum": [
          "price",
          "margin"
        ],
        "type": "string",
        "description": "How a sales price break is calculated."
      },
      "DtoQuoteUpdateQuotesStatus": {
        "enum": [
          "draft",
          "needsApproval",
          "approved",
          "sent",
          "won",
          "lost"
        ],
        "type": "string",
        "description": "Statuses you can update a quote too"
      },
      "DtoQuotesStatus": {
        "enum": [
          "open",
          "draft",
          "needsApproval",
          "approved",
          "sent",
          "won",
          "lost"
        ],
        "type": "string",
        "description": "Quotes status"
      },
      "DtoReportingInventoryReportFilter": {
        "type": "object",
        "properties": {
          "itemNumber": {
            "type": "string",
            "description": "Optional exact-match filter on the item number (the user-facing item identifier). Null means no\nitem filter.",
            "nullable": true
          },
          "locationName": {
            "type": "string",
            "description": "Optional exact-match filter on the inventory location name. Null means no location filter.",
            "nullable": true
          },
          "category": {
            "type": "string",
            "description": "Optional exact-match filter on the item category. Null means no category filter.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Constrained filter for the inventory reporting list endpoint. Every field maps to a fixed,\nserver-controlled column; values are always bound as Dapper parameters and never concatenated\ninto SQL."
      },
      "DtoReportingInventoryReportRow": {
        "type": "object",
        "properties": {
          "number": {
            "type": "string",
            "description": "Item number (the user-facing identifier for an item).",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Item description.",
            "nullable": true
          },
          "revision": {
            "type": "string",
            "description": "Item revision label.",
            "nullable": true
          },
          "origin": {
            "type": "string",
            "description": "Item origin classification (e.g. Make, Buy, MakeOrBuy, CustomerSupplied).",
            "nullable": true
          },
          "isSellable": {
            "type": "string",
            "description": "\"Sellable\" when the item can appear on a sales order line, otherwise empty.",
            "nullable": true
          },
          "primaryVendorName": {
            "type": "string",
            "description": "Default vendor name for purchasing the item (Buy or MakeOrBuy items only).",
            "nullable": true
          },
          "tags": {
            "type": "string",
            "description": "Comma-separated list of descriptive, user-applied tags on the item.",
            "nullable": true
          },
          "minimumStockOnHand": {
            "type": "number",
            "description": "Configured minimum stock threshold for reorder planning.",
            "format": "double",
            "nullable": true
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "Inventory unit of measure (e.g. Piece, Foot, Centimeter).",
            "nullable": true
          },
          "accountingCode1": {
            "type": "string",
            "description": "Primary accounting code mapped to this item.",
            "nullable": true
          },
          "accountingCode2": {
            "type": "string",
            "description": "Secondary accounting code, when configured.",
            "nullable": true
          },
          "accountingClass": {
            "type": "string",
            "description": "Accounting classification.",
            "nullable": true
          },
          "category": {
            "type": "string",
            "description": "Item category for grouping.",
            "nullable": true
          },
          "isArchived": {
            "type": "string",
            "description": "\"Archived\" when the item is archived and no longer in active use, otherwise empty.",
            "nullable": true
          },
          "shippingUnitWeight": {
            "type": "number",
            "description": "Weight per inventory unit used for shipping calculations.",
            "format": "double",
            "nullable": true
          },
          "materialUnitWeightLbs": {
            "type": "number",
            "description": "Underlying material weight per unit, in pounds, for raw-material shape items.",
            "format": "double",
            "nullable": true
          },
          "onHandQty": {
            "type": "number",
            "description": "Quantity currently on hand for this lot at this location.",
            "format": "double",
            "nullable": true
          },
          "lotNumber": {
            "type": "string",
            "description": "Lot identifier.",
            "nullable": true
          },
          "expirationDate": {
            "type": "string",
            "description": "Lot expiration date when applicable.",
            "format": "date-time",
            "nullable": true
          },
          "locationName": {
            "type": "string",
            "description": "Inventory location name.",
            "nullable": true
          },
          "isCustom": {
            "type": "string",
            "description": "\"Custom\" when the lot holds customized / non-standard variations of an item, otherwise empty.",
            "nullable": true
          },
          "materialValue": {
            "type": "number",
            "description": "Per-unit value of input materials required to produce the items in this lot.",
            "format": "double",
            "nullable": true
          },
          "laborValue": {
            "type": "number",
            "description": "Per-unit value of labor required to produce the items in this lot.",
            "format": "double",
            "nullable": true
          },
          "machineValue": {
            "type": "number",
            "description": "Per-unit value of equipment time required to produce the items in this lot.",
            "format": "double",
            "nullable": true
          },
          "outsideProcessingValue": {
            "type": "number",
            "description": "Per-unit value of outside processes required to produce the items in this lot.",
            "format": "double",
            "nullable": true
          },
          "totalUnitValue": {
            "type": "number",
            "description": "Sum of per-unit cost components (material + labor + machine + OP).",
            "format": "double",
            "nullable": true
          },
          "totalValue": {
            "type": "number",
            "description": "On-hand quantity × total unit value (extended inventory value).",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One row of the pre-joined inventory reporting view (`rpt.View_ExposedReportingData_Inventory`):\none (item, lot, location) combination, carrying on-hand quantity, per-unit and extended valuation\n(material/labor/machine/OP), lot and location context, and item categorization. Property names are\nclean identifiers; the query aliases each source column (e.g. `[On Hand Qty]`) to the matching\nproperty so Dapper can bind it."
      },
      "DtoReportingInvoiceReportFilter": {
        "type": "object",
        "properties": {
          "issuedDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the invoice's Issued Date. Null means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "issuedDateTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to the invoice's Issued Date (the whole `to` day is included).\nNull means no upper bound.",
            "format": "date-time",
            "nullable": true
          },
          "invoiceStatus": {
            "type": "string",
            "description": "Optional exact-match filter on the invoice lifecycle status (e.g. \"Issued\", \"Paid\"). Null means\nno status filter.",
            "nullable": true
          },
          "lineType": {
            "type": "string",
            "description": "Optional exact-match filter on the line type (Part, Shipping, Fee, Deposit, Discount, Refund,\nTax, or NA). Null means no line-type filter.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Constrained filter for the invoice reporting list endpoint. Every field maps to a fixed,\nserver-controlled column; values are always bound as Dapper parameters and never concatenated\ninto SQL."
      },
      "DtoReportingInvoiceReportRow": {
        "type": "object",
        "properties": {
          "company": {
            "type": "string",
            "description": "Issuing company / tenant company name.",
            "nullable": true
          },
          "invoiceNumber": {
            "type": "integer",
            "description": "Numeric invoice identifier assigned by Fulcrum.",
            "format": "int32",
            "nullable": true
          },
          "invoiceStatus": {
            "type": "string",
            "description": "Lifecycle state — typically New, Approved, Issued, Paid.",
            "nullable": true
          },
          "salesOrderNumber": {
            "type": "integer",
            "description": "Number identifying the sales order being invoiced.",
            "format": "int32",
            "nullable": true
          },
          "customerPurchaseOrder": {
            "type": "string",
            "description": "Customer's PO number recorded on the sales order.",
            "nullable": true
          },
          "customerName": {
            "type": "string",
            "description": "Display name of the billed customer.",
            "nullable": true
          },
          "salesPerson": {
            "type": "string",
            "description": "Name of the salesperson associated with the sales order.",
            "nullable": true
          },
          "isDeposit": {
            "type": "string",
            "description": "Set to the string \"Deposit\" when the row represents a deposit; null otherwise.",
            "nullable": true
          },
          "createdDate": {
            "type": "string",
            "description": "UTC timestamp when the invoice record was created.",
            "format": "date-time",
            "nullable": true
          },
          "lineType": {
            "type": "string",
            "description": "Discriminator — Part, Shipping, Fee, Deposit, Discount, Refund, Tax, or NA.",
            "nullable": true
          },
          "lineItemName": {
            "type": "string",
            "description": "Item name (for part lines) or descriptive label for non-part lines.",
            "nullable": true
          },
          "customerPartNumber": {
            "type": "string",
            "description": "Customer's part number for this line, when supplied.",
            "nullable": true
          },
          "customerPartDescription": {
            "type": "string",
            "description": "Customer's description for this line, when supplied.",
            "nullable": true
          },
          "itemDescription": {
            "type": "string",
            "description": "Internal item description for the line.",
            "nullable": true
          },
          "accountingCode": {
            "type": "string",
            "description": "Accounting code mapped to the invoice line.",
            "nullable": true
          },
          "itemTags": {
            "type": "string",
            "description": "Comma-separated list of descriptive tags from the item.",
            "nullable": true
          },
          "issuedDate": {
            "type": "string",
            "description": "Date the invoice was issued. NULL for drafts.",
            "format": "date-time",
            "nullable": true
          },
          "dueDate": {
            "type": "string",
            "description": "Date payment is due per the invoice's payment terms.",
            "format": "date-time",
            "nullable": true
          },
          "salesOrderTotal": {
            "type": "number",
            "description": "Total of the source sales order (may differ from invoice total).",
            "format": "double",
            "nullable": true
          },
          "unitPrice": {
            "type": "number",
            "description": "Per-unit price for the line (varies by Line Type; negative for discounts).",
            "format": "double",
            "nullable": true
          },
          "quantityInvoiced": {
            "type": "number",
            "description": "Quantity billed on this line.",
            "format": "double",
            "nullable": true
          },
          "invoiceAmount": {
            "type": "number",
            "description": "Extended amount for this line before tax.",
            "format": "double",
            "nullable": true
          },
          "isTaxable": {
            "type": "integer",
            "description": "1 when the line is subject to taxation, otherwise 0. (Computed 1/0 flag in the view.)",
            "format": "int32",
            "nullable": true
          },
          "taxCode": {
            "type": "string",
            "description": "Descriptive name of the tax code applied to the line, when applicable.",
            "nullable": true
          },
          "taxTotal": {
            "type": "number",
            "description": "Equivalent to Invoice Amount for tax line items; 0 otherwise.",
            "format": "double",
            "nullable": true
          },
          "invoiceTotalWithoutTax": {
            "type": "number",
            "description": "Invoice-level total excluding tax (repeats on every line of the invoice).",
            "format": "double",
            "nullable": true
          },
          "invoiceTotalWithTax": {
            "type": "number",
            "description": "Invoice-level total including tax (repeats on every line of the invoice).",
            "format": "double",
            "nullable": true
          },
          "paidDate": {
            "type": "string",
            "description": "Date the invoice was marked paid; null while open.",
            "format": "date-time",
            "nullable": true
          },
          "late": {
            "type": "integer",
            "description": "1 when the invoice is past Due Date and unpaid or was paid late, otherwise 0. (Computed 1/0 flag in the view.)",
            "format": "int32",
            "nullable": true
          },
          "daysLate": {
            "type": "integer",
            "description": "Days between Due Date and either Paid Date (if paid) or today (if open). 0 if not yet due.",
            "format": "int32",
            "nullable": true
          },
          "customerCurrencyCode": {
            "type": "string",
            "description": "ISO currency code of the customer's billing currency.",
            "nullable": true
          },
          "shipmentName": {
            "type": "string",
            "description": "Concatenated names of shipments invoiced on this line (comma-separated).",
            "nullable": true
          },
          "shipmentsLine1s": {
            "type": "string",
            "description": "Together with ShipmentsLine2s, concatenated shipment address values (comma-separated).",
            "nullable": true
          },
          "shipmentsLine2s": {
            "type": "string",
            "description": "Together with ShipmentsLine1s, concatenated shipment address values (comma-separated).",
            "nullable": true
          },
          "shipmentsCities": {
            "type": "string",
            "description": "Concatenated shipment cities (comma-separated).",
            "nullable": true
          },
          "shipmentsStates": {
            "type": "string",
            "description": "Concatenated shipment state/provinces (comma-separated).",
            "nullable": true
          },
          "shipmentsCountries": {
            "type": "string",
            "description": "Concatenated shipment countries (comma-separated).",
            "nullable": true
          },
          "accountingClass": {
            "type": "string",
            "description": "Accounting classification for the item associated to the line, if applicable.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One row of the pre-joined invoice reporting view (`rpt.View_ExposedReportingData_Invoice`): one\ninvoice line item, joined to sales-order and shipment context with line type, pricing, tax, and aging\ndetail. Property names are clean identifiers; the query aliases each source column (e.g.\n`[Issued Date]`) to the matching property so Dapper can bind it."
      },
      "DtoReportingJobActivityByOperatorReportFilter": {
        "type": "object",
        "properties": {
          "startedOrCreatedDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the run's Started or Created Date. Null means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "startedOrCreatedDateTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to the run's Started or Created Date (the whole `to` day is\nincluded). Null means no upper bound.",
            "format": "date-time",
            "nullable": true
          },
          "employee": {
            "type": "string",
            "description": "Optional exact-match filter on the operator / employee name. Null means no operator filter.",
            "nullable": true
          },
          "department": {
            "type": "string",
            "description": "Optional exact-match filter on the department containing the operation's work center. Null means\nno department filter.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Constrained filter for the job-activity-by-operator reporting list endpoint. Every field maps to a\nfixed, server-controlled column; values are always bound as Dapper parameters and never concatenated\ninto SQL."
      },
      "DtoReportingJobActivityByOperatorReportRow": {
        "type": "object",
        "properties": {
          "jobName": {
            "type": "string",
            "description": "Job name.",
            "nullable": true
          },
          "item": {
            "type": "string",
            "description": "Item being produced.",
            "nullable": true
          },
          "operationName": {
            "type": "string",
            "description": "Operation name within the routing.",
            "nullable": true
          },
          "operationNumber": {
            "type": "integer",
            "description": "Operation sequence number within the routing.",
            "format": "int32",
            "nullable": true
          },
          "employee": {
            "type": "string",
            "description": "Operator name.",
            "nullable": true
          },
          "startedOrCreatedDate": {
            "type": "string",
            "description": "Date the operator's run started (or the row was created).",
            "format": "date-time",
            "nullable": true
          },
          "jobCompletedDate": {
            "type": "string",
            "description": "Completion date of the job overall.",
            "format": "date-time",
            "nullable": true
          },
          "itemDescription": {
            "type": "string",
            "description": "Item description.",
            "nullable": true
          },
          "itemRevision": {
            "type": "string",
            "description": "Item revision when applicable.",
            "nullable": true
          },
          "isParent": {
            "type": "integer",
            "description": "1 when this item is a parent assembly within the job, otherwise 0. (Computed 1/0 flag.)",
            "format": "int32",
            "nullable": true
          },
          "lastOperationOnItem": {
            "type": "integer",
            "description": "1 when this is the final operation in the item's routing, otherwise 0. (Computed 1/0 flag.)",
            "format": "int32",
            "nullable": true
          },
          "productionDueDate": {
            "type": "string",
            "description": "Job's production due date.",
            "format": "date-time",
            "nullable": true
          },
          "salesOrderNumber": {
            "type": "string",
            "description": "Source sales order number.",
            "nullable": true
          },
          "customer": {
            "type": "string",
            "description": "Customer name from the sales order.",
            "nullable": true
          },
          "customerPurchaseOrder": {
            "type": "string",
            "description": "Customer's PO number from the sales order.",
            "nullable": true
          },
          "jobPriority": {
            "type": "string",
            "description": "Job priority value.",
            "nullable": true
          },
          "jobStatus": {
            "type": "string",
            "description": "Job lifecycle status.",
            "nullable": true
          },
          "jobScheduledStart": {
            "type": "string",
            "description": "Scheduled start time of the job.",
            "format": "date-time",
            "nullable": true
          },
          "jobScheduledEnd": {
            "type": "string",
            "description": "Scheduled end time of the job.",
            "format": "date-time",
            "nullable": true
          },
          "jobLateStatus": {
            "type": "string",
            "description": "Late classification for the job (Late or On Time).",
            "nullable": true
          },
          "jobPlannedQty": {
            "type": "number",
            "description": "Planned quantity for the job.",
            "format": "double",
            "nullable": true
          },
          "uoM": {
            "type": "string",
            "description": "Unit of measure for the item being produced.",
            "nullable": true
          },
          "department": {
            "type": "string",
            "description": "Department containing the work center.",
            "nullable": true
          },
          "shift": {
            "type": "string",
            "description": "Shift assigned to the operation.",
            "nullable": true
          },
          "scheduledEquipment": {
            "type": "string",
            "description": "Equipment scheduled for this operation.",
            "nullable": true
          },
          "operationStatus": {
            "type": "string",
            "description": "Operation lifecycle status (Ready, Pending, Running, Paused, Complete).",
            "nullable": true
          },
          "operationCompletedDate": {
            "type": "string",
            "description": "Completion date of the operation.",
            "format": "date-time",
            "nullable": true
          },
          "setupComplete": {
            "type": "string",
            "description": "\"TRUE\" when the setup phase is complete, otherwise \"FALSE\".",
            "nullable": true
          },
          "runComplete": {
            "type": "string",
            "description": "\"TRUE\" when the run phase is complete, otherwise \"FALSE\".",
            "nullable": true
          },
          "estimatedSetupTimeHours": {
            "type": "number",
            "description": "Estimated setup hours for the operation.",
            "format": "double",
            "nullable": true
          },
          "estimatedRunTimeHours": {
            "type": "number",
            "description": "Estimated run hours for the operation.",
            "format": "double",
            "nullable": true
          },
          "estimatedMachineTimeHours": {
            "type": "number",
            "description": "Estimated machine hours for the operation.",
            "format": "double",
            "nullable": true
          },
          "unitsCompletedOnOperation": {
            "type": "number",
            "description": "Quantity completed on the operation overall.",
            "format": "double",
            "nullable": true
          },
          "isOutsideProcessing": {
            "type": "string",
            "description": "\"Outside Processing\" when the operation is performed by an outside vendor, otherwise empty.",
            "nullable": true
          },
          "setupTimeHours": {
            "type": "number",
            "description": "Operator's actual setup hours on this run.",
            "format": "double",
            "nullable": true
          },
          "laborTimeHours": {
            "type": "number",
            "description": "Operator's actual labor hours on this run.",
            "format": "double",
            "nullable": true
          },
          "machineTimeHours": {
            "type": "number",
            "description": "Machine hours recorded on this run.",
            "format": "double",
            "nullable": true
          },
          "startedOn": {
            "type": "string",
            "description": "Timer start timestamp for this run.",
            "format": "date-time",
            "nullable": true
          },
          "stoppedOn": {
            "type": "string",
            "description": "Timer stop timestamp for this run.",
            "format": "date-time",
            "nullable": true
          },
          "qtyCompletedThisRun": {
            "type": "number",
            "description": "Quantity this operator reported on this operation and day, netted across the entries falling on it.\nA counter decrement is recorded as a negative entry, so a day can read lower than it was reported,\nnegative where its decrements exceed its reports, or zero where its entries net to nothing. An entry\nbelongs to the day of the operator's timer it was logged during — from five minutes before the timer\nstarted to an hour after it stopped, a timer never stopped counting as one day — so an entry logged\nafter midnight UTC on a shift that began before it stays with that shift. An entry outside every\ntimer of theirs joins the operator's row for its own day, or is a row by itself with no hours when\nnone of their timers started that day; it is never omitted. Empty on a row whose only entries are inventory.\nWhere anyone reported a non-zero quantity against the operation, each operator is credited only with\nwhat they themselves reported, so completing the operation does not credit its run total to whoever\nclosed it; that total stands in only for an operation nobody reported against. Attribution is the\nlogin that submitted the entry, which on a shared shop-floor tablet may not be the operator whose\ntimer ran.",
            "format": "double",
            "nullable": true
          },
          "qtyInventoriedThisRun": {
            "type": "number",
            "description": "Quantity moved to inventory on this operation and day by this operator, summed across the inventory\nentries falling on the row. Inventory recorded without an operation, as item completion records it, is\nattributed to the item's final operation, once. A completion that is reversed and redone counts each\ntime, since the reversal leaves the original entry in the job log.",
            "format": "double",
            "nullable": true
          },
          "unitsPerHour": {
            "type": "number",
            "description": "Throughput rate for this run: quantity completed this run divided by labor hours, or by machine hours\nwhen no labor hours were recorded. Zero when neither was recorded, even on a row with no completed\nquantity; empty only where hours were recorded and the row has no completed quantity. Negative where\nthat quantity is negative and hours were recorded. Follows the attribution of quantity completed this\nrun, not the operation's run total.",
            "format": "double",
            "nullable": true
          },
          "setupRate": {
            "type": "number",
            "description": "Hourly rate applied to setup hours.",
            "format": "double",
            "nullable": true
          },
          "laborRate": {
            "type": "number",
            "description": "Hourly rate applied to labor hours.",
            "format": "double",
            "nullable": true
          },
          "machineRate": {
            "type": "number",
            "description": "Hourly rate applied to machine hours.",
            "format": "double",
            "nullable": true
          },
          "setupCost": {
            "type": "number",
            "description": "Computed setup cost for this run (hours × rate).",
            "format": "double",
            "nullable": true
          },
          "laborCost": {
            "type": "number",
            "description": "Computed labor cost for this run (hours × rate).",
            "format": "double",
            "nullable": true
          },
          "machineCost": {
            "type": "number",
            "description": "Computed machine cost for this run (hours × rate).",
            "format": "double",
            "nullable": true
          },
          "operationScheduledStart": {
            "type": "string",
            "description": "Scheduled start time for this operation.",
            "format": "date-time",
            "nullable": true
          },
          "operationScheduledEnd": {
            "type": "string",
            "description": "Scheduled end time for this operation.",
            "format": "date-time",
            "nullable": true
          },
          "systemOperationId": {
            "type": "string",
            "description": "Internal stable identifier for the operation.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One row of the pre-joined job-activity-by-operator reporting view\n(`rpt.View_ExposedReportingData_JobActivityByOperator`): one operation, day, and operator,\ncarrying per-operator setup/labor/machine time and cost, run-by-run quantities, rates, and job/routing\ncontext. Property names are clean identifiers; the query aliases each source column\n(e.g. `[Started or Created Date]`) to the matching property so Dapper can bind it."
      },
      "DtoReportingJobActivityReportFilter": {
        "type": "object",
        "properties": {
          "operationStatus": {
            "type": "string",
            "description": "Optional exact-match filter on the operation lifecycle status (e.g. \"Running\", \"Complete\"). Null\nmeans no operation-status filter.",
            "nullable": true
          },
          "jobStatus": {
            "type": "string",
            "description": "Optional exact-match filter on the job lifecycle status (e.g. \"In Progress\", \"Complete\"). Null\nmeans no job-status filter.",
            "nullable": true
          },
          "department": {
            "type": "string",
            "description": "Optional exact-match filter on the department containing the operation's scheduled work center.\nNull means no department filter.",
            "nullable": true
          },
          "productionDueDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the job's Production Due Date. Null means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "productionDueDateTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to the job's Production Due Date (the whole `to` day is\nincluded). Null means no upper bound.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Constrained filter for the job-activity reporting list endpoint. Every field maps to a fixed,\nserver-controlled column; values are always bound as Dapper parameters and never concatenated\ninto SQL."
      },
      "DtoReportingJobActivityReportRow": {
        "type": "object",
        "properties": {
          "jobName": {
            "type": "string",
            "description": "Job name (typically the user-facing job identifier).",
            "nullable": true
          },
          "item": {
            "type": "string",
            "description": "Item number being produced.",
            "nullable": true
          },
          "itemDescription": {
            "type": "string",
            "description": "Item description.",
            "nullable": true
          },
          "itemRevision": {
            "type": "string",
            "description": "Item revision when revision tracking is enabled.",
            "nullable": true
          },
          "itemTags": {
            "type": "string",
            "description": "Comma-separated descriptive tags from the item.",
            "nullable": true
          },
          "productionDueDate": {
            "type": "string",
            "description": "Job's production due date.",
            "format": "date-time",
            "nullable": true
          },
          "salesOrderNumber": {
            "type": "string",
            "description": "Source sales order number, when the job is SO-driven.",
            "nullable": true
          },
          "customer": {
            "type": "string",
            "description": "Customer name from the sales order.",
            "nullable": true
          },
          "customerPurchaseOrder": {
            "type": "string",
            "description": "Customer's PO number from the sales order.",
            "nullable": true
          },
          "jobPriority": {
            "type": "string",
            "description": "Job priority value (High, Medium, or Low).",
            "nullable": true
          },
          "jobStatus": {
            "type": "string",
            "description": "Job lifecycle status (Approved, Scheduled, In Progress, Complete, etc.).",
            "nullable": true
          },
          "jobScheduledStart": {
            "type": "string",
            "description": "Scheduled start time of the job.",
            "format": "date-time",
            "nullable": true
          },
          "jobScheduledEnd": {
            "type": "string",
            "description": "Scheduled end time of the job.",
            "format": "date-time",
            "nullable": true
          },
          "jobLateStatus": {
            "type": "string",
            "description": "Late classification for the job (Late or On Time).",
            "nullable": true
          },
          "jobPlannedQty": {
            "type": "number",
            "description": "Planned quantity for the job.",
            "format": "double",
            "nullable": true
          },
          "uoM": {
            "type": "string",
            "description": "Unit of measure for the item being produced.",
            "nullable": true
          },
          "department": {
            "type": "string",
            "description": "Department containing the operation's scheduled work center.",
            "nullable": true
          },
          "shift": {
            "type": "string",
            "description": "Shift assigned to the operation.",
            "nullable": true
          },
          "operationName": {
            "type": "string",
            "description": "Operation name within the routing.",
            "nullable": true
          },
          "scheduledEquipment": {
            "type": "string",
            "description": "Equipment scheduled for this operation.",
            "nullable": true
          },
          "operationNumber": {
            "type": "integer",
            "description": "Operation sequence number within the routing.",
            "format": "int32",
            "nullable": true
          },
          "operationStatus": {
            "type": "string",
            "description": "Operation lifecycle status (Ready, Pending, Running, Paused, Complete).",
            "nullable": true
          },
          "setupComplete": {
            "type": "string",
            "description": "\"TRUE\" when the setup phase is complete, otherwise \"FALSE\".",
            "nullable": true
          },
          "runComplete": {
            "type": "string",
            "description": "\"TRUE\" when the run phase is complete, otherwise \"FALSE\".",
            "nullable": true
          },
          "estimatedSetupTimeHours": {
            "type": "number",
            "description": "Estimated setup hours for this operation.",
            "format": "double",
            "nullable": true
          },
          "estimatedRunTimeHours": {
            "type": "number",
            "description": "Estimated run hours for this operation.",
            "format": "double",
            "nullable": true
          },
          "estimatedMachineTimeHours": {
            "type": "number",
            "description": "Estimated machine hours for this operation.",
            "format": "double",
            "nullable": true
          },
          "unitsCompletedOnOperation": {
            "type": "number",
            "description": "Quantity completed on this operation so far.",
            "format": "double",
            "nullable": true
          },
          "unitsCompletedOnJob": {
            "type": "number",
            "description": "Quantity completed on the job overall.",
            "format": "double",
            "nullable": true
          },
          "isOutsideProcessing": {
            "type": "string",
            "description": "\"Outside Processing\" when this operation is performed by an outside vendor, otherwise empty.",
            "nullable": true
          },
          "outsideProcessingLeadTime": {
            "type": "integer",
            "description": "Configured lead time for outside-processing operations.",
            "format": "int32",
            "nullable": true
          },
          "isRework": {
            "type": "boolean",
            "description": "True when this operation row represents rework rather than original production.",
            "nullable": true
          },
          "totalOperationTimeHours": {
            "type": "number",
            "description": "Total elapsed operator time on this operation (across all phases).",
            "format": "double",
            "nullable": true
          },
          "totalMachineTimeHours": {
            "type": "number",
            "description": "Total elapsed machine time on this operation.",
            "format": "double",
            "nullable": true
          },
          "operationScheduledStart": {
            "type": "string",
            "description": "Scheduled start time for this operation.",
            "format": "date-time",
            "nullable": true
          },
          "actualStart": {
            "type": "string",
            "description": "Actual start timestamp (from timer data).",
            "format": "date-time",
            "nullable": true
          },
          "lastStoppedOn": {
            "type": "string",
            "description": "Timestamp of the most recent timer stop.",
            "format": "date-time",
            "nullable": true
          },
          "latestUser": {
            "type": "string",
            "description": "Name of the most recent operator to work on the operation.",
            "nullable": true
          },
          "scheduledEnd": {
            "type": "string",
            "description": "Scheduled end time for this operation.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One row of the pre-joined job-activity reporting view\n(`rpt.View_ExposedReportingData_JobActivity`): one operation per item-to-make per job, carrying\nschedule, timer, completion-progress, and routing context. Property names are clean identifiers; the\nquery aliases each source column (e.g. `[Production Due Date]`) to the matching property so\nDapper can bind it."
      },
      "DtoReportingMaterialRequirementsReportFilter": {
        "type": "object",
        "properties": {
          "jobStatus": {
            "type": "string",
            "description": "Optional exact-match filter on the job lifecycle status (e.g. \"Scheduled\", \"In Progress\"). Null\nmeans no job-status filter.",
            "nullable": true
          },
          "operationName": {
            "type": "string",
            "description": "Optional exact-match filter on the operation name (e.g. \"Turret Laser\"). Null means no\noperation-name filter.",
            "nullable": true
          },
          "operationStatus": {
            "type": "string",
            "description": "Optional exact-match filter on the operation lifecycle status (e.g. \"Ready\", \"Running\"). Null\nmeans no operation-status filter.",
            "nullable": true
          },
          "requirementType": {
            "type": "string",
            "description": "Optional exact-match filter on the requirement type: \"Item\" or \"Material\". Null returns both.",
            "nullable": true
          },
          "productionDueDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the job's Production Due Date. Null means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "productionDueDateTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to the job's Production Due Date (the whole `to` day is\nincluded). Null means no upper bound.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Constrained filter for the material-requirements reporting list endpoint. Every field maps to a\nfixed, server-controlled column; values are always bound as Dapper parameters and never\nconcatenated into SQL."
      },
      "DtoReportingMaterialRequirementsReportRow": {
        "type": "object",
        "properties": {
          "rowKey": {
            "type": "string",
            "description": "Stable, unique row key (requirement-kind prefix + primary key). Used only for total-order paging.",
            "nullable": true
          },
          "jobName": {
            "type": "string",
            "description": "Job name (typically the user-facing job identifier).",
            "nullable": true
          },
          "jobStatus": {
            "type": "string",
            "description": "Job lifecycle status (Approved, Scheduled, In Progress, Complete, etc.).",
            "nullable": true
          },
          "salesOrderNumber": {
            "type": "string",
            "description": "Source sales order number, when the job is SO-driven.",
            "nullable": true
          },
          "itemToMake": {
            "type": "string",
            "description": "Item number being produced by the job's item to make.",
            "nullable": true
          },
          "itemToMakeRevision": {
            "type": "string",
            "description": "Item-to-make revision when revision tracking is enabled.",
            "nullable": true
          },
          "jobPlannedQty": {
            "type": "number",
            "description": "Planned quantity to make for the item to make.",
            "format": "double",
            "nullable": true
          },
          "uoM": {
            "type": "string",
            "description": "Unit of measure for the item being produced.",
            "nullable": true
          },
          "operationName": {
            "type": "string",
            "description": "Operation name within the routing that consumes this requirement.",
            "nullable": true
          },
          "operationNumber": {
            "type": "integer",
            "description": "Operation sequence number within the routing.",
            "format": "int32",
            "nullable": true
          },
          "operationStatus": {
            "type": "string",
            "description": "Operation lifecycle status (Ready, Pending, Running, Paused, Complete).",
            "nullable": true
          },
          "operationScheduledStart": {
            "type": "string",
            "description": "Scheduled start time for this operation.",
            "format": "date-time",
            "nullable": true
          },
          "productionDueDate": {
            "type": "string",
            "description": "Job's production due date.",
            "format": "date-time",
            "nullable": true
          },
          "requirementType": {
            "type": "string",
            "description": "Requirement kind: \"Item\" or \"Material\".",
            "nullable": true
          },
          "requirementName": {
            "type": "string",
            "description": "Required item number (for items) or material shape name (for materials).",
            "nullable": true
          },
          "requirementRevision": {
            "type": "string",
            "description": "Required item revision when revision tracking is enabled (empty for materials).",
            "nullable": true
          },
          "requiredQuantity": {
            "type": "number",
            "description": "Resolved required quantity: item quantity in FulcrumProduct.PublicApi.Dto.Reporting.MaterialRequirementsReportRow.RequiredUnitOfMeasure, or material weight in kilograms. NULL for a material whose nest weight is unresolved — treat NULL as unknown, not zero.",
            "format": "double",
            "nullable": true
          },
          "requiredUnitOfMeasure": {
            "type": "string",
            "description": "Unit of the required quantity: the item's unit of measure, or \"kg\" for materials.",
            "nullable": true
          },
          "collectedQuantity": {
            "type": "number",
            "description": "Quantity already collected/picked (same unit as FulcrumProduct.PublicApi.Dto.Reporting.MaterialRequirementsReportRow.RequiredUnitOfMeasure).",
            "format": "double",
            "nullable": true
          },
          "outstandingQuantity": {
            "type": "number",
            "description": "Outstanding quantity still needed (required minus collected). Floored at zero for items; NULL for a material whose required weight is unknown (unresolved nest weight).",
            "format": "double",
            "nullable": true
          },
          "requiredStockPieces": {
            "type": "number",
            "description": "Stock pieces (nests) needed to produce this row's FulcrumProduct.PublicApi.Dto.Reporting.MaterialRequirementsReportRow.JobPlannedQty. Always NULL on an\nitem requirement — stock pieces are a material-only concept. NULL on a material whose nest yield\nis unknown, which also covers jobs not re-resolved since the yield was first recorded, so NULL\nmeans \"not known\", never \"none needed\". Fractional, because the unconsumed part of a piece\nreturns to stock as a remnant — round up when sizing a purchase or a pick. Scoped to the row's\noperation, so do not sum across a job's operations.",
            "format": "double",
            "nullable": true
          },
          "requiredQuantityLbs": {
            "type": "number",
            "description": "FulcrumProduct.PublicApi.Dto.Reporting.MaterialRequirementsReportRow.RequiredQuantity in pounds, whenever FulcrumProduct.PublicApi.Dto.Reporting.MaterialRequirementsReportRow.RequiredUnitOfMeasure is kilograms. NULL for a quantity in any other unit — eaches, feet, sheets — where a weight conversion would be meaningless, and NULL wherever the kilogram value is itself unknown.",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "collectedQuantityLbs": {
            "type": "number",
            "description": "FulcrumProduct.PublicApi.Dto.Reporting.MaterialRequirementsReportRow.CollectedQuantity in pounds, on the same terms as FulcrumProduct.PublicApi.Dto.Reporting.MaterialRequirementsReportRow.RequiredQuantityLbs.",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "outstandingQuantityLbs": {
            "type": "number",
            "description": "FulcrumProduct.PublicApi.Dto.Reporting.MaterialRequirementsReportRow.OutstandingQuantity in pounds, on the same terms as FulcrumProduct.PublicApi.Dto.Reporting.MaterialRequirementsReportRow.RequiredQuantityLbs.",
            "format": "double",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "One material-requirements report row: a single required item or required material linked to a\nscheduled job operation, with its resolved required quantity. One row per required item or\nmaterial per operation. Quantities are unified across the two kinds — item quantities are in the\nitem's unit of measure, material quantities are a weight in kilograms (see\nFulcrumProduct.PublicApi.Dto.Reporting.MaterialRequirementsReportRow.RequiredUnitOfMeasure)."
      },
      "DtoReportingQuoteReportFilter": {
        "type": "object",
        "properties": {
          "quotedDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the quote's Quoted Date. Null means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "quotedDateTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to the quote's Quoted Date (the whole `to` day is included).\nNull means no upper bound.",
            "format": "date-time",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "Optional exact-match filter on the quote lifecycle status. Null means no status filter.",
            "nullable": true
          },
          "customerName": {
            "type": "string",
            "description": "Optional exact-match filter on the customer name. Null means no customer filter.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Constrained filter for the quote reporting list endpoint. Every field maps to a fixed,\nserver-controlled column; values are always bound as Dapper parameters and never concatenated\ninto SQL."
      },
      "DtoReportingQuoteReportRow": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Internal stable identifier for the quote.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Numeric quote number.",
            "format": "int32",
            "nullable": true
          },
          "createdUtc": {
            "type": "string",
            "description": "UTC timestamp the quote was created.",
            "format": "date-time",
            "nullable": true
          },
          "customerName": {
            "type": "string",
            "description": "Customer name on the quote.",
            "nullable": true
          },
          "priority": {
            "type": "string",
            "description": "Quote priority value.",
            "nullable": true
          },
          "salesPersonName": {
            "type": "string",
            "description": "Name of the assigned salesperson.",
            "nullable": true
          },
          "expirationDate": {
            "type": "string",
            "description": "Quote expiration date. (Source column name `ExipirationDate` is a typo preserved in the view definition.)",
            "format": "date-time",
            "nullable": true
          },
          "quotedDate": {
            "type": "string",
            "description": "Date the quote was sent to the customer.",
            "format": "date-time",
            "nullable": true
          },
          "closedDate": {
            "type": "string",
            "description": "Date the quote was closed (won, lost, or expired).",
            "format": "date-time",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "Quote lifecycle status.",
            "nullable": true
          },
          "publicNote": {
            "type": "string",
            "description": "Public-facing note attached to the quote.",
            "nullable": true
          },
          "discount": {
            "type": "number",
            "description": "Total discount amount applied to the quote.",
            "format": "double",
            "nullable": true
          },
          "totalInPrimaryCurrency": {
            "type": "number",
            "description": "Quote total converted to the tenant's primary currency.",
            "format": "double",
            "nullable": true
          },
          "totalWithTax": {
            "type": "number",
            "description": "Quote total including tax.",
            "format": "double",
            "nullable": true
          },
          "cost": {
            "type": "number",
            "description": "Estimated total cost across all quote lines.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One row of the pre-joined quote reporting view (`rpt.View_ExposedReportingData_Quote`): one\nquote, carrying totals, cost, status, and lifecycle dates. Property names are clean identifiers; the\nquery aliases each source column (e.g. `[QuotedDate]`) to the matching property so Dapper can\nbind it."
      },
      "DtoReportingSalesOrderLinesReportFilter": {
        "type": "object",
        "properties": {
          "orderedDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the order's Ordered Date. Null means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "orderedDateTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to the order's Ordered Date (the whole `to` day is included).\nNull means no upper bound.",
            "format": "date-time",
            "nullable": true
          },
          "deliveryDueDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the line's Delivery Due Date. Null means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "deliveryDueDateTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to the line's Delivery Due Date (the whole `to` day is\nincluded). Null means no upper bound.",
            "format": "date-time",
            "nullable": true
          },
          "shippedDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the line's shipping activity. A line matches when any of its\nshipments could fall on or after this date, so a line whose shipping spans the bound is kept\nrather than dropped. Lines with nothing shipped yet never match. Null means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "shippedDateTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to the line's shipping activity (the whole `to` day is\nincluded). Null means no upper bound.",
            "format": "date-time",
            "nullable": true
          },
          "invoicedDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the line's invoicing activity, matched the same\nspans-the-bound way as the shipped-date bounds. Lines with no issued invoice never match.\nNull means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "invoicedDateTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to the line's invoicing activity (the whole `to` day is\nincluded). Null means no upper bound.",
            "format": "date-time",
            "nullable": true
          },
          "salesOrderNumbers": {
            "maxItems": 500,
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Restricts results to the given sales-order numbers, matched exactly. At most 500 may be\nsupplied; an empty or omitted list applies no filter. Duplicates are ignored."
          },
          "salesOrderStatus": {
            "type": "string",
            "description": "Optional exact-match filter on the sales-order lifecycle status, as the rows carry it: one of\nDraft, Needs Approval, Approved, In Progress, Complete, compared ignoring case. Any other value\nis rejected with a 400 that lists the accepted values. Null means no status filter.",
            "nullable": true
          },
          "customerName": {
            "type": "string",
            "description": "Optional exact-match filter on the customer name. Null means no customer filter.",
            "nullable": true
          },
          "accountingCode": {
            "type": "string",
            "description": "Optional exact-match filter on the accounting code mapped to the line. Null means no accounting\ncode filter.",
            "nullable": true
          },
          "unshippedOnly": {
            "type": "boolean",
            "description": "When true, returns only lines with quantity remaining to ship (Quantity to Ship > 0). When\nfalse or null, no ship-status filter is applied.",
            "nullable": true
          },
          "modifiedAfterUtc": {
            "type": "string",
            "description": "Returns only lines whose parent sales order was saved strictly after this UTC instant. The\ncomparison is exclusive and uses the full date and time rather than the calendar day, so\nhanding back the largest sales order modified value seen on a previous pull returns exactly\nwhat changed since it — unlike the ordered, delivery-due, shipped, and invoiced bounds above,\nwhich are day-inclusive. The stamp belongs to the order, not the line: any save of the order\nmoves it and returns every one of that order's lines, and that includes the shipping,\ninvoicing, and refund rollups written onto its lines. Changes that never save the order do not\nmove it — job status and cost changes, shipment header edits such as a shipped-date override,\nand edits to reference data a row merely displays, such as a customer or item name. Null means\nno modified bound.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Constrained filter for the sales-order line-items reporting list endpoint. Every field maps to a\nfixed, server-controlled column; values are always bound as Dapper parameters and never concatenated\ninto SQL."
      },
      "DtoReportingSalesOrderLinesReportRow": {
        "type": "object",
        "properties": {
          "salesOrderLinePrimaryKey": {
            "type": "string",
            "description": "Stable unique identity of this report row. Unique per row, unlike the line-item number or\nsalesOrderLineItemId, so rows can be reconciled across successive pulls and paged\ndeterministically. It is the report's own key and matches nothing on the sales-order\nendpoints; to reach the line item, use salesOrderLineItemId. Opaque — treat it as a key\nrather than a display value.",
            "nullable": true
          },
          "companyName": {
            "type": "string",
            "description": "Issuing company / tenant company name.",
            "nullable": true
          },
          "associatedQuote": {
            "type": "string",
            "description": "Quote number this SO was converted from, when applicable.",
            "nullable": true
          },
          "salesOrderNumber": {
            "type": "integer",
            "description": "Numeric sales-order identifier.",
            "format": "int32",
            "nullable": true
          },
          "customerPONumber": {
            "type": "string",
            "description": "Customer's PO number recorded on the sales order.",
            "nullable": true
          },
          "salesOrderStatus": {
            "type": "string",
            "description": "SO lifecycle status.",
            "nullable": true
          },
          "completedDate": {
            "type": "string",
            "description": "Date the SO was marked complete.",
            "format": "date-time",
            "nullable": true
          },
          "orderPriority": {
            "type": "string",
            "description": "Order priority value.",
            "nullable": true
          },
          "customerName": {
            "type": "string",
            "description": "Customer display name.",
            "nullable": true
          },
          "customerTier": {
            "type": "string",
            "description": "Customer tier classification.",
            "nullable": true
          },
          "paymentTerms": {
            "type": "string",
            "description": "Payment terms name.",
            "nullable": true
          },
          "city": {
            "type": "string",
            "description": "Customer city.",
            "nullable": true
          },
          "customerStateProvince": {
            "type": "string",
            "description": "Customer state or province.",
            "nullable": true
          },
          "customerContact": {
            "type": "string",
            "description": "Name of the customer contact recorded on the order.",
            "nullable": true
          },
          "customerPhone": {
            "type": "string",
            "description": "Customer contact phone number.",
            "nullable": true
          },
          "customerEmail": {
            "type": "string",
            "description": "Customer contact email address.",
            "nullable": true
          },
          "salesperson": {
            "type": "string",
            "description": "Name of the assigned salesperson.",
            "nullable": true
          },
          "orderedDate": {
            "type": "string",
            "description": "Date the order was placed.",
            "format": "date-time",
            "nullable": true
          },
          "lineItem": {
            "type": "string",
            "description": "Item name on the SO line.",
            "nullable": true
          },
          "lineItemDescription": {
            "type": "string",
            "description": "Item description on the SO line.",
            "nullable": true
          },
          "deliverBy": {
            "type": "string",
            "description": "Customer-requested delivery-by date.",
            "format": "date-time",
            "nullable": true
          },
          "lineItemType": {
            "type": "string",
            "description": "Line classification (part, fee, etc.).",
            "nullable": true
          },
          "blanketOrder": {
            "type": "integer",
            "description": "1 when the SO line is a blanket order, otherwise 0. (Computed 1/0 flag in the view.)",
            "format": "int32",
            "nullable": true
          },
          "deliveryDueDate": {
            "type": "string",
            "description": "Computed delivery due date for the line.",
            "format": "date-time",
            "nullable": true
          },
          "internalUnitOfMeasure": {
            "type": "string",
            "description": "Internal unit of measure used by Fulcrum.",
            "nullable": true
          },
          "customerPartNumber": {
            "type": "string",
            "description": "Customer's part number for the line.",
            "nullable": true
          },
          "customerPartDescription": {
            "type": "string",
            "description": "Customer's description for the line.",
            "nullable": true
          },
          "customerUnitOfMeasure": {
            "type": "string",
            "description": "Unit of measure used on the customer's PO.",
            "nullable": true
          },
          "accountingCode": {
            "type": "string",
            "description": "Accounting code mapped to the line.",
            "nullable": true
          },
          "accountingClass": {
            "type": "string",
            "description": "Accounting classification for the line's account.",
            "nullable": true
          },
          "itemTags": {
            "type": "string",
            "description": "Comma-separated tags from the line's item.",
            "nullable": true
          },
          "itemCategory": {
            "type": "string",
            "description": "Category from the line's item.",
            "nullable": true
          },
          "quantityOrdered": {
            "type": "number",
            "description": "Quantity ordered on the line.",
            "format": "double",
            "nullable": true
          },
          "unitPrice": {
            "type": "number",
            "description": "Per-unit price billed to the customer.",
            "format": "double",
            "nullable": true
          },
          "lineItemSubTotal": {
            "type": "number",
            "description": "Extended line subtotal (Quantity × Unit Price).",
            "format": "double",
            "nullable": true
          },
          "pricingStrategy": {
            "type": "string",
            "description": "Pricing strategy used (e.g. Fixed, Shop Rate).",
            "nullable": true
          },
          "hasDiscount": {
            "type": "boolean",
            "description": "True when any discount has been applied to the line.",
            "nullable": true
          },
          "isTimeAndMaterials": {
            "type": "boolean",
            "description": "True when the line is priced time-and-materials.",
            "nullable": true
          },
          "margin": {
            "type": "number",
            "description": "Margin recorded on the line at order time.",
            "format": "double",
            "nullable": true
          },
          "estimatedUnitCost": {
            "type": "number",
            "description": "Estimated cost per produced unit (from costing).",
            "format": "double",
            "nullable": true
          },
          "associatedJobs": {
            "type": "string",
            "description": "Comma-separated list of associated job names.",
            "nullable": true
          },
          "associatedJobStatuses": {
            "type": "string",
            "description": "Comma-separated list of associated job statuses.",
            "nullable": true
          },
          "jobTotalEstimatedLaborCost": {
            "type": "number",
            "description": "Estimated labor cost summed across associated jobs.",
            "format": "double",
            "nullable": true
          },
          "jobTotalEstimatedMachineCost": {
            "type": "number",
            "description": "Estimated machine cost summed across associated jobs.",
            "format": "double",
            "nullable": true
          },
          "jobTotalEstimatedMaterialCost": {
            "type": "number",
            "description": "Estimated material cost summed across associated jobs.",
            "format": "double",
            "nullable": true
          },
          "jobTotalEstimatedOPCost": {
            "type": "number",
            "description": "Estimated outside-processing cost summed across associated jobs.",
            "format": "double",
            "nullable": true
          },
          "jobTotalEstimatedCost": {
            "type": "number",
            "description": "Total estimated cost summed across associated jobs.",
            "format": "double",
            "nullable": true
          },
          "actualAvgUnitCost": {
            "type": "number",
            "description": "Actual cost per produced unit, averaged across associated jobs.",
            "format": "double",
            "nullable": true
          },
          "actualAvgMaterialUnitCost": {
            "type": "number",
            "description": "Actual material cost per unit, averaged.",
            "format": "double",
            "nullable": true
          },
          "actualAvgLaborUnitCost": {
            "type": "number",
            "description": "Actual labor cost per unit, averaged.",
            "format": "double",
            "nullable": true
          },
          "actualAvgMachineUnitCost": {
            "type": "number",
            "description": "Actual machine cost per unit, averaged.",
            "format": "double",
            "nullable": true
          },
          "actualAvgOPUnitCost": {
            "type": "number",
            "description": "Actual outside-processing cost per unit, averaged.",
            "format": "double",
            "nullable": true
          },
          "jobActualTotalCost": {
            "type": "number",
            "description": "Actual total cost summed across associated jobs.",
            "format": "double",
            "nullable": true
          },
          "totalQuantityProduced": {
            "type": "number",
            "description": "Total quantity produced across associated jobs.",
            "format": "double",
            "nullable": true
          },
          "hasInvoice": {
            "type": "string",
            "description": "\"Yes\" when at least one invoice has been issued for this line, otherwise \"No\".",
            "nullable": true
          },
          "totalQuantityInvoicedIssued": {
            "type": "number",
            "description": "Total quantity invoiced (on issued invoices).",
            "format": "double",
            "nullable": true
          },
          "invoiceNumbers": {
            "type": "string",
            "description": "Comma-separated list of associated invoice numbers.",
            "nullable": true
          },
          "invoiceStatuses": {
            "type": "string",
            "description": "Comma-separated list of associated invoice statuses.",
            "nullable": true
          },
          "invoiceLinesSubtotal": {
            "type": "number",
            "description": "Sum of invoice-line subtotals across associated invoices.",
            "format": "double",
            "nullable": true
          },
          "firstInvoicedDate": {
            "type": "string",
            "description": "Issue date of the earliest invoice for this line; null until one is issued.",
            "format": "date-time",
            "nullable": true
          },
          "lastInvoicedDate": {
            "type": "string",
            "description": "Issue date of the most recent invoice for this line; null until one is issued.",
            "format": "date-time",
            "nullable": true
          },
          "quantityShipped": {
            "type": "number",
            "description": "Total quantity shipped to date.",
            "format": "double",
            "nullable": true
          },
          "quantityToShip": {
            "type": "number",
            "description": "Quantity remaining to ship (Ordered − Shipped).",
            "format": "double",
            "nullable": true
          },
          "valueShipped": {
            "type": "number",
            "description": "Extended value already shipped.",
            "format": "double",
            "nullable": true
          },
          "valueToShip": {
            "type": "number",
            "description": "Extended value remaining to ship.",
            "format": "double",
            "nullable": true
          },
          "associatedShipmentNumbers": {
            "type": "string",
            "description": "Comma-separated list of shipment numbers.",
            "nullable": true
          },
          "associatedShipmentStatuses": {
            "type": "string",
            "description": "Comma-separated list of shipment statuses.",
            "nullable": true
          },
          "associatedShipmentMethods": {
            "type": "string",
            "description": "Comma-separated list of shipment methods used.",
            "nullable": true
          },
          "firstShippedDate": {
            "type": "string",
            "description": "Date the line's earliest shipment shipped; null until a shipment ships.",
            "format": "date-time",
            "nullable": true
          },
          "lastShippedDate": {
            "type": "string",
            "description": "Date the line's most recent shipment shipped; null until a shipment ships.",
            "format": "date-time",
            "nullable": true
          },
          "hasReturn": {
            "type": "string",
            "description": "\"Yes\" when at least one return is associated with the line, otherwise \"No\".",
            "nullable": true
          },
          "quantityToReturn": {
            "type": "number",
            "description": "Quantity flagged to return.",
            "format": "double",
            "nullable": true
          },
          "refundReason": {
            "type": "string",
            "description": "Reason text for any refund logged against the line.",
            "nullable": true
          },
          "salesOrderModifiedUtc": {
            "type": "string",
            "description": "When the parent sales order was last saved (UTC, to the second or finer). This is an\norder-level stamp, not a line-level one, so every line of an order carries the same value.\nEvery write path that changes a column this row projects saves through the order and stamps\nit, which makes this the line's change watermark for incremental pulls; job status and cost\nchanges and shipment header edits do not move it. Serialized with a trailing Z.",
            "format": "date-time",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "type": "string",
            "description": "Identifier of the sales-order line item this row describes: the same id the order's line\nlist returns, so a report row can be joined to the line item itself. Resolve it through the\ntype-agnostic line list — this report carries tax, fee, discount, shipping-charge and refund\nlines as well as parts, which the part-line list does not return. Not unique per row — the\nsame line can appear on more than one row — so use salesOrderLinePrimaryKey for row identity.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One row of the pre-joined sales-order line-items reporting view\n(`rpt.View_ExposedReportingData_SalesOrderLineItems`): one sales-order line, carrying the\norder/customer context and the line's pre-computed cost, invoice, ship, and return values. Property\nnames are clean identifiers; the query aliases each source column (e.g. `[Sales Order Number]`)\nto the matching property so Dapper can bind it."
      },
      "DtoReportingShippingReportFilter": {
        "type": "object",
        "properties": {
          "shipByDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the shipment's Ship By Date. Null means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "shipByDateTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to the shipment's Ship By Date (the whole `to` day is\nincluded). Null means no upper bound.",
            "format": "date-time",
            "nullable": true
          },
          "shippedDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the date the shipment actually shipped — its ship-date\noverride when one is set, else its recorded ship date. Distinct from\nFulcrumProduct.PublicApi.Dto.Reporting.ShippingReportFilter.ShipByDateFrom, which bounds the date it was due to ship rather than the date it\ndid. Matches only shipments whose status is Shipped: a ship-date override can be set while a\nshipment is still open, so the date alone does not mean it went out. Null means no lower\nbound.",
            "format": "date-time",
            "nullable": true
          },
          "shippedDateTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to that same actual ship date (the whole `to` day is\nincluded, whatever time of day the shipment went out), and likewise matching only shipments\nwhose status is Shipped. Null means no upper bound.",
            "format": "date-time",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "Optional exact-match filter on the shipment lifecycle status (e.g. \"Shipped\", \"Open\"). Null\nmeans no status filter.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Constrained filter for the shipping reporting list endpoint. Every field maps to a fixed,\nserver-controlled column; values are always bound as Dapper parameters and never concatenated\ninto SQL."
      },
      "DtoReportingShippingReportRow": {
        "type": "object",
        "properties": {
          "shipmentName": {
            "type": "string",
            "description": "Shipment identifier / name.",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "Shipment lifecycle status.",
            "nullable": true
          },
          "packingStatus": {
            "type": "string",
            "description": "Packing status (e.g. Not Packed, Partially Packed, Packed).",
            "nullable": true
          },
          "shipmentType": {
            "type": "string",
            "description": "Shipment classification.",
            "nullable": true
          },
          "shipByDate": {
            "type": "string",
            "description": "Date the shipment must ship by.",
            "format": "date-time",
            "nullable": true
          },
          "shippedDate": {
            "type": "string",
            "description": "Actual ship date; null if not yet shipped.",
            "format": "date-time",
            "nullable": true
          },
          "isLate": {
            "type": "integer",
            "description": "1 when Shipped Date is after Ship By Date, otherwise 0. (Computed 1/0 flag in the view.)",
            "format": "int32",
            "nullable": true
          },
          "isOnTime": {
            "type": "integer",
            "description": "1 when Shipped Date is on or before Ship By Date, otherwise 0. (Computed 1/0 flag in the view.)",
            "format": "int32",
            "nullable": true
          },
          "daysLate": {
            "type": "integer",
            "description": "Days between Ship By Date and Shipped Date (negative when shipped early).",
            "format": "int32",
            "nullable": true
          },
          "trackingNumber": {
            "type": "string",
            "description": "Carrier tracking number, when supplied.",
            "nullable": true
          },
          "recipientName": {
            "type": "string",
            "description": "Customer / recipient name.",
            "nullable": true
          },
          "recipientCustomerCode": {
            "type": "string",
            "description": "Customer code for the recipient.",
            "nullable": true
          },
          "shipToName": {
            "type": "string",
            "description": "Ship-to contact name.",
            "nullable": true
          },
          "shipToCity": {
            "type": "string",
            "description": "Ship-to city.",
            "nullable": true
          },
          "shipToState": {
            "type": "string",
            "description": "Ship-to state / province.",
            "nullable": true
          },
          "shipToCountry": {
            "type": "string",
            "description": "Ship-to country.",
            "nullable": true
          },
          "customerPONumber": {
            "type": "string",
            "description": "Customer's PO number from the source sales order.",
            "nullable": true
          },
          "purchaseOrder": {
            "type": "string",
            "description": "Linked purchase order number, when this shipment is PO-driven.",
            "nullable": true
          },
          "salesOrder": {
            "type": "string",
            "description": "Linked sales order number, when this shipment is SO-driven.",
            "nullable": true
          },
          "shippedByName": {
            "type": "string",
            "description": "Name of the user who recorded the shipment.",
            "nullable": true
          },
          "shippingCost": {
            "type": "number",
            "description": "Cost of shipping (internal).",
            "format": "double",
            "nullable": true
          },
          "shippingCharge": {
            "type": "number",
            "description": "Charge billed to the customer for shipping.",
            "format": "double",
            "nullable": true
          },
          "shippingCostNeedsInvoice": {
            "type": "boolean",
            "description": "True when the shipping cost has not yet been invoiced to the customer.",
            "nullable": true
          },
          "shippingMethod": {
            "type": "string",
            "description": "Carrier / shipping method used.",
            "nullable": true
          },
          "itemName": {
            "type": "string",
            "description": "Item name on the shipment line.",
            "nullable": true
          },
          "customerItemNumber": {
            "type": "string",
            "description": "Customer's item / part number from the source sales-order line; null for outside-processing lines.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Item description on the shipment line.",
            "nullable": true
          },
          "itemCategory": {
            "type": "string",
            "description": "Category from the line's item.",
            "nullable": true
          },
          "accountingCodeName": {
            "type": "string",
            "description": "Accounting code mapped to the line's item.",
            "nullable": true
          },
          "accountingClass": {
            "type": "string",
            "description": "Accounting classification for the line's account.",
            "nullable": true
          },
          "itemTags": {
            "type": "string",
            "description": "Comma-separated tags from the line's item.",
            "nullable": true
          },
          "quantityShipped": {
            "type": "number",
            "description": "Quantity shipped on this line.",
            "format": "double",
            "nullable": true
          },
          "totalQtyOrdered": {
            "type": "number",
            "description": "Total quantity ordered on the source SO line.",
            "format": "double",
            "nullable": true
          },
          "totalQtyShipped": {
            "type": "number",
            "description": "Total quantity shipped across all shipments for the source SO line.",
            "format": "double",
            "nullable": true
          },
          "unitPrice": {
            "type": "number",
            "description": "Per-unit price on the source SO line.",
            "format": "double",
            "nullable": true
          },
          "quantityToShip": {
            "type": "number",
            "description": "Quantity remaining to ship on the source SO line.",
            "format": "double",
            "nullable": true
          },
          "totalDollarsOrdered": {
            "type": "number",
            "description": "Extended dollar value of the source SO line.",
            "format": "double",
            "nullable": true
          },
          "dollarsShipped": {
            "type": "number",
            "description": "Extended dollar value already shipped for the source SO line.",
            "format": "double",
            "nullable": true
          },
          "dollarsUnshipped": {
            "type": "number",
            "description": "Extended dollar value remaining to ship.",
            "format": "double",
            "nullable": true
          },
          "quantityInvoiced": {
            "type": "number",
            "description": "Total quantity invoiced for the source SO line.",
            "format": "double",
            "nullable": true
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "Unit of measure on the line.",
            "nullable": true
          },
          "quantityPacked": {
            "type": "number",
            "description": "Quantity packed on this shipment line.",
            "format": "double",
            "nullable": true
          },
          "linePackingStatus": {
            "type": "string",
            "description": "Per-line packing status.",
            "nullable": true
          },
          "isReady": {
            "type": "boolean",
            "description": "True when the line is ready to ship.",
            "nullable": true
          },
          "openJobs": {
            "type": "string",
            "description": "Comma-separated list of open jobs producing this line's item.",
            "nullable": true
          },
          "qtyShippedLate": {
            "type": "number",
            "description": "Quantity shipped after Ship By Date.",
            "format": "double",
            "nullable": true
          },
          "dollarsShippedLate": {
            "type": "number",
            "description": "Extended dollar value shipped late.",
            "format": "double",
            "nullable": true
          },
          "qtyShippedOnTime": {
            "type": "number",
            "description": "Quantity shipped on or before Ship By Date.",
            "format": "double",
            "nullable": true
          },
          "dollarsShippedOnTime": {
            "type": "number",
            "description": "Extended dollar value shipped on time.",
            "format": "double",
            "nullable": true
          },
          "createdByName": {
            "type": "string",
            "description": "User who created the shipment record.",
            "nullable": true
          },
          "modifiedByName": {
            "type": "string",
            "description": "Most recent user to modify the shipment record.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One row of the pre-joined shipping reporting view (`rpt.View_ExposedReportingData_Shipping`):\none shipment line, carrying the line's quantities and the source sales-order line's pre-computed\ndollar values. Property names are clean identifiers; the query aliases each source column\n(e.g. `[$ Shipped]`) to the matching property so Dapper can bind it."
      },
      "DtoReportingTimeClockReportFilter": {
        "type": "object",
        "properties": {
          "startedFrom": {
            "type": "string",
            "description": "Inclusive lower bound applied to the entry's clock-in time (Started). Null means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "startedTo": {
            "type": "string",
            "description": "Inclusive upper bound applied to the entry's clock-in time (Started); the whole `to` day is\nincluded. Null means no upper bound.",
            "format": "date-time",
            "nullable": true
          },
          "stoppedFrom": {
            "type": "string",
            "description": "Inclusive lower bound on the entry's clock-out time (Stopped), as a whole day in UTC rather\nthan the shop's timezone. An entry not yet stopped never matches. Null means no lower bound.",
            "format": "date-time",
            "nullable": true
          },
          "stoppedTo": {
            "type": "string",
            "description": "Inclusive upper bound on the entry's clock-out time (Stopped), as a whole day in UTC rather\nthan the shop's timezone. An entry not yet stopped never matches. Null means no upper bound.",
            "format": "date-time",
            "nullable": true
          },
          "employee": {
            "type": "string",
            "description": "Optional exact-match filter on the operator / employee name. Null means no employee filter.",
            "nullable": true
          },
          "type": {
            "type": "string",
            "description": "Optional exact-match filter on the timer-entry type (ClockIn or Break). Null means no type filter.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Constrained filter for the time-clock reporting list endpoint. Every field maps to a fixed,\nserver-controlled column; values are always bound as Dapper parameters and never concatenated\ninto SQL."
      },
      "DtoReportingTimeClockReportRow": {
        "type": "object",
        "properties": {
          "employee": {
            "type": "string",
            "description": "Operator / employee name.",
            "nullable": true
          },
          "overridden": {
            "type": "string",
            "description": "\"Yes\" when the entry's start or stop time was manually overridden, otherwise \"No\".",
            "nullable": true
          },
          "type": {
            "type": "string",
            "description": "Timer-entry type classification (ClockIn or Break).",
            "nullable": true
          },
          "started": {
            "type": "string",
            "description": "Clock-in timestamp.",
            "format": "date-time",
            "nullable": true
          },
          "stopped": {
            "type": "string",
            "description": "Clock-out timestamp; null if not yet stopped.",
            "format": "date-time",
            "nullable": true
          },
          "shiftHoursWorked": {
            "type": "number",
            "description": "Computed hours between Started and Stopped.",
            "format": "double",
            "nullable": true
          },
          "reason": {
            "type": "string",
            "description": "Reason code for the entry, when applicable.",
            "nullable": true
          },
          "clockCode": {
            "type": "string",
            "description": "Clock-code tag attached to the entry, when applicable.",
            "nullable": true
          },
          "createdByName": {
            "type": "string",
            "description": "User who created the entry.",
            "nullable": true
          },
          "modifiedByName": {
            "type": "string",
            "description": "Most recent user to modify the entry.",
            "nullable": true
          },
          "startedOnOverrideByName": {
            "type": "string",
            "description": "User who overrode the start time, when applicable.",
            "nullable": true
          },
          "stoppedOnOverrideByName": {
            "type": "string",
            "description": "User who overrode the stop time, when applicable.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One row of the pre-joined time-clock reporting view (`rpt.View_ExposedReportingData_TimeClock`):\none timer entry (clock-in or break), carrying clock-in/clock-out times, computed shift hours, reason\nand clock codes, and override-audit context. Property names are clean identifiers; the query aliases\neach source column (e.g. `[Shift Hours Worked]`) to the matching property so Dapper can bind it."
      },
      "DtoTimerAttributionDetails": {
        "required": [
          "timeInSeconds",
          "timeInSecondsWeighted"
        ],
        "type": "object",
        "properties": {
          "timeInSeconds": {
            "type": "number",
            "description": "Elapsed time.",
            "format": "double"
          },
          "timeInSecondsWeighted": {
            "type": "number",
            "description": "Time in seconds (after using the multiplier/weighted).",
            "format": "double"
          },
          "rateHourlyInPrimaryCurrency": {
            "type": "number",
            "description": "Rate in primary currency.",
            "format": "double",
            "nullable": true
          },
          "cost": {
            "type": "number",
            "description": "Cost. This value will always reflect the current calculated cost. What this means is that overriding start/stop times would affect this value.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Cost and time attribution for a timer."
      },
      "DtoTimerSegmentAttributionDetails": {
        "required": [
          "timeInSeconds",
          "timeInSecondsWeighted"
        ],
        "type": "object",
        "properties": {
          "timeInSeconds": {
            "type": "number",
            "description": "Elapsed time. If the segment is not stopped, this value will be calculated as of now.",
            "format": "double"
          },
          "timeInSecondsWeighted": {
            "type": "number",
            "description": "Time in seconds (after using the multiplier/weighted).",
            "format": "double"
          },
          "multiplier": {
            "type": "number",
            "description": "With timers, because segments account for overlapping operations, we must account for the percentage to attribute to this segment.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Time attribution for a timer segment."
      },
      "DtoUserJobOpTimer": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "description": "The job id",
            "nullable": true
          },
          "jobName": {
            "type": "string",
            "description": "The job name",
            "nullable": true
          },
          "operationId": {
            "type": "string",
            "description": "The operation id",
            "nullable": true
          },
          "operationName": {
            "type": "string",
            "description": "The operation name",
            "nullable": true
          },
          "elapsedTimeInSeconds": {
            "type": "number",
            "description": "The time working on the operation in seconds",
            "format": "double"
          },
          "estimatedTimeToCompleteInSeconds": {
            "type": "number",
            "description": "The estimate time to complete this operation in seconds.",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "A job timer"
      },
      "DtoVendorDtoWithDetails": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name to give the vendor. Must be unique to all active vendors."
          },
          "vendorCode": {
            "minLength": 1,
            "type": "string",
            "description": "Unique identifier for this vendor.",
            "nullable": true
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms identifier. Please reference /api/payment-terms endpoint.",
            "nullable": true
          },
          "paymentTerms": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "General notes associated to this vendor",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "The currency of the vendor.",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "Approval/quality status of the vendor. One of: Approved, Probation, Monitor, Disqualified, Other.",
            "nullable": true
          },
          "active": {
            "type": "boolean",
            "description": "Whether the vendor is active."
          },
          "leadTime": {
            "type": "integer",
            "description": "Default lead time in days.",
            "format": "int32",
            "nullable": true
          },
          "url": {
            "type": "string",
            "description": "Vendor website URL.",
            "format": "uri",
            "nullable": true
          },
          "vendorSince": {
            "type": "string",
            "description": "Date the vendor relationship began.",
            "format": "date-time",
            "nullable": true
          },
          "addresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VendorAddressDto"
            },
            "description": "The addresses associated with the vendor"
          }
        },
        "additionalProperties": false,
        "description": "A vendor"
      },
      "EquipmentCreateDto": {
        "required": [
          "description",
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Description. Required."
          },
          "workCenterId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "WorkCenter identifier. Please reference /api/work-centers endpoint.",
            "nullable": true
          },
          "manufacturer": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Manufacturer.",
            "nullable": true
          },
          "modelNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Model number.",
            "nullable": true
          },
          "serialNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Serial number.",
            "nullable": true
          },
          "canRunUnattended": {
            "type": "boolean",
            "description": "Indicates if this equipment can be run unattended. This allows the portion of an operation\nthat utilizes this equipment to be scheduled outside of a shift."
          },
          "unlimitedCapacity": {
            "type": "boolean",
            "description": "Indicates if this equipment can support multiple operations simultaneously."
          },
          "status": {
            "$ref": "#/components/schemas/EquipmentStatus"
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes associated to the equipment.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of a piece of equipment to be created."
      },
      "EquipmentDowntimeDepartmentDto": {
        "type": "object",
        "properties": {
          "departmentId": {
            "type": "string",
            "description": "Id of the department.",
            "nullable": true
          },
          "departmentName": {
            "type": "string",
            "description": "Name of the department when it was added to the downtime.",
            "nullable": true
          },
          "allEquipment": {
            "type": "boolean",
            "description": "True when the whole department is down, which is when `equipment` is empty."
          },
          "equipment": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EquipmentDowntimeEquipmentDto"
            },
            "description": "The pieces of the department's equipment that are down, in the order they were added. Empty when\nthe whole department is down."
          }
        },
        "additionalProperties": false,
        "description": "A department covered by a downtime, and which of its equipment is down."
      },
      "EquipmentDowntimeDepartmentSaveDto": {
        "required": [
          "departmentId"
        ],
        "type": "object",
        "properties": {
          "departmentId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the department. It must be a department that exists and is not deleted, and it can be listed\nonly once in the downtime. Please reference the /api/departments endpoint."
          },
          "equipment": {
            "maxItems": 500,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EquipmentDowntimeEquipmentSaveDto"
            },
            "description": "The pieces of the department's equipment that are down, saved in request order, at most 500. Each\n`equipmentId` must be equipment in one of the department's work centers, and it can be listed\nonly once for the department. Omitted, null or empty means the whole department is down.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A department covered by a downtime, and which of its equipment is down. The department name is not\nsent; the server fills `departmentName` from the department."
      },
      "EquipmentDowntimeDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique id of the downtime."
          },
          "startDateTime": {
            "type": "string",
            "description": "When the downtime starts, in UTC.",
            "format": "date-time"
          },
          "endDateTime": {
            "type": "string",
            "description": "When the downtime ends, in UTC.",
            "format": "date-time"
          },
          "departments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EquipmentDowntimeDepartmentDto"
            },
            "description": "The departments that are down, in the order they were added. Empty when no department is assigned."
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicates whether this downtime has been deleted."
          }
        },
        "additionalProperties": false,
        "description": "A window of time when departments, or chosen equipment within them, are unavailable for scheduling."
      },
      "EquipmentDowntimeEquipmentDto": {
        "type": "object",
        "properties": {
          "equipmentId": {
            "type": "string",
            "description": "Id of the equipment.",
            "nullable": true
          },
          "equipmentName": {
            "type": "string",
            "description": "Name of the equipment when it was added to the downtime.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A piece of equipment that is down."
      },
      "EquipmentDowntimeEquipmentSaveDto": {
        "required": [
          "equipmentId"
        ],
        "type": "object",
        "properties": {
          "equipmentId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the equipment. It must be equipment in one of the department's work centers that is not\ndeleted. Please reference the /api/equipment endpoint."
          }
        },
        "additionalProperties": false,
        "description": "A piece of equipment that is down. The equipment name is not sent; the server fills\n`equipmentName` from the equipment."
      },
      "EquipmentDowntimeRequestFindParameters": {
        "type": "object",
        "properties": {
          "ids": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter downtimes to those with one of these ids.",
            "nullable": true
          },
          "departmentIds": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter downtimes to those covering at least one of these departments.",
            "nullable": true
          },
          "startsBeforeUtc": {
            "type": "string",
            "description": "Filter downtimes that start before (exclusive) this time in UTC. If no time component is passed,\nmidnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "endsAfterUtc": {
            "type": "string",
            "description": "Filter downtimes that end after (exclusive) this time in UTC. If no time component is passed,\nmidnight UTC will be used. Combine with `startsBeforeUtc` to find downtimes overlapping a window.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding equipment downtimes. Filters combine with AND."
      },
      "EquipmentDowntimeSaveDto": {
        "required": [
          "endDateTime",
          "startDateTime"
        ],
        "type": "object",
        "properties": {
          "startDateTime": {
            "type": "string",
            "description": "When the downtime starts, in UTC. A value with an offset is converted to UTC; a value without an\noffset is read as UTC.",
            "format": "date-time"
          },
          "endDateTime": {
            "type": "string",
            "description": "When the downtime ends, in UTC, read the same way as `startDateTime`. It cannot be earlier than\n`startDateTime`; an end equal to the start is allowed.",
            "format": "date-time"
          },
          "departments": {
            "maxItems": 500,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EquipmentDowntimeDepartmentSaveDto"
            },
            "description": "The departments that are down, saved in request order, at most 500. Each `departmentId` must be a department\nthat exists and is not deleted, and it can be listed only once. Omitted, null or empty means no\ndepartments, so an update clears them.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of an equipment downtime to save. An update replaces the whole downtime: its window and its\nwhole set of departments and equipment are saved from the request, so omitted `departments` are\ncleared. The shape matches what `GET /equipment-downtimes/{id}` returns, so a fetched downtime can be\nsent back; the read-only members `id`, `deleted`, `departmentName`, `allEquipment` and\n`equipmentName` are ignored, and the server fills the names from the department and equipment."
      },
      "EquipmentDto": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Description.",
            "nullable": true
          },
          "workCenterId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "WorkCenter identifier. Please reference /api/work-centers endpoint.",
            "nullable": true
          },
          "manufacturer": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Manufacturer.",
            "nullable": true
          },
          "modelNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Model number.",
            "nullable": true
          },
          "serialNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Serial number.",
            "nullable": true
          },
          "canRunUnattended": {
            "type": "boolean",
            "description": "Indicates if this equipment can be run unattended. This allows the portion of an operation\nthat utilizes this equipment to be scheduled outside of a shift.",
            "nullable": true
          },
          "unlimitedCapacity": {
            "type": "boolean",
            "description": "Indicates if this equipment can support multiple operations simultaneously.",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/EquipmentStatus"
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes associated to the equipment.",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicates whether this equipment has been deleted"
          }
        },
        "additionalProperties": false,
        "description": "Equipment definition."
      },
      "EquipmentRequestFindParameters": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter equipment based on matching ids.",
            "nullable": true
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter equipment based on their name.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding equipment."
      },
      "EquipmentStatus": {
        "enum": [
          "good",
          "poor",
          "bad",
          "outOfService"
        ],
        "type": "string",
        "description": "Equipment status"
      },
      "EquipmentUpdateDto": {
        "required": [
          "description",
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Description. Required."
          },
          "workCenterId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "WorkCenter identifier. Please reference /api/work-centers endpoint.",
            "nullable": true
          },
          "manufacturer": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Manufacturer.",
            "nullable": true
          },
          "modelNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Model number.",
            "nullable": true
          },
          "serialNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Serial number.",
            "nullable": true
          },
          "canRunUnattended": {
            "type": "boolean",
            "description": "Indicates if this equipment can be run unattended. This allows the portion of an operation\nthat utilizes this equipment to be scheduled outside of a shift."
          },
          "unlimitedCapacity": {
            "type": "boolean",
            "description": "Indicates if this equipment can support multiple operations simultaneously."
          },
          "status": {
            "$ref": "#/components/schemas/EquipmentStatus"
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes associated to the equipment.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of a piece of equipment to be updated. This is a full replacement: any field omitted\nis treated as cleared."
      },
      "FulcrumProDomainReference": {
        "type": "object",
        "properties": {
          "primaryKeyId": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "maxLength": 36,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "name": {
            "maxLength": 500,
            "minLength": 0,
            "type": "string",
            "nullable": true
          },
          "createdUtc": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "FulcrumProductMaterialsFulcrumLengthUnits": {
        "enum": [
          "inch",
          "foot",
          "yard",
          "millimeter",
          "centimeter",
          "meter"
        ],
        "type": "string"
      },
      "FulcrumProductMaterialsMaterialForms": {
        "enum": [
          "sheet",
          "plate",
          "roundBar",
          "flatBar",
          "channel",
          "squareTube",
          "angle",
          "treadPlate",
          "hexBar",
          "squareBar",
          "teeBar",
          "hBeam",
          "rectTube",
          "pipe",
          "wBeam",
          "sBeam",
          "roundTube",
          "rectBar",
          "wideBar",
          "reinforcingBar",
          "halfRoundBar",
          "halfOvalBar"
        ],
        "type": "string"
      },
      "GdtEnumControlType": {
        "enum": [
          "none",
          "straightness",
          "flatness",
          "circularity",
          "cylindricity",
          "profileOfLine",
          "profileOfSurface",
          "perpendicularity",
          "angularity",
          "parallelism",
          "position",
          "concentricity",
          "symmetry",
          "runout",
          "totalRunout",
          "counterbore",
          "spotface",
          "countersink",
          "radius",
          "square",
          "sphericalRadius",
          "controlledRadius",
          "diameter",
          "sphericalDiameter",
          "depth",
          "arcLength",
          "distance",
          "angle",
          "note",
          "thread",
          "surfaceFinish",
          "surfaceFinishRemovalByMachining",
          "surfaceFinishRemovalProhibited"
        ],
        "type": "string",
        "description": "Public mirror of FulcrumProduct.Domain.Gdt.Data.ControlType. Members mirror the domain enum\none-to-one by underlying value (guarded by JobInProcessTrackingEnumParityTests) so it maps by a plain cast,\ndecoupling the published contract from renames of the internal enum."
      },
      "GdtEnumModifierType": {
        "enum": [
          "none",
          "mmc",
          "lmc",
          "rfs",
          "unequallyDisposedProfile",
          "independency",
          "continuousFeature",
          "projectedToleranceZone",
          "freeState",
          "tangentPlane"
        ],
        "type": "string",
        "description": "Public mirror of FulcrumProduct.Domain.Gdt.Data.ModifierType. Members mirror the domain enum\none-to-one by underlying value (guarded by JobInProcessTrackingEnumParityTests) so it maps by a plain cast,\ndecoupling the published contract from renames of the internal enum."
      },
      "GdtEnumToleranceType": {
        "enum": [
          "none",
          "diameter"
        ],
        "type": "string",
        "description": "Public mirror of FulcrumProduct.Domain.Gdt.Data.ToleranceType. Members mirror the domain enum\none-to-one by underlying value (guarded by JobInProcessTrackingEnumParityTests) so it maps by a plain cast,\ndecoupling the published contract from renames of the internal enum."
      },
      "InProcessTrackingEnumQualityUnitOfMeasure": {
        "enum": [
          "millimeter",
          "centimeter",
          "meter",
          "inch",
          "foot",
          "micrometer",
          "microinch"
        ],
        "type": "string",
        "description": "Public mirror of FulcrumProduct.Domain.Quality.Enums.QualityUnitOfMeasure. Members mirror the\ndomain enum one-to-one by underlying value (guarded by JobInProcessTrackingEnumParityTests) so it maps by a\nplain cast, decoupling the published contract from renames of the internal enum."
      },
      "InProcessTrackingFieldCheckpointPhase": {
        "enum": [
          "preOperation",
          "duringOperation",
          "postOperation"
        ],
        "type": "string",
        "description": "Public mirror of FulcrumProduct.Domain.InProcessTracking.InProcessTrackingFieldCheckpointPhase.\nMembers mirror the domain enum one-to-one by underlying value (guarded by JobInProcessTrackingEnumParityTests)\nso it maps by a plain cast, decoupling the published contract from renames of the internal enum."
      },
      "InProcessTrackingFieldDataType": {
        "enum": [
          "boolean",
          "number",
          "dropdown",
          "text",
          "checkbox"
        ],
        "type": "string",
        "description": "Public mirror of FulcrumProduct.Domain.InProcessTracking.InProcessTrackingFieldDataType.\nMembers mirror the domain enum one-to-one by underlying value (guarded by JobInProcessTrackingEnumParityTests)\nso it maps by a plain cast, decoupling the published contract from renames of the internal enum."
      },
      "InProcessTrackingFieldTypeDto": {
        "required": [
          "dataType",
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the in process tracking field"
          },
          "dataType": {
            "$ref": "#/components/schemas/DomainInProcessTrackingFieldDataType"
          },
          "description": {
            "type": "string",
            "description": "Description of the in process tracking field"
          },
          "dropDownOptions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Options when the data type is a list type",
            "nullable": true
          },
          "unitTypeName": {
            "type": "string",
            "description": "The type of quantity when the data type is number",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Describes the type of in process tracking field"
      },
      "InProcessTrackingFieldTypeRequestFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter in process tracking fields based on their name.",
            "nullable": true
          },
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter in process tracking fields based on matching ids.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding in process tracking fields."
      },
      "InProcessTrackingResponseFindParameters": {
        "type": "object",
        "properties": {
          "phase": {
            "$ref": "#/components/schemas/InProcessTrackingFieldCheckpointPhase"
          }
        },
        "additionalProperties": false,
        "description": "Optional filters for listing a job's in process tracking responses."
      },
      "InventoryDto": {
        "required": [
          "id",
          "itemId",
          "itemNumber",
          "onHandQuantity",
          "quantity"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "lotId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The lot Iid associated to this entity.",
            "nullable": true
          },
          "locationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The location id associated to this entity.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The quantity of items in this inventory.",
            "format": "double"
          },
          "onHandQuantity": {
            "minimum": 0,
            "type": "number",
            "description": "The on-hand quantity of items in this inventory.",
            "format": "double"
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The item id associated to this entity."
          },
          "itemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The number/sku/short name of the item."
          },
          "itemDescription": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The description of the item",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "An item inventory record."
      },
      "InventoryEnumEventSourceType": {
        "enum": [
          "purchaseOrder",
          "job",
          "shipment",
          "shipmentLineItem",
          "shipping",
          "receiving",
          "item",
          "workOrder",
          "salesOrder",
          "jobOperation",
          "workOrderOperation",
          "fulfillment",
          "itemToMakeMaterialRemnant",
          "poRcvValueAdj"
        ],
        "type": "string",
        "description": "Indicator for the initial source of the event."
      },
      "InventoryEventDetailsDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Inventory event details.\nAdditional metadata for Inventory Events."
      },
      "InventoryEventDetailsUpdateDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of an inventory event to be updated"
      },
      "InventoryEventRequestFindParameters": {
        "type": "object",
        "properties": {
          "createdBeforeUtc": {
            "type": "string",
            "description": "Filters events created before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "createdAfterUtc": {
            "type": "string",
            "description": "Filters events created after (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "types": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InventoryEventType"
            },
            "description": "Inventory event type(s).",
            "nullable": true
          },
          "secondaryTypes": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InventoryEventSecondaryType"
            },
            "description": "Inventory event secondary type(s).",
            "nullable": true
          },
          "sourceTypes": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InventoryEnumEventSourceType"
            },
            "description": "Inventory event source type(s).",
            "nullable": true
          },
          "itemIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Item id. Please reference /api/items endpoint.",
            "nullable": true
          },
          "itemToMakeIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Item id. Please reference /api/items endpoint.",
            "nullable": true
          },
          "reservedForTypes": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DomainCommonEntityType"
            },
            "description": "Inventory reservation types.",
            "nullable": true
          },
          "reservedForIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Inventory reservation ids.",
            "nullable": true
          },
          "inventoryEventIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Inventory event ids.",
            "nullable": true
          },
          "actionDateFrom": {
            "type": "string",
            "description": "Filter to events whose action date falls on or after this date, as a whole day in the shop's\ntimezone. Any time component is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "actionDateTo": {
            "type": "string",
            "description": "Filter to events whose action date falls on or before this date, as a whole day in the shop's\ntimezone, so an event actioned later that same shop day still matches.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding inventory."
      },
      "InventoryEventSecondaryType": {
        "enum": [
          "pick",
          "receive",
          "override",
          "revert",
          "deposit",
          "create",
          "consume",
          "ship",
          "sold",
          "transferOut",
          "transferIn",
          "found",
          "expired",
          "damaged",
          "lost",
          "returnVendor",
          "returnStock",
          "receivedNoPo",
          "returnIncrease",
          "returnDecrease",
          "otherIncrease",
          "otherDecrease",
          "scrap",
          "waste",
          "transferredFromSalesOrder",
          "overrideItemValue",
          "transferFromLot",
          "transferToLot",
          "stockAdjustmentIncrease",
          "stockAdjustmentDecrease",
          "stockTake"
        ],
        "type": "string",
        "description": "Secondary, verbose description for an event."
      },
      "InventoryEventType": {
        "enum": [
          "pick",
          "receive",
          "revert",
          "adjustment",
          "setItemValue",
          "eventOverride"
        ],
        "type": "string",
        "description": "Primary inventory event type."
      },
      "InventoryEventsInventoryEventDto": {
        "required": [
          "id",
          "quantity",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id"
          },
          "actionDate": {
            "type": "string",
            "description": "The date of the action.",
            "format": "date-time",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/InventoryEventType"
          },
          "secondaryType": {
            "$ref": "#/components/schemas/InventoryEventSecondaryType"
          },
          "sourceType": {
            "$ref": "#/components/schemas/InventoryEnumEventSourceType"
          },
          "sourceName": {
            "type": "string",
            "description": "Source name.",
            "nullable": true
          },
          "sourceEntityId": {
            "type": "string",
            "description": "Source entity id",
            "nullable": true
          },
          "sourceRelatedType": {
            "$ref": "#/components/schemas/InventoryEnumEventSourceType"
          },
          "sourceRelatedEntityId": {
            "type": "string",
            "description": "Related source entity id",
            "nullable": true
          },
          "sourceItemToMakeId": {
            "type": "string",
            "description": "Source item to make id. Please reference /api/jobs/{jobId}/items-to-make endpoint.",
            "nullable": true
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id key identifier. Please reference /api/items endpoint.",
            "nullable": true
          },
          "itemToMakeId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Item to make id key identifier. Please reference /api/jobs/{jobId}/items-to-make endpoint.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "Quantity.",
            "format": "double"
          },
          "laborValue": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "machineValue": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "outsideProcessingValue": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "materialValue": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "totalValue": {
            "$ref": "#/components/schemas/CommonCostDto"
          },
          "reservedForId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "This is the id for the underlying entity that this inventory is reserved for.",
            "nullable": true
          },
          "reservedForType": {
            "$ref": "#/components/schemas/DomainCommonEntityType"
          },
          "lotId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The lot this inventory is allocated to. Please reference /api/inventory-lots endpoint.",
            "nullable": true
          },
          "locationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The location this inventory is allocated to. Please reference /api/locations endpoint.",
            "nullable": true
          },
          "revertInventoryEventId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "If the event is intended to \"revert\" a previous transaction, this value contains the original event.",
            "nullable": true
          },
          "note": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "A note associated to this event.",
            "nullable": true
          },
          "resultEffects": {
            "$ref": "#/components/schemas/DtoInventoryEventsInventoryEventChangeDetails"
          },
          "details": {
            "$ref": "#/components/schemas/InventoryEventDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "An inventory event"
      },
      "InventoryLotCreateDto": {
        "required": [
          "itemId"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the lot. It is not guaranteed to be unique inventory-wide, but only within an item.",
            "nullable": true
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The item id that is associated to this lot. Please reference /api/items endpoint."
          },
          "expirationDate": {
            "type": "string",
            "description": "The date that this lot is supposed to expire.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of the inventory lot to be created."
      },
      "InventoryLotDto": {
        "required": [
          "custom",
          "id",
          "itemId",
          "name",
          "system"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the lot. It is not guaranteed to be unique inventory-wide, but only within an item."
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The item id that is associated to this lot. Please reference /api/items endpoint."
          },
          "quantity": {
            "type": "number",
            "description": "Quantity associated to this lot.",
            "format": "double"
          },
          "system": {
            "type": "boolean",
            "description": "Designates if this is a system-generated lot."
          },
          "custom": {
            "type": "boolean",
            "description": "Designates if this item is customized."
          },
          "expirationDate": {
            "type": "string",
            "description": "The date that this lot is supposed to expire.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Inventory lot definition."
      },
      "InventoryLotRequestFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter lots based on their name.",
            "nullable": true
          },
          "itemIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Item ids to match. Please reference /api/items endpoint.",
            "nullable": true
          },
          "system": {
            "type": "boolean",
            "description": "Filter by whether the lot is considered a system-generated lot.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding inventory lots."
      },
      "InventoryOverrideDto": {
        "required": [
          "itemId",
          "quantity"
        ],
        "type": "object",
        "properties": {
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item identifier."
          },
          "quantity": {
            "type": "number",
            "description": "The quantity to set the item's inventory level to.",
            "format": "double"
          },
          "lotId": {
            "type": "string",
            "description": "The lot identifier to apply this override to",
            "nullable": true
          },
          "locationId": {
            "type": "string",
            "description": "The location identifier to apply this override to.  ```null``` signifies no location.",
            "nullable": true
          },
          "note": {
            "type": "string",
            "description": "The note to add to the override transaction.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Override event for item inventory"
      },
      "InventoryPickDto": {
        "required": [
          "itemId",
          "quantity",
          "secondaryType"
        ],
        "type": "object",
        "properties": {
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item identifier. Please reference /api/items endpoint."
          },
          "secondaryType": {
            "$ref": "#/components/schemas/InventoryPickEventSecondaryType"
          },
          "quantity": {
            "type": "number",
            "description": "Quantity of the item to pick.",
            "format": "double"
          },
          "locationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Location id that inventory is picked from. Please reference /api/locations endpoint",
            "nullable": true
          },
          "lotId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Lot identifier for this block of inventory. Please reference /api/inventory-lots endpoint",
            "nullable": true
          },
          "note": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes associated to this transaction.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Pick event for item inventory."
      },
      "InventoryPickEventSecondaryType": {
        "enum": [
          "pick",
          "consume",
          "scrap",
          "stockAdjustmentDecrease",
          "otherDecrease"
        ],
        "type": "string",
        "description": "Secondary event type specifically for picking."
      },
      "InventoryReceiveDto": {
        "required": [
          "itemId",
          "quantity",
          "secondaryType"
        ],
        "type": "object",
        "properties": {
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item identifier. Please reference /api/items endpoint."
          },
          "secondaryType": {
            "$ref": "#/components/schemas/InventoryReceiveEventSecondaryType"
          },
          "quantity": {
            "type": "number",
            "description": "Quantity of the item to receive.",
            "format": "double"
          },
          "locationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Location id that inventory is received into. Please reference /api/locations endpoint",
            "nullable": true
          },
          "lotId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Lot identifier for this block of inventory. Please reference /api/inventory-lots endpoint",
            "nullable": true
          },
          "lotNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Lot name.",
            "nullable": true
          },
          "note": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes associated to this transaction.",
            "nullable": true
          },
          "laborValue": {
            "minimum": 0,
            "type": "number",
            "description": "Labor value associated (per unit).",
            "format": "double",
            "nullable": true
          },
          "machineValue": {
            "minimum": 0,
            "type": "number",
            "description": "Machine value associated (per unit).",
            "format": "double",
            "nullable": true
          },
          "outsideProcessingValue": {
            "minimum": 0,
            "type": "number",
            "description": "Outside processing value associated (per unit).",
            "format": "double",
            "nullable": true
          },
          "materialValue": {
            "minimum": 0,
            "type": "number",
            "description": "Material value associated (per unit).",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Receive event for item inventory."
      },
      "InventoryReceiveEventSecondaryType": {
        "enum": [
          "receive",
          "found",
          "stockAdjustmentIncrease",
          "otherIncrease"
        ],
        "type": "string",
        "description": "Secondary event type specifically for receiving."
      },
      "InventoryRequestFindParameters": {
        "type": "object",
        "properties": {
          "lotIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter inventory based on lot ids.",
            "nullable": true
          },
          "itemIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter inventory based on item ids.",
            "nullable": true
          },
          "locationIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter inventory based on location ids.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding inventory."
      },
      "InventoryRequestItemInventoryPickEvent": {
        "required": [
          "secondaryType"
        ],
        "type": "object",
        "properties": {
          "secondaryType": {
            "$ref": "#/components/schemas/InventoryEventSecondaryType"
          },
          "lotId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Lot identifier for this block of inventory.",
            "nullable": true
          },
          "locationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Location id that inventory is placed into.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "Location id that inventory is placed into.",
            "format": "double",
            "nullable": true
          },
          "actionDate": {
            "type": "string",
            "description": "The moment in time where this inventory event action occurs. If not provided, this will default to the current date/time.",
            "format": "date-time",
            "nullable": true
          },
          "source": {
            "$ref": "#/components/schemas/InventoryEnumEventSourceType"
          },
          "url": {
            "type": "string",
            "description": "The source url of the event.",
            "format": "uri",
            "nullable": true
          },
          "relatedSource": {
            "$ref": "#/components/schemas/InventoryEnumEventSourceType"
          },
          "relatedEntityId": {
            "type": "string",
            "description": "Entity id for tying this event back to a related entity.",
            "nullable": true
          },
          "note": {
            "type": "string",
            "description": "Notes associated to this transaction.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Pick event for item inventory."
      },
      "InventoryRequestItemInventoryReceiveEvent": {
        "required": [
          "secondaryType"
        ],
        "type": "object",
        "properties": {
          "secondaryType": {
            "$ref": "#/components/schemas/InventoryEventSecondaryType"
          },
          "lotId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Lot identifier for this block of inventory.",
            "nullable": true
          },
          "locationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Location id that inventory is placed into.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "Location id that inventory is placed into.",
            "format": "double",
            "nullable": true
          },
          "actionDate": {
            "type": "string",
            "description": "The moment in time where this inventory event action occurs. If not provided, this will default to the current date/time.",
            "format": "date-time",
            "nullable": true
          },
          "source": {
            "$ref": "#/components/schemas/InventoryEnumEventSourceType"
          },
          "url": {
            "type": "string",
            "description": "The source url of the event.",
            "format": "uri",
            "nullable": true
          },
          "relatedSource": {
            "$ref": "#/components/schemas/InventoryEnumEventSourceType"
          },
          "relatedEntityId": {
            "type": "string",
            "description": "Entity id for tying this event back to a related entity.",
            "nullable": true
          },
          "note": {
            "type": "string",
            "description": "Notes associated to this transaction.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Receive event for item inventory."
      },
      "InventoryTransactionDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the transaction",
            "nullable": true
          },
          "date": {
            "type": "string",
            "description": "The date of the transaction",
            "format": "date-time"
          },
          "type": {
            "$ref": "#/components/schemas/InventoryEventType"
          },
          "secondaryType": {
            "$ref": "#/components/schemas/InventoryEventSecondaryType"
          },
          "item": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "location": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "lot": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "quantity": {
            "type": "number",
            "description": "The quantity of the transaction",
            "format": "double"
          },
          "valueChange": {
            "type": "number",
            "description": "The item value change caused by the transaction",
            "format": "double"
          },
          "qtyChange": {
            "type": "number",
            "description": "The item quantity change caused by the transaction",
            "format": "double"
          },
          "note": {
            "type": "string",
            "description": "The note on the transaction",
            "nullable": true
          },
          "value": {
            "type": "number",
            "description": "The per-unit value of the transaction",
            "format": "double",
            "nullable": true
          },
          "totalValue": {
            "type": "number",
            "description": "The total value of the transaction",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "source": {
            "$ref": "#/components/schemas/InventoryTransactionSourceDto"
          }
        },
        "additionalProperties": false,
        "description": "An inventory transaction"
      },
      "InventoryTransactionSourceDto": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/InventoryEnumEventSourceType"
          },
          "name": {
            "type": "string",
            "description": "Display name of the source, such as the job or order number",
            "nullable": true
          },
          "jobId": {
            "type": "string",
            "description": "Id of the job the transaction belongs to, including a job's picks recorded against a work order operation. Null when the transaction is not tied to a single job, such as material picked for a work order nest.",
            "nullable": true
          },
          "itemToMakeId": {
            "type": "string",
            "description": "Id of the job's item to make, set when a job put a made item into inventory",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The action that created an inventory transaction"
      },
      "InventoryTransactionsListParameters": {
        "type": "object",
        "properties": {
          "itemIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter inventory transactions based on item identifiers.",
            "nullable": true
          },
          "dateRange": {
            "$ref": "#/components/schemas/DtoCommonDateRangeFilter"
          },
          "sourceType": {
            "$ref": "#/components/schemas/V2InventoryDataEventSourceType"
          },
          "relatedEntityType": {
            "$ref": "#/components/schemas/V2InventoryDataEventSourceType"
          },
          "relatedEntityId": {
            "type": "string",
            "description": "The transaction's related entity identifier",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching inventory transactions"
      },
      "InvoiceDepositAdjustmentLineItemDto": {
        "required": [
          "accountingDetails",
          "id",
          "price"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Related sales order line item id.",
            "nullable": true
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a deposit adjustment line item on an invoice."
      },
      "InvoiceDepositLineItemDto": {
        "required": [
          "accountingDetails",
          "amount",
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "The amount of the deposit.",
            "format": "double"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Related sales order line item id.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a deposit line item on an invoice."
      },
      "InvoiceDiscountLineItemDto": {
        "required": [
          "accountingDetails",
          "amount",
          "id",
          "isPercentage",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the discount line."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The description of the discount line.",
            "nullable": true
          },
          "isPercentage": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.Invoice.DiscountLineItem.DiscountLineItemDto.Amount discount is percentage based (else, it's an absolute amount)."
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          },
          "price": {
            "type": "number",
            "description": "The calculated amount of this discount.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a discount line item on an invoice."
      },
      "InvoiceDto": {
        "required": [
          "customerId",
          "id",
          "number",
          "status",
          "subtotal",
          "total"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Number",
            "format": "int32"
          },
          "status": {
            "$ref": "#/components/schemas/InvoiceStatusEnum"
          },
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the customer that the invoice is for. Please reference /api/customers endpoint."
          },
          "currencyInfo": {
            "$ref": "#/components/schemas/CurrencyInfoDto"
          },
          "issueDate": {
            "type": "string",
            "description": "Invoice issued date indicates when the invoice was sent to the customer.",
            "format": "date-time",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms key identifier. Please reference /api/payment-terms endpoint.",
            "nullable": true
          },
          "paymentTerms": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "companyInfoId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Company Information Id;",
            "nullable": true
          },
          "salesOrderId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Sales order identifier. Please reference /api/sales-orders endpoint.",
            "nullable": true
          },
          "customerPONumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Customer PO number.",
            "nullable": true
          },
          "dueDate": {
            "type": "string",
            "description": "Invoice due date.",
            "format": "date-time",
            "nullable": true
          },
          "total": {
            "minimum": 0,
            "type": "number",
            "description": "The final amount due, calculated as the sum of all item costs, taxes, fees, and any discounts applied in primary currency.",
            "format": "double"
          },
          "subtotal": {
            "minimum": 0,
            "type": "number",
            "description": "The sum of the line items this invoice bills, in primary currency, before tax, the discount,\nthe deposit adjustment, the progress-billing adjustment and any refund are applied. On a\ndeposit invoice this is the sum of its deposit lines.",
            "format": "double"
          },
          "lineItemsTotal": {
            "type": "number",
            "description": "The summation of the line item amounts due.",
            "format": "double"
          },
          "notesToCustomer": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "A field for the seller to provide additional details or instructions for the customer relating to the order.",
            "nullable": true
          },
          "billingAddress": {
            "$ref": "#/components/schemas/CommonAddressDto"
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "isDeposit": {
            "type": "boolean",
            "description": "Is deposit invoice"
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicates whether this invoice has been deleted"
          }
        },
        "additionalProperties": false,
        "description": "Represents an invoice"
      },
      "InvoiceFeeLineItemDto": {
        "required": [
          "accountingDetails",
          "id",
          "price"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "unitOfMeasure": {
            "$ref": "#/components/schemas/CommonEnumLineItemUomEnum"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this fee is taxable.",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Dictate if the tax rate is overridden.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier.",
            "nullable": true
          },
          "taxRate": {
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.Invoice.FeeLineItem.FeeLineItemDto.TaxCodeId is provided and FulcrumProduct.PublicApi.Dto.Invoice.FeeLineItem.FeeLineItemDto.OverrideTaxRate = true, the provided FulcrumProduct.PublicApi.Dto.Invoice.FeeLineItem.FeeLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Related sales order line item id.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a fee line item on an invoice."
      },
      "InvoiceFeeLineItemUpdateDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a fee line item on an invoice."
      },
      "InvoiceLineItemDto": {
        "required": [
          "accountingDetails",
          "discountedPrice",
          "discountedSubtotal",
          "id",
          "price",
          "quantity",
          "subtotal",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "type": {
            "$ref": "#/components/schemas/InvoiceLineItemTypeEnum"
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "discountedPrice": {
            "minimum": 0,
            "type": "number",
            "description": "The discounted line item price.",
            "format": "double"
          },
          "subtotal": {
            "minimum": 0,
            "type": "number",
            "description": "The subtotal for this line item which generally represents quantity * price.",
            "format": "double",
            "readOnly": true
          },
          "discountedSubtotal": {
            "minimum": 0,
            "type": "number",
            "description": "The discounted subtotal for this line item which generally represents quantity * discountedPrice.",
            "format": "double",
            "readOnly": true
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Line item description.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The key identifier for the tax code for the line item.",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Related sales order line item id.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a generic line item on an invoice."
      },
      "InvoiceLineItemTypeEnum": {
        "enum": [
          "part",
          "additionalFee",
          "shipping",
          "discount",
          "tax",
          "deposit",
          "depositAdjustment",
          "refund",
          "blanket",
          "progressBilling",
          "progressBillingAdjustment"
        ],
        "type": "string",
        "description": "Invoice line item type"
      },
      "InvoicePartLineItemDto": {
        "required": [
          "accountingDetails",
          "discountedPrice",
          "id",
          "isTaxable",
          "itemId",
          "name",
          "preDiscountSubTotal",
          "price",
          "quantity",
          "subTotal"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The line item name."
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity.",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "discountedPrice": {
            "minimum": 0,
            "type": "number",
            "description": "The discounted line item price.",
            "format": "double"
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Dictate if the tax rate is overridden.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable."
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.Invoice.PartLineItem.PartLineItemDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.Invoice.PartLineItem.PartLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id associated with this line item."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The part line item description.  Defaults to the item's description if none specified.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Related sales order line item id.",
            "nullable": true
          },
          "subTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, including applicable discounts",
            "format": "double"
          },
          "preDiscountSubTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, before discounts",
            "format": "double"
          },
          "isPercentageDiscount": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.Invoice.PartLineItem.PartLineItemDto.DiscountAmount discount is percentage based (else, it's an absolute amount).",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "customerPartNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The customer's known part line item number.",
            "nullable": true
          },
          "customerPartDescription": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The customer's known part line item description.",
            "nullable": true
          },
          "shipmentIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The shipment identifiers that were invoiced."
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a part line item on a sales order."
      },
      "InvoicePartLineItemUpdateDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a part line item on an invoice."
      },
      "InvoiceRefundLineItemDto": {
        "required": [
          "accountingDetails",
          "id",
          "itemId",
          "name",
          "price",
          "quantity",
          "salesOrderLineItemId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id associated with this line item."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the line item.  Defaults to the item's description if none specified."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The refund line item description.  Defaults to the item's description if none specified.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id that references the sales order line item that was refunded."
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a refund line item on a sales order."
      },
      "InvoiceRefundLineItemUpdateDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a refund line item on an invoice."
      },
      "InvoiceRequestFindParameters": {
        "type": "object",
        "properties": {
          "numbers": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Filter invoices to only given numbers",
            "nullable": true
          },
          "externalReference": {
            "$ref": "#/components/schemas/CommonExternalReferenceFindDto"
          },
          "status": {
            "$ref": "#/components/schemas/InvoiceStatusEnum"
          },
          "issueDateFrom": {
            "type": "string",
            "description": "Filter to invoices whose issue date falls on or after this date. The whole day is included, so\nany time component is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "issueDateTo": {
            "type": "string",
            "description": "Filter to invoices whose issue date falls on or before this date. The whole day is included, so\nan invoice issued later that same day still matches.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding invoices."
      },
      "InvoiceRequestUpdateStatus": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/InvoiceStatusEnum"
          },
          "paidDate": {
            "type": "string",
            "description": "The date that the invoice was paid.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Update an invoice status."
      },
      "InvoiceShippingChargeLineItemDto": {
        "required": [
          "accountingDetails",
          "amount",
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the shipping charge line."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The description of the shipping charge line.",
            "nullable": true
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "The amount of the charge.",
            "format": "double"
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable.",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Dictate if the tax rate is overridden.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.Invoice.ShippingChargeLineItem.ShippingChargeLineItemDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.Invoice.ShippingChargeLineItem.ShippingChargeLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Related sales order line item id.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a shipping charge line item on an invoice."
      },
      "InvoiceStatusEnum": {
        "enum": [
          "new",
          "needsApproval",
          "approved",
          "issued",
          "paid"
        ],
        "type": "string",
        "description": "Invoice status"
      },
      "InvoiceTaxLineItemAvalaraOptions": {
        "type": "object",
        "properties": {
          "address": {
            "$ref": "#/components/schemas/CommonAddressDto"
          }
        },
        "additionalProperties": false,
        "description": "Options for use with Avalara (if enabled)."
      },
      "InvoiceTaxLineItemDto": {
        "required": [
          "accountingDetails",
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.Invoice.TaxLineItem.TaxLineItemDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.Invoice.TaxLineItem.TaxLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "avalaraOptions": {
            "$ref": "#/components/schemas/InvoiceTaxLineItemAvalaraOptions"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "Tax amount applied at this rate across the entire invoice.",
            "format": "double",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Related sales order line item id.",
            "nullable": true
          },
          "taxCodeEditable": {
            "type": "boolean",
            "description": "Indicates if the tax code used is editable.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Indicates if the tax code used is editable.",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a tax line item on an invoice."
      },
      "InvoiceUpdateDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an update on an invoice."
      },
      "ItemCanMakeDto": {
        "type": "object",
        "properties": {
          "canMakeFromOnHand": {
            "type": "number",
            "description": "The quantity that can be made from on-hand inventory of subcomponents of this item.\nNull if the planning cache has not yet been computed.",
            "format": "double",
            "nullable": true
          },
          "canMakeFromAvailable": {
            "type": "number",
            "description": "The quantity that can be made from available inventory (on-hand + incoming supply) of subcomponents of this item.\nNull if the planning cache has not yet been computed.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Indicates how much of this item can be produced from its subcomponent inventory.\nOnly applicable to make items."
      },
      "ItemCreateDto": {
        "required": [
          "itemOrigin",
          "number",
          "unitOfMeasureName",
          "unitTypeName"
        ],
        "type": "object",
        "properties": {
          "number": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name to give the item. Must be unique to all active items."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The verbose description to give the item."
          },
          "revision": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Revision name",
            "nullable": true
          },
          "itemOrigin": {
            "$ref": "#/components/schemas/DomainItemsAndInventoryItemOrigin"
          },
          "unitTypeName": {
            "minLength": 1,
            "type": "string",
            "description": "The unit of measure type, ex: Pieces, Volume, Weight, Area"
          },
          "unitOfMeasureName": {
            "minLength": 1,
            "type": "string",
            "description": "The unit of measure name. Options available depend on the selected UnitTypeName. For Pieces, you might have a UOM of Piece, Set or Case. For Volume options include Liter, Milliliter, etc."
          },
          "isSellable": {
            "type": "boolean",
            "description": "Define if this item is able to be sold/sellable.",
            "nullable": true
          },
          "isSingleUseItem": {
            "type": "boolean",
            "description": "Indicate if this item is intended for single use.",
            "nullable": true
          },
          "isLotTracked": {
            "type": "boolean",
            "description": "Indicate if this item is going to be lot-tracked.",
            "nullable": true
          },
          "isNonInventory": {
            "type": "boolean",
            "description": "Indicate if this item is a non-inventory item — one that supports the business but is never\nheld in inventory. Only a buy item that is not sellable can be non-inventory; anything else\nis rejected with a 400. Defaults to false.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "accountingCode2Id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "materialCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item material code key identifier. Please reference /api/material-codes endpoint.",
            "nullable": true
          },
          "categoryId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item category code key identifier. Please reference /api/item-categories endpoint.",
            "nullable": true
          },
          "gradeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item grade code key identifier. Please reference /api/grade-codes endpoint.",
            "nullable": true
          },
          "shapeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item shape code key identifier. Please reference /api/shape-codes endpoint.",
            "nullable": true
          },
          "gaugeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item gauge code key identifier. Please reference /api/gauge-codes endpoint.",
            "nullable": true
          },
          "width": {
            "minimum": 0,
            "type": "number",
            "description": "Item width",
            "format": "double",
            "nullable": true
          },
          "height": {
            "minimum": 0,
            "type": "number",
            "description": "Item height",
            "format": "double",
            "nullable": true
          },
          "length": {
            "minimum": 0,
            "type": "number",
            "description": "Item length",
            "format": "double",
            "nullable": true
          },
          "weight": {
            "minimum": 0,
            "type": "number",
            "description": "Item weight",
            "format": "double",
            "nullable": true
          },
          "minimumStockOnHand": {
            "minimum": 0,
            "type": "number",
            "description": "Item minimum stock on hand.",
            "format": "double",
            "nullable": true
          },
          "minimumProductionQuantity": {
            "minimum": 0,
            "type": "number",
            "description": "Item minimum production quantity for a manufacturing run.",
            "format": "double",
            "nullable": true
          },
          "internalNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Internal item notes.",
            "nullable": true
          },
          "salesUnitOfMeasureConversions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonUnitOfMeasureConversionDto"
            },
            "description": "Unit of measure conversions for sellable items.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Whether or not this item is taxable (default)",
            "nullable": true
          },
          "buildToOrder": {
            "type": "boolean",
            "description": "Whether or not this item is build to order (jobs are made from sales orders, not overall demand)",
            "nullable": true
          },
          "buildToStock": {
            "type": "boolean",
            "description": "Whether or not this item is build to stock (jobs are created from overall demand, not sales orders)",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of item to be created"
      },
      "ItemCustomerCreateDto": {
        "required": [
          "customerId"
        ],
        "type": "object",
        "properties": {
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Customer id associated to this entity. Please reference /api/customers endpoint."
          },
          "customerItemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item number for this customer.",
            "nullable": true
          },
          "customerItemName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item name for this customer.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Create a new item customer association."
      },
      "ItemCustomerDto": {
        "required": [
          "customerId",
          "id",
          "priceBreaks"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The id of the item-customer association. Use this value for update and delete operations."
          },
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Customer id associated to this entity. Please reference /api/customers endpoint."
          },
          "customerItemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item number for this customer.",
            "nullable": true
          },
          "customerItemName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item name for this customer.",
            "nullable": true
          },
          "unitOfMeasureName": {
            "minLength": 1,
            "type": "string",
            "description": "The unit of measure name. This can be standard unit measurement names (Piece, Square foot, etc) or a custom measurement name.",
            "nullable": true
          },
          "priceBreaks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonPriceBreakDto"
            },
            "description": "Price breaks."
          }
        },
        "additionalProperties": false,
        "description": "Customer with additional context for an item."
      },
      "ItemCustomerTierDto": {
        "required": [
          "customerTier",
          "priceBreaks"
        ],
        "type": "object",
        "properties": {
          "customerTier": {
            "$ref": "#/components/schemas/CustomerTierDto"
          },
          "priceBreaks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonPriceBreakDto"
            },
            "description": "Price breaks."
          }
        },
        "additionalProperties": false,
        "description": "Item customer tier definition"
      },
      "ItemCustomerUpdateDto": {
        "type": "object",
        "properties": {
          "customerItemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item number for this customer.",
            "nullable": true
          },
          "customerItemName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item name for this customer.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Update an item customer association."
      },
      "ItemDto": {
        "required": [
          "accountingDetails",
          "description",
          "id",
          "itemOrigin",
          "number",
          "unitOfMeasureName",
          "unitTypeName"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id"
          },
          "number": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The number to give the item."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The description to give the item."
          },
          "itemOrigin": {
            "$ref": "#/components/schemas/DomainItemsAndInventoryItemOrigin"
          },
          "unitTypeName": {
            "minLength": 1,
            "type": "string",
            "description": "The unit of measure type, ex: Piece, Volume or Weight"
          },
          "unitOfMeasureName": {
            "minLength": 1,
            "type": "string",
            "description": "The unit of measure name. Options available depend on the selected UnitTypeName. For Pieces, you might have a UOM of Piece, Set or Case. For Volume, options include Liter, Milliliter, etc."
          },
          "revision": {
            "$ref": "#/components/schemas/ItemRevisionDto"
          },
          "barCodeNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The barcode number to give the item.",
            "nullable": true
          },
          "isSellable": {
            "type": "boolean",
            "description": "Define if this item is able to be sold/sellable."
          },
          "isArchived": {
            "type": "boolean",
            "description": "Indicate if this item is archived."
          },
          "isNonInventory": {
            "type": "boolean",
            "description": "Indicate if this item is considered a non-inventory item."
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "accountingCode2Id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code 2 key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "materialCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item material code key identifier. Please reference /api/material-codes endpoint.",
            "nullable": true
          },
          "gradeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item grade code key identifier. Please reference /api/grade-codes endpoint.",
            "nullable": true
          },
          "shapeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item shape code key identifier. Please reference /api/shape-codes endpoint.",
            "nullable": true
          },
          "gaugeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item gauge code key identifier. Please reference /api/gauge-codes endpoint.",
            "nullable": true
          },
          "categoryId": {
            "type": "string",
            "description": "Item category code key identifier. Please reference /api/item-categories endpoint.",
            "nullable": true
          },
          "width": {
            "minimum": 0,
            "type": "number",
            "description": "Item width",
            "format": "double",
            "nullable": true
          },
          "height": {
            "minimum": 0,
            "type": "number",
            "description": "Item height",
            "format": "double",
            "nullable": true
          },
          "length": {
            "minimum": 0,
            "type": "number",
            "description": "Item length",
            "format": "double",
            "nullable": true
          },
          "weight": {
            "minimum": 0,
            "type": "number",
            "description": "Item weight",
            "format": "double",
            "nullable": true
          },
          "materialWeight": {
            "minimum": 0,
            "type": "number",
            "description": "The weight of material item (calculated)",
            "format": "double",
            "nullable": true
          },
          "minimumStockOnHand": {
            "minimum": 0,
            "type": "number",
            "description": "Item minimum stock on hand.",
            "format": "double",
            "nullable": true
          },
          "minimumProductionQuantity": {
            "minimum": 0,
            "type": "number",
            "description": "Item minimum production quantity for a manufacturing run.",
            "format": "double",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TagDto"
            },
            "description": "Item tags."
          },
          "internalNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Internal item notes.",
            "nullable": true
          },
          "salesUnitOfMeasureConversions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonUnitOfMeasureConversionDto"
            },
            "description": "Sales unit of measurements",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Whether this item is taxable",
            "nullable": true
          },
          "buildToOrder": {
            "type": "boolean",
            "description": "Whether or not this item is build to order (jobs are made from sales orders, not overall demand)",
            "nullable": true
          },
          "buildToStock": {
            "type": "boolean",
            "description": "Whether or not this item is build to stock (jobs are created from overall demand, not sales orders)",
            "nullable": true
          },
          "isSingleUseItem": {
            "type": "boolean",
            "description": "Indicate if this item is intended for single use.",
            "nullable": true
          },
          "isLotTracked": {
            "type": "boolean",
            "description": "Indicate if this item is lot-tracked.",
            "nullable": true
          },
          "shipping": {
            "$ref": "#/components/schemas/ItemShippingDto"
          },
          "createdUtc": {
            "type": "string",
            "description": "The date the item was created",
            "format": "date-time"
          },
          "modifiedUtc": {
            "type": "string",
            "description": "The date the item was last modified",
            "format": "date-time"
          },
          "customerTiers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemCustomerTierDto"
            },
            "description": "Customer tiers associated with this item."
          },
          "materialDetails": {
            "$ref": "#/components/schemas/ItemMaterialDetailsDto"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          },
          "materialVendorDetails": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemMaterialVendorDto"
            },
            "description": "Includes vendor (purchasing) details for this item. This is specific to material-based items.",
            "nullable": true
          },
          "vendorDetails": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemVendorDto"
            },
            "description": "Includes vendor (purchasing) details for this item.",
            "nullable": true
          },
          "customerDetails": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemCustomerDto"
            },
            "description": "Includes customer (selling) details for this item.",
            "nullable": true
          },
          "qualityPlanStatus": {
            "$ref": "#/components/schemas/ItemsAndInventoryDataQualityPlanStatus"
          },
          "needsQualityPlan": {
            "type": "boolean",
            "description": "Whether this item requires an approved quality plan. When true, the item has an approved quality plan\nonly if FulcrumProduct.PublicApi.Dto.Item.ItemDto.QualityPlanStatus is Approved; when false, no quality plan approval is required.\nRead-only: returned on item reads but not settable through the create/update endpoints.",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "An item"
      },
      "ItemInputUnitCostDto": {
        "required": [
          "basis",
          "currencyCode"
        ],
        "type": "object",
        "properties": {
          "unitCost": {
            "type": "number",
            "description": "Cost per unit of the item's inventory unit of measure, in `currencyCode`. Null when Fulcrum costs the item at nothing.",
            "format": "double",
            "nullable": true
          },
          "basis": {
            "$ref": "#/components/schemas/DtoItemInputUnitCostBasisEnum"
          },
          "vendor": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "priceBreakQuantity": {
            "type": "integer",
            "description": "The starting quantity, in the item's inventory unit of measure, of the vendor price break that priced the vendor portion.\nNull unless that portion came from a vendor price break.",
            "format": "int32",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "The currency `unitCost` is expressed in: the company's primary currency, or `unconvertedVendorCurrencyCode` when that is set\nand `basis` is `vendorPriceBreak`, `vendorPrice` or `materialVendor`."
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "The item's inventory unit of measure, which `unitCost` is per.",
            "nullable": true
          },
          "unconvertedVendorCurrencyCode": {
            "type": "string",
            "description": "The currency of the vendor pricing that contributed to `unitCost` when it is not the primary currency and has no exchange rate,\nso it was used unconverted. Null when the vendor pricing was converted or in the primary currency, or no vendor pricing contributed.\nWith `inventoryAndVendor`, `unitCost` mixes this currency with the primary currency.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The unit cost Fulcrum assigns to an item when it is consumed as a routing input, and the basis it used."
      },
      "ItemListDto": {
        "required": [
          "accountingDetails",
          "description",
          "id",
          "itemOrigin",
          "number",
          "unitOfMeasureName",
          "unitTypeName"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id"
          },
          "number": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The number to give the item."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The description to give the item."
          },
          "itemOrigin": {
            "$ref": "#/components/schemas/DomainItemsAndInventoryItemOrigin"
          },
          "unitTypeName": {
            "minLength": 1,
            "type": "string",
            "description": "The unit of measure type, ex: Piece, Volume or Weight"
          },
          "unitOfMeasureName": {
            "minLength": 1,
            "type": "string",
            "description": "The unit of measure name. Options available depend on the selected UnitTypeName. For Pieces, you might have a UOM of Piece, Set or Case. For Volume, options include Liter, Milliliter, etc."
          },
          "revision": {
            "$ref": "#/components/schemas/ItemRevisionDto"
          },
          "barCodeNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The barcode number to give the item.",
            "nullable": true
          },
          "isSellable": {
            "type": "boolean",
            "description": "Define if this item is able to be sold/sellable."
          },
          "isArchived": {
            "type": "boolean",
            "description": "Indicate if this item is archived."
          },
          "isNonInventory": {
            "type": "boolean",
            "description": "Indicate if this item is considered a non-inventory item."
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "accountingCode2Id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code 2 key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "materialCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item material code key identifier. Please reference /api/material-codes endpoint.",
            "nullable": true
          },
          "gradeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item grade code key identifier. Please reference /api/grade-codes endpoint.",
            "nullable": true
          },
          "shapeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item shape code key identifier. Please reference /api/shape-codes endpoint.",
            "nullable": true
          },
          "gaugeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item gauge code key identifier. Please reference /api/gauge-codes endpoint.",
            "nullable": true
          },
          "categoryId": {
            "type": "string",
            "description": "Item category code key identifier. Please reference /api/item-categories endpoint.",
            "nullable": true
          },
          "width": {
            "minimum": 0,
            "type": "number",
            "description": "Item width",
            "format": "double",
            "nullable": true
          },
          "height": {
            "minimum": 0,
            "type": "number",
            "description": "Item height",
            "format": "double",
            "nullable": true
          },
          "length": {
            "minimum": 0,
            "type": "number",
            "description": "Item length",
            "format": "double",
            "nullable": true
          },
          "weight": {
            "minimum": 0,
            "type": "number",
            "description": "Item weight",
            "format": "double",
            "nullable": true
          },
          "materialWeight": {
            "minimum": 0,
            "type": "number",
            "description": "The weight of material item (calculated)",
            "format": "double",
            "nullable": true
          },
          "minimumStockOnHand": {
            "minimum": 0,
            "type": "number",
            "description": "Item minimum stock on hand.",
            "format": "double",
            "nullable": true
          },
          "minimumProductionQuantity": {
            "minimum": 0,
            "type": "number",
            "description": "Item minimum production quantity for a manufacturing run.",
            "format": "double",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TagDto"
            },
            "description": "Item tags."
          },
          "internalNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Internal item notes.",
            "nullable": true
          },
          "salesUnitOfMeasureConversions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonUnitOfMeasureConversionDto"
            },
            "description": "Sales unit of measurements",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Whether this item is taxable",
            "nullable": true
          },
          "buildToOrder": {
            "type": "boolean",
            "description": "Whether or not this item is build to order (jobs are made from sales orders, not overall demand)",
            "nullable": true
          },
          "buildToStock": {
            "type": "boolean",
            "description": "Whether or not this item is build to stock (jobs are created from overall demand, not sales orders)",
            "nullable": true
          },
          "isSingleUseItem": {
            "type": "boolean",
            "description": "Indicate if this item is intended for single use.",
            "nullable": true
          },
          "isLotTracked": {
            "type": "boolean",
            "description": "Indicate if this item is lot-tracked.",
            "nullable": true
          },
          "shipping": {
            "$ref": "#/components/schemas/ItemShippingDto"
          },
          "createdUtc": {
            "type": "string",
            "description": "The date the item was created",
            "format": "date-time"
          },
          "modifiedUtc": {
            "type": "string",
            "description": "The date the item was last modified",
            "format": "date-time"
          },
          "customerTiers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemCustomerTierDto"
            },
            "description": "Customer tiers associated with this item."
          },
          "materialDetails": {
            "$ref": "#/components/schemas/ItemMaterialDetailsDto"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          },
          "materialVendorDetails": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemMaterialVendorDto"
            },
            "description": "Includes vendor (purchasing) details for this item. This is specific to material-based items.",
            "nullable": true
          },
          "vendorDetails": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemVendorDto"
            },
            "description": "Includes vendor (purchasing) details for this item.",
            "nullable": true
          },
          "customerDetails": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemCustomerDto"
            },
            "description": "Includes customer (selling) details for this item.",
            "nullable": true
          },
          "qualityPlanStatus": {
            "$ref": "#/components/schemas/ItemsAndInventoryDataQualityPlanStatus"
          },
          "needsQualityPlan": {
            "type": "boolean",
            "description": "Whether this item requires an approved quality plan. When true, the item has an approved quality plan\nonly if FulcrumProduct.PublicApi.Dto.Item.ItemDto.QualityPlanStatus is Approved; when false, no quality plan approval is required.\nRead-only: returned on item reads but not settable through the create/update endpoints.",
            "readOnly": true
          },
          "usedByItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonReferenceDto"
            },
            "description": "Items that use this item. Will only be populated if IncludeUsageData is set to true in\nthe request parameters.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "An item"
      },
      "ItemMaterialCreateDto": {
        "required": [
          "length",
          "materialShapeId"
        ],
        "type": "object",
        "properties": {
          "materialShapeId": {
            "minLength": 1,
            "type": "string",
            "description": "The id of the material shape to cut the item from. Must be a shape that is already activated for this\nshop, as returned by the Material List endpoint with `active` true; an id that is only present in\nthe materials database is rejected with a 404. Activate it first with the Material Activate endpoint."
          },
          "length": {
            "type": "number",
            "description": "The length of the piece, expressed in the material shape's length unit (inch, foot, millimeter, ...).\nRequired for every shape, and must be greater than zero.",
            "format": "double"
          },
          "width": {
            "type": "number",
            "description": "The width of the piece, expressed in the material shape's length unit. Required when the material shape\nis planar (sheet, plate, tread plate), because those shapes are sized by length and width, and the width\ndetermines both the generated item number and the item's calculated weight; omitting it is rejected with\na 400 rather than defaulted. Must be omitted when the material shape is linear (bar, tube, pipe, beam,\nangle, channel), because those shapes are sized by length alone and their width is fixed by the shape;\nsupplying it is rejected with a 400 rather than ignored, so a caller is never left believing a width was\nstored.",
            "format": "double",
            "nullable": true
          },
          "isRemnant": {
            "type": "boolean",
            "description": "Set true to create the item as a remnant — an offcut left over from a larger piece. Defaults to false.\nA remnant is excluded from the shop's default buy-item accounting code, so it is created with no\naccounting code unless one is assigned afterwards.\n            \nApplies only when a new item is created. The generated number encodes the shape and the dimensions but\nnot remnant state, so a request whose number already resolves to an existing item returns that item\nunchanged, keeping whatever remnant state it already had.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of the material item to be created. Thickness, form and length unit are not supplied here — they\ncome from the selected material shape."
      },
      "ItemMaterialDetailsDto": {
        "type": "object",
        "properties": {
          "materialWidth": {
            "minimum": 0,
            "type": "number",
            "description": "For Sheets, the Width",
            "format": "double",
            "nullable": true
          },
          "materialLength": {
            "minimum": 0,
            "type": "number",
            "description": "Length. For Sheets, the Height",
            "format": "double",
            "nullable": true
          },
          "materialThickness": {
            "minimum": 0,
            "type": "number",
            "description": "Thickness or Diameter",
            "format": "double",
            "nullable": true
          },
          "form": {
            "$ref": "#/components/schemas/FulcrumProductMaterialsMaterialForms"
          },
          "unit": {
            "$ref": "#/components/schemas/FulcrumProductMaterialsFulcrumLengthUnits"
          },
          "materialId": {
            "type": "string",
            "description": "Ex: SS-SAE-304-Sheet-0.25000",
            "nullable": true
          },
          "materialName": {
            "type": "string",
            "description": "Ex: Stainless Steel 304 Sheet 1/4\"",
            "nullable": true
          },
          "isRemnant": {
            "type": "boolean",
            "description": "True if the item was created as a remnant."
          }
        },
        "additionalProperties": false,
        "description": "Material Details"
      },
      "ItemMaterialVendorCreateDto": {
        "required": [
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor id associated to this entity. Please reference /api/vendors endpoint."
          },
          "vendorItemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item number for this vendor.",
            "nullable": true
          },
          "vendorItemName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item name for this vendor.",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes to the vendor.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Vendor with additional context for a material-based item."
      },
      "ItemMaterialVendorDto": {
        "required": [
          "id",
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id"
          },
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor id associated to this entity. Please reference /api/vendors endpoint."
          },
          "vendorItemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item number for this vendor.",
            "nullable": true
          },
          "vendorItemName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item name for this vendor.",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes to the vendor.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Material vendor with additional context for an item."
      },
      "ItemMaterialVendorUpdateDto": {
        "type": "object",
        "properties": {
          "vendorItemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item number for this vendor.",
            "nullable": true
          },
          "vendorItemName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item name for this vendor.",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes to the vendor.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Vendor with additional context for a material-based item."
      },
      "ItemNumberFilter": {
        "required": [
          "casingOption",
          "mode",
          "query"
        ],
        "type": "object",
        "properties": {
          "query": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The filter string to match against."
          },
          "mode": {
            "$ref": "#/components/schemas/ItemRequestFilterMode"
          },
          "casingOption": {
            "$ref": "#/components/schemas/CommonEnumCasingOption"
          },
          "revision": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Optional revision to match against. Revision is always tested for exact equality",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Filter used to limit results by item number"
      },
      "ItemPurchaseHistoryDto": {
        "required": [
          "purchases",
          "totalPurchaseCount",
          "windowMonths"
        ],
        "type": "object",
        "properties": {
          "item": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "windowMonths": {
            "type": "integer",
            "description": "Window the history covers, in months back from now. Reflects the value actually used after clamping.",
            "format": "int32"
          },
          "totalPurchaseCount": {
            "type": "integer",
            "description": "Number of purchases in FulcrumProduct.PublicApi.Dto.Item.PurchaseHistory.ItemPurchaseHistoryDto.Purchases.",
            "format": "int32"
          },
          "purchases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemPurchaseHistoryEntryDto"
            },
            "description": "Every purchase of the item in the window, newest first."
          },
          "summary": {
            "$ref": "#/components/schemas/ItemPurchaseHistorySummaryDto"
          }
        },
        "additionalProperties": false,
        "description": "What one item has cost, read from the purchase orders that bought it."
      },
      "ItemPurchaseHistoryEntryDto": {
        "required": [
          "purchaseOrderNumber"
        ],
        "type": "object",
        "properties": {
          "purchaseOrder": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "purchaseOrderNumber": {
            "type": "integer",
            "description": "Human-facing purchase order number.",
            "format": "int32"
          },
          "purchaseOrderStatus": {
            "type": "string",
            "description": "Order status at read time — only `Ordered` or `Paid` appear here.",
            "nullable": true
          },
          "orderDateUtc": {
            "type": "string",
            "description": "When the order was placed (UTC).",
            "format": "date-time",
            "nullable": true
          },
          "vendor": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "unitPrice": {
            "type": "number",
            "description": "Unit price on the order line.",
            "format": "double",
            "nullable": true
          },
          "actualBilledUnitPrice": {
            "type": "number",
            "description": "Unit price the vendor actually billed, when it came back different from the ordered price.",
            "format": "double",
            "nullable": true
          },
          "effectiveUnitPrice": {
            "type": "number",
            "description": "The price actually paid: the billed price when there is one, otherwise the ordered price. Use this rather than picking between the two.",
            "format": "double",
            "nullable": true
          },
          "quantityOrdered": {
            "type": "number",
            "description": "Quantity ordered on the line.",
            "format": "double",
            "nullable": true
          },
          "quantityReceived": {
            "type": "number",
            "description": "Quantity received against the line so far.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One purchase of the item — a part line on an order that was placed."
      },
      "ItemPurchaseHistorySummaryDto": {
        "required": [
          "vendorCount"
        ],
        "type": "object",
        "properties": {
          "minUnitPrice": {
            "type": "number",
            "description": "Lowest effective unit price paid in the window.",
            "format": "double",
            "nullable": true
          },
          "maxUnitPrice": {
            "type": "number",
            "description": "Highest effective unit price paid in the window.",
            "format": "double",
            "nullable": true
          },
          "avgUnitPrice": {
            "type": "number",
            "description": "Mean effective unit price across the window, to four decimal places.",
            "format": "double",
            "nullable": true
          },
          "latestUnitPrice": {
            "type": "number",
            "description": "Effective unit price on the most recent purchase — the \"last price paid\".",
            "format": "double",
            "nullable": true
          },
          "latestOrderDateUtc": {
            "type": "string",
            "description": "Order date of the most recent purchase (UTC).",
            "format": "date-time",
            "nullable": true
          },
          "vendorCount": {
            "type": "integer",
            "description": "How many distinct vendors the item was bought from in the window.",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Roll-up over an item's purchases in the window. Prices are effective prices."
      },
      "ItemReferenceDto": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique Id associated to this entity"
          },
          "number": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Item number."
          },
          "revision": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Revision name.",
            "nullable": true
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Item name.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Item description.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Item reference"
      },
      "ItemRequestAddRevision": {
        "required": [
          "revision"
        ],
        "type": "object",
        "properties": {
          "revision": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The revision to be created."
          },
          "archiveSourceItem": {
            "type": "boolean",
            "description": "Indicate whether we should archive the source item. This will default to false.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Add an item revision."
      },
      "ItemRequestFilterMode": {
        "enum": [
          "equal",
          "startsWith",
          "contains"
        ],
        "type": "string",
        "description": "How item numbers are matched against the search string"
      },
      "ItemRequestFindParameters": {
        "type": "object",
        "properties": {
          "number": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter to items who's number contains the given string",
            "nullable": true
          },
          "revision": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter to items who's revision matches the given string",
            "nullable": true
          },
          "customField": {
            "$ref": "#/components/schemas/CommonCustomFieldSearchDto"
          },
          "latestRevision": {
            "type": "boolean",
            "description": "Indicate whether we want the latest revision(s) of the items."
          },
          "itemIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter to items whose ids are in the list",
            "nullable": true
          },
          "descriptionFilter": {
            "type": "string",
            "description": "Filter to items whose description contains this text. Matching is a case-insensitive\nsubstring test; it is not a phrase or keyword search and supports no operators.",
            "nullable": true
          },
          "isArchived": {
            "type": "boolean",
            "description": "Include or exclude archived items",
            "nullable": true
          },
          "modifiedAfterUtc": {
            "type": "string",
            "description": "Filters to items modified at or after (inclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.\nUnlike the other list endpoints, this bound is inclusive, so with `modifiedBeforeUtc` it selects the window [after, before).\nAn item's `modifiedUtc` also advances when a file is attached to it, removed from it, moved onto or off it, or rewritten.\nDeleted items never appear in this list.",
            "format": "date-time",
            "nullable": true
          },
          "modifiedBeforeUtc": {
            "type": "string",
            "description": "Filters to items modified before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.\nEach window boundary belongs to exactly one window; when polling, end each window a lag before the current time\nthat is longer than any write takes to commit, since an item's stamp is its write time, not its commit time.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding items."
      },
      "ItemRequestFindParametersV2": {
        "type": "object",
        "properties": {
          "numbers": {
            "maxItems": 50,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemNumberFilter"
            },
            "description": "Filter items based on numbers",
            "nullable": true
          },
          "customField": {
            "$ref": "#/components/schemas/CommonCustomFieldSearchDto"
          },
          "customFields": {
            "maxItems": 50,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonCustomFieldSearchDto"
            },
            "description": "Filter items based on custom fields\nNote: these will be OR'd with each other and are not additive in filtering.",
            "nullable": true
          },
          "latestRevision": {
            "type": "boolean",
            "description": "Indicate whether we want the latest revision(s) of the items."
          },
          "itemIds": {
            "maxItems": 50,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter to items whose ids are in the list",
            "nullable": true
          },
          "descriptionFilter": {
            "type": "string",
            "description": "Filter to items whose description contains this text. Matching is a case-insensitive\nsubstring test; it is not a phrase or keyword search and supports no operators.",
            "nullable": true
          },
          "isArchived": {
            "type": "boolean",
            "description": "Include or exclude archived items",
            "nullable": true
          },
          "includeUsageData": {
            "type": "boolean",
            "description": "If set to true, data on where the item is being used will be included in the results"
          },
          "includeVendorData": {
            "type": "boolean",
            "description": "If set to true, vendor details about the item will be included in the results"
          },
          "includeCustomerData": {
            "type": "boolean",
            "description": "If set to true, customer details about the item will be included in the results"
          },
          "includeCustomerTierData": {
            "type": "boolean",
            "description": "If set to true, customer tier details about the item will be included in the results"
          },
          "vendorId": {
            "type": "string",
            "description": "If provided, filter to items that are produced by this vendor.",
            "nullable": true
          },
          "modifiedAfterUtc": {
            "type": "string",
            "description": "Filters to items modified at or after (inclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.\nUnlike the other list endpoints, this bound is inclusive, so with `modifiedBeforeUtc` it selects the window [after, before).\n\n`modifiedUtc` also advances when a file is attached to, removed from, moved onto or off, or rewritten on the item.\nTo poll without missing changes: set `modifiedBeforeUtc` to the current time minus a short lag (for example two\nminutes), so in-flight writes have committed. Request the window sorted by `modifiedUtc` with `take` of 1000 or\nless and no `skip`. If the page is full (it holds `take` items), the window is too wide: halve it, setting\n`modifiedBeforeUtc` to `modifiedAfterUtc` + (`modifiedBeforeUtc` - `modifiedAfterUtc`) / 2, and\nrequest again. Otherwise process the page and continue with `modifiedAfterUtc` set to this window's\n`modifiedBeforeUtc`. If a full page holds a single `modifiedUtc` value, halving cannot narrow it further:\npage through that one instant with `skip` and `take`, since items sharing a `modifiedUtc` are\nordered by `id`.\nDeleted items never appear in this list. To learn of deletions, reconcile separately.",
            "format": "date-time",
            "nullable": true
          },
          "modifiedBeforeUtc": {
            "type": "string",
            "description": "Filters to items modified before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.\nEach window boundary belongs to exactly one window; choose a lag longer than any write takes to commit, since an\nitem's stamp is its write time, not its commit time.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding items.\nTo sync items incrementally, poll the half-open window [`modifiedAfterUtc`, `modifiedBeforeUtc`)\nwith the pattern `modifiedAfterUtc` describes."
      },
      "ItemRequestListItemCostBreakdownsParameters": {
        "type": "object",
        "properties": {
          "types": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemsAndInventoryRoutingsCostBreakdownType"
            },
            "description": "Only cost breakdowns of these types. Omitted or empty returns every type.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Filters for an item's cost breakdown list."
      },
      "ItemRevisionDto": {
        "type": "object",
        "properties": {
          "isLatestRevision": {
            "type": "boolean",
            "description": "Indicate if this is the latest revision of an item."
          },
          "revision": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Revision name.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Item revision information."
      },
      "ItemRoutingDto": {
        "type": "object",
        "properties": {
          "allowContinuousFlow": {
            "type": "boolean",
            "description": "Allow an operation to start before previous operations in the routing end",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an item's routing"
      },
      "ItemRoutingInputItemCreateDto": {
        "required": [
          "itemId",
          "valueType",
          "valueTypeUnits"
        ],
        "type": "object",
        "properties": {
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The item id to be added. Please reference /api/items endpoint."
          },
          "valueTypeUnits": {
            "minimum": 0,
            "type": "number",
            "description": "Measurement unit depending on FulcrumProduct.PublicApi.Dto.Item.Routing.InputItemCreateDto.ValueType",
            "format": "double"
          },
          "valueType": {
            "$ref": "#/components/schemas/CommonEnumInputItemValueTypeEnum"
          },
          "fixedUnits": {
            "minimum": 0,
            "type": "number",
            "description": "Quantity required per lot, regardless of the parent quantity being made, in addition to\nFulcrumProduct.PublicApi.Dto.Item.Routing.InputItemCreateDto.ValueTypeUnits. Omitted or null on a new line means no fixed quantity. Where this\nbody updates an existing line, omit it to leave the fixed quantity unchanged; null clears it.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "An input item for routing"
      },
      "ItemRoutingInputItemDto": {
        "required": [
          "description",
          "id",
          "itemId",
          "number",
          "valueType",
          "valueTypeUnits"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of this input item in the item's routing"
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item Id",
            "readOnly": true
          },
          "number": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The number to give the item.",
            "readOnly": true
          },
          "revision": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The revision of the item",
            "readOnly": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The description to give the item.",
            "readOnly": true
          },
          "valueTypeUnits": {
            "minimum": 0,
            "type": "number",
            "description": "Measurement unit depending on FulcrumProduct.PublicApi.Dto.Item.Routing.InputItemDto.ValueType",
            "format": "double"
          },
          "valueType": {
            "$ref": "#/components/schemas/CommonEnumInputItemValueTypeEnum"
          },
          "fixedUnits": {
            "type": "number",
            "description": "Quantity required per lot, regardless of the parent quantity being made, in addition to\nFulcrumProduct.PublicApi.Dto.Item.Routing.InputItemDto.ValueTypeUnits. Null when the line has no fixed quantity.",
            "format": "double",
            "nullable": true
          },
          "routingStepId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of the routing operation (step) this input item is attached to, or null when it is not\nattached to a specific operation. Corresponds to the Id from the routing's operations list\n(e.g. jobs/{jobId}/routing/{routingId}/operations/list or items/{itemId}/routing/operations/list).",
            "nullable": true
          },
          "isMaterialLine": {
            "type": "boolean",
            "description": "True when this line is tied to an input material (created by a material selection).\nMaterial-tied lines must be included in every input-items replace — they cannot be\nremoved through that endpoint."
          }
        },
        "additionalProperties": false,
        "description": "An item"
      },
      "ItemRoutingInputItemUpdateDto": {
        "type": "object",
        "properties": {
          "valueTypeUnits": {
            "minimum": 0,
            "type": "number",
            "description": "Measurement unit depending on FulcrumProduct.PublicApi.Dto.Item.Routing.InputItemUpdateDto.ValueType",
            "format": "double",
            "nullable": true
          },
          "valueType": {
            "$ref": "#/components/schemas/CommonEnumInputItemValueTypeEnum"
          },
          "fixedUnits": {
            "minimum": 0,
            "type": "number",
            "description": "Quantity required per lot, regardless of the parent quantity being made, in addition to\nFulcrumProduct.PublicApi.Dto.Item.Routing.InputItemUpdateDto.ValueTypeUnits. Omit to leave the line's fixed quantity unchanged; null clears it.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "An input item for routing"
      },
      "ItemRoutingInputMaterialCreateDto": {
        "required": [
          "costing",
          "materialId"
        ],
        "type": "object",
        "properties": {
          "materialId": {
            "minLength": 1,
            "type": "string",
            "description": "The material id to be added. Please reference /api/materials endpoint."
          },
          "costing": {
            "$ref": "#/components/schemas/CommonEnumMaterialRequirementCostingEnum"
          },
          "nestings": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemRoutingInputMaterialNestingCreateDto"
            },
            "description": "Nestings associated to this material indicating bounding box dimensions and production quantities.\nThe estimated material cost is taken from one nesting (see `useForEstimatedCosting`); with no nesting, the material costs zero.",
            "nullable": true
          },
          "routingStepId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The routing step id.\nThis value should be the Id of an operation on the routing being edited, as returned by that routing's operations list\n(for example items/{itemId}/routing/operations/list, or the sales-order part line item routing's operations/list).",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Create an input material for routing"
      },
      "ItemRoutingInputMaterialDto": {
        "required": [
          "costing",
          "id",
          "materialId",
          "materialName"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of this input material in the item's routing",
            "format": "uuid"
          },
          "materialId": {
            "minLength": 1,
            "type": "string",
            "description": "The material id. Please reference /api/materials endpoint."
          },
          "materialName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The material name."
          },
          "materialShape": {
            "$ref": "#/components/schemas/MaterialShapeDto"
          },
          "costing": {
            "$ref": "#/components/schemas/CommonEnumMaterialRequirementCostingEnum"
          },
          "nestings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemRoutingInputMaterialNestingDto"
            },
            "description": "Nestings associated to this material indicating bounding box dimensions and production quantities."
          },
          "routingStepId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The routing step id.\nThis value should be the Id from the response from items/{itemId}/routing/operations/list",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "An item input material"
      },
      "ItemRoutingInputMaterialNestingCreateDto": {
        "required": [
          "d2",
          "d3",
          "produces"
        ],
        "type": "object",
        "properties": {
          "d2": {
            "type": "number",
            "description": "Length of the nest's bounding box, in the material's `dimensionUnits`.",
            "format": "double"
          },
          "d3": {
            "type": "number",
            "description": "Width of the nest's bounding box, in the material's `dimensionUnits`. Still required (greater than zero) for a `Linear` material, but not used to cost it.",
            "format": "double"
          },
          "produces": {
            "type": "integer",
            "description": "The quantity produced, given the bounding box dimensions (D2 x D3).\nEach part is costed at the material weight of the bounding box (D2 x D3 for `Planar`, D2 for `Linear`) divided by this quantity.",
            "format": "int32"
          },
          "useForEstimatedCosting": {
            "type": "boolean",
            "description": "Indicates if this nesting record will be used for estimated costing.\nA nesting generated by applying a nest to a quote takes precedence over this flag.\nWhen neither applies, the nesting with the largest `produces` not exceeding the quantity being costed is used,\nor the smallest `produces` when every nesting exceeds it.\nNOTE: Only one nesting record for a material can have this value set to true."
          }
        },
        "additionalProperties": false,
        "description": "An input material nesting for routing"
      },
      "ItemRoutingInputMaterialNestingDto": {
        "required": [
          "d2",
          "d3",
          "id",
          "produces"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of this input material's nesting in the item's routing material",
            "format": "uuid"
          },
          "d2": {
            "type": "number",
            "description": "Length of the nest's bounding box, in the material's `dimensionUnits`.",
            "format": "double"
          },
          "d3": {
            "type": "number",
            "description": "Width of the nest's bounding box, in the material's `dimensionUnits`. Still required (greater than zero) for a `Linear` material, but not used to cost it.",
            "format": "double"
          },
          "produces": {
            "type": "integer",
            "description": "The quantity produced, given the bounding box dimensions (D2 x D3).\nEach part is costed at the material weight of the bounding box (D2 x D3 for `Planar`, D2 for `Linear`) divided by this quantity.",
            "format": "int32"
          },
          "useForEstimatedCosting": {
            "type": "boolean",
            "description": "Indicates if this nesting record will be used for estimated costing.\nA nesting generated by applying a nest to a quote takes precedence over this flag.\nWhen neither applies, the nesting with the largest `produces` not exceeding the quantity being costed is used,\nor the smallest `produces` when every nesting exceeds it.\nNOTE: Only one nesting record for a material can have this value set to true."
          }
        },
        "additionalProperties": false,
        "description": "Create an input material nesting for routing"
      },
      "ItemRoutingInputMaterialUpdateDto": {
        "required": [
          "costing"
        ],
        "type": "object",
        "properties": {
          "costing": {
            "$ref": "#/components/schemas/CommonEnumMaterialRequirementCostingEnum"
          },
          "routingStepId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The routing step id.\nThis value should be the Id of an operation on the routing being edited, as returned by that routing's operations list\n(for example items/{itemId}/routing/operations/list, or the sales-order part line item routing's operations/list).",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Update an input material for routing"
      },
      "ItemRoutingIptCreateDto": {
        "required": [
          "fieldTypeId",
          "label"
        ],
        "type": "object",
        "properties": {
          "label": {
            "minLength": 1,
            "type": "string",
            "description": "Label describing the in process tracking field"
          },
          "description": {
            "type": "string",
            "description": "The description of the in process tracking field",
            "nullable": true
          },
          "units": {
            "type": "string",
            "description": "The units used when this in process tracking field represents a number",
            "nullable": true
          },
          "fieldTypeId": {
            "minLength": 1,
            "type": "string",
            "description": "The id of the field type for this in process tracking field"
          },
          "targetValue": {
            "type": "number",
            "description": "The target or ideal value of an in process tracking field response",
            "format": "double",
            "nullable": true
          },
          "minimumValue": {
            "type": "number",
            "description": "The minimum acceptable value for a tracking field response",
            "format": "double",
            "nullable": true
          },
          "maximumValue": {
            "type": "number",
            "description": "The maximum acceptable value for a tracking field response",
            "format": "double",
            "nullable": true
          },
          "triggeringBooleanValue": {
            "type": "boolean",
            "description": "The target value for booleans. Typically Yes/No for proceeding with next checkpoint",
            "nullable": true
          },
          "triggeringDropdownValue": {
            "type": "string",
            "description": "The target value for multiple options",
            "nullable": true
          },
          "required": {
            "type": "boolean",
            "description": "Whether the in process tracking field requires a response"
          },
          "restricted": {
            "type": "boolean",
            "description": "If true, only users with the appropriate permission will be allowed to save a response."
          },
          "firstArticle": {
            "type": "boolean",
            "description": "Only applies to the During phase.  If true (and Required), this field will prevent adding any\ncompleted items to inventory if target is not met."
          },
          "onFair": {
            "type": "boolean",
            "description": "If true, this field's measurements are reported on the First Article Inspection Report (FAIR).\nDoes not affect sampling frequency."
          }
        },
        "additionalProperties": false,
        "description": "An in process tracking field for a routing step"
      },
      "ItemRoutingIptDto": {
        "required": [
          "fieldTypeId",
          "id",
          "label"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id of the in process tracking field",
            "format": "uuid"
          },
          "label": {
            "minLength": 1,
            "type": "string",
            "description": "Label describing the in process tracking field"
          },
          "units": {
            "type": "string",
            "description": "The units used when this in process tracking field represents a number",
            "nullable": true
          },
          "fieldTypeId": {
            "minLength": 1,
            "type": "string",
            "description": "The id of the field type for this in process tracking field"
          },
          "targetValue": {
            "type": "number",
            "description": "The target or ideal value of an in process tracking field response",
            "format": "double",
            "nullable": true
          },
          "minimumValue": {
            "type": "number",
            "description": "The minimum acceptable value for a tracking field response",
            "format": "double",
            "nullable": true
          },
          "maximumValue": {
            "type": "number",
            "description": "The maximum acceptable value for a tracking field response",
            "format": "double",
            "nullable": true
          },
          "triggeringBooleanValue": {
            "type": "boolean",
            "description": "The target value for booleans. Typically Yes/No for proceeding with next checkpoint",
            "nullable": true
          },
          "triggeringDropdownValue": {
            "type": "string",
            "description": "The target value for multiple options",
            "nullable": true
          },
          "required": {
            "type": "boolean",
            "description": "Whether the in process tracking field requires a response"
          },
          "restricted": {
            "type": "boolean",
            "description": "If true, only users with the appropriate permission will be allowed to save a response."
          },
          "firstArticle": {
            "type": "boolean",
            "description": "Only applies to the During phase.  If true (and Required), this field will prevent adding any\ncompleted items to inventory if target is not met."
          },
          "onFair": {
            "type": "boolean",
            "description": "If true, this field's measurements are reported on the First Article Inspection Report (FAIR).\nDoes not affect sampling frequency."
          }
        },
        "additionalProperties": false,
        "description": "An in process tracking field for a routing step"
      },
      "ItemRoutingNormalOperationDto": {
        "type": "object",
        "properties": {
          "setupTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "laborTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "machineTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "anyEquipment": {
            "type": "boolean",
            "description": "Specifies that any equipment associated with this operation can be used"
          },
          "selectedEquipmentIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of equipment ids selected from equipment associated with this operation"
          },
          "isNestable": {
            "type": "boolean",
            "description": "Indicate if this operation is nestable."
          }
        },
        "additionalProperties": false,
        "description": "Defines non-outside-processing fields"
      },
      "ItemRoutingOperationCreateDto": {
        "required": [
          "systemOperationId"
        ],
        "type": "object",
        "properties": {
          "systemOperationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "System Operation Id"
          },
          "order": {
            "minimum": 0,
            "type": "integer",
            "description": "The order of this operation.  Operations with the same order are expected to run in parallel",
            "format": "int32",
            "nullable": true
          },
          "outsideProcessingOperation": {
            "$ref": "#/components/schemas/ItemRoutingOutsideProcessingOperationDto"
          },
          "operation": {
            "$ref": "#/components/schemas/ItemRoutingNormalOperationDto"
          },
          "leadDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead days. Will default to zero if not provided.",
            "format": "int32",
            "nullable": true
          },
          "unattended": {
            "type": "boolean",
            "description": "If `true`, the run portion of this step is unattended by\nan operator.",
            "nullable": true
          },
          "instructions": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Operation instructions. Will default to the instructions defined on the operation when not provided.",
            "nullable": true
          },
          "inputMaterialIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The ids on the input material to associate to this operation.\nThis value should be the Id from the response from items/{itemId}/routing/input-materials/list",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A routing operation (step)"
      },
      "ItemRoutingOperationDto": {
        "required": [
          "id",
          "name",
          "systemOperationId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The Id of this operation specific to this item's routing"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the system operation"
          },
          "systemOperationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the system operation"
          },
          "order": {
            "minimum": 0,
            "type": "integer",
            "description": "The order of this operation.  Operations with the same order are expected to run in parallel",
            "format": "int32"
          },
          "isOutsideProcessing": {
            "type": "boolean",
            "description": "Specifies whether this is an outside processing operation"
          },
          "outsideProcessingOperation": {
            "$ref": "#/components/schemas/ItemRoutingOutsideProcessingOperationDto"
          },
          "operation": {
            "$ref": "#/components/schemas/ItemRoutingNormalOperationDto"
          },
          "leadDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead days",
            "format": "int32"
          },
          "unattended": {
            "type": "boolean",
            "description": "If `true`, the run portion of this step is unattended by\nan operator.",
            "nullable": true
          },
          "machineTrackingEnabled": {
            "type": "boolean",
            "description": "Whether machine tracking is enabled."
          },
          "instructions": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Instructions for this operation.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A routing operation (step)"
      },
      "ItemRoutingOperationTime": {
        "type": "object",
        "properties": {
          "time": {
            "type": "number",
            "description": "Time or units of this operation",
            "format": "double"
          },
          "option": {
            "$ref": "#/components/schemas/ItemRoutingOperationTimeOption"
          }
        },
        "additionalProperties": false,
        "description": "Operation time and type"
      },
      "ItemRoutingOperationTimeOption": {
        "enum": [
          "fixedSeconds",
          "fixedMinutes",
          "fixedHours",
          "fixedDays",
          "secondsPerUnit",
          "minutesPerUnit",
          "hoursPerUnit",
          "daysPerUnit",
          "unitsPerHour"
        ],
        "type": "string",
        "description": "The time unit or option used in operation times"
      },
      "ItemRoutingOperationUpdateDto": {
        "type": "object",
        "properties": {
          "order": {
            "minimum": 0,
            "type": "integer",
            "description": "The order of this operation.  Operations with the same order are expected to run in parallel",
            "format": "int32",
            "nullable": true
          },
          "outsideProcessingOperation": {
            "$ref": "#/components/schemas/ItemRoutingOutsideProcessingOperationDto"
          },
          "operation": {
            "$ref": "#/components/schemas/ItemRoutingNormalOperationDto"
          },
          "leadDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead days. Will default to zero if not provided.",
            "format": "int32",
            "nullable": true
          },
          "unattended": {
            "type": "boolean",
            "description": "If `true`, the run portion of this step is unattended by\nan operator.",
            "nullable": true
          },
          "instructions": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Instructions for this operation.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A routing operation (step)"
      },
      "ItemRoutingOutsideProcessingCostOption": {
        "enum": [
          "fixed",
          "perUnit"
        ],
        "type": "string",
        "description": "The cost option for the outside processing operation"
      },
      "ItemRoutingOutsideProcessingOperationCost": {
        "type": "object",
        "properties": {
          "costOption": {
            "$ref": "#/components/schemas/ItemRoutingOutsideProcessingCostOption"
          },
          "fixedCost": {
            "type": "number",
            "description": "The fixed total cost for the operation",
            "format": "double",
            "nullable": true
          },
          "perUnitCost": {
            "type": "number",
            "description": "The cost per unit for the operation",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Outside processing operation cost"
      },
      "ItemRoutingOutsideProcessingOperationDto": {
        "type": "object",
        "properties": {
          "outsideProcessingTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "outsideProcessingCost": {
            "$ref": "#/components/schemas/ItemRoutingOutsideProcessingOperationCost"
          },
          "selectedVendorId": {
            "type": "string",
            "description": "Outside processing vendor",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Defines outside processing fields"
      },
      "ItemRoutingUpdateDto": {
        "type": "object",
        "properties": {
          "allowContinuousFlow": {
            "type": "boolean",
            "description": "Allow an operation to start before previous operations in the routing end",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents updates to an item's routing"
      },
      "ItemShippingDto": {
        "type": "object",
        "properties": {
          "class": {
            "type": "string",
            "description": "The item shipping class",
            "nullable": true
          },
          "nmfc": {
            "type": "string",
            "description": "The National Motor Freight Classification",
            "nullable": true
          },
          "isHazmat": {
            "type": "boolean",
            "description": "Whether the item is hazardous to ship"
          },
          "unitWeight": {
            "type": "number",
            "description": "The unit weight in lbs.",
            "format": "double",
            "nullable": true
          },
          "tariffCode": {
            "type": "string",
            "description": "The item tariff code",
            "nullable": true
          },
          "countryOfOrigin": {
            "type": "string",
            "description": "The country of origin",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Item Shipping Properties"
      },
      "ItemTagReplaceItemTagsDto": {
        "required": [
          "tagIds"
        ],
        "type": "object",
        "properties": {
          "tagIds": {
            "type": "array",
            "items": {
              "maxLength": 24,
              "minLength": 24,
              "type": "string"
            },
            "description": "The complete desired set of tag identifiers for the item. Please reference the /api/item-tags/list endpoint.\nDuplicate ids are ignored. An empty set clears all tags from the item. At most\nFulcrumProduct.PublicApi.Dto.Item.Tag.ReplaceItemTagsDtoValidator.MAX_TAG_COUNT ids may be provided."
          }
        },
        "additionalProperties": false,
        "description": "The full set of tags that should be associated to an item. Any tag currently on the item that is\nnot present in FulcrumProduct.PublicApi.Dto.Item.Tag.ReplaceItemTagsDto.TagIds will be removed; any new id will be added."
      },
      "ItemToMakeOperationDto": {
        "required": [
          "id",
          "isOutsideProcessing",
          "order",
          "status",
          "systemOperationId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique Id associated to this entity"
          },
          "status": {
            "$ref": "#/components/schemas/JobItemToMakeOpStatusEnum"
          },
          "order": {
            "minimum": 0,
            "type": "integer",
            "description": "Routing order of the operation",
            "format": "int32"
          },
          "systemOperationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the system operation associated to this entity\nPlease reference api/operations."
          },
          "isOutsideProcessing": {
            "type": "boolean",
            "description": "Denotes whether this is an outside processing operation"
          },
          "originalScheduledStartUtc": {
            "type": "string",
            "description": "The first scheduled start time.",
            "format": "date-time",
            "nullable": true
          },
          "originalScheduledEndUtc": {
            "type": "string",
            "description": "The first scheduled end time.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledStartUtc": {
            "type": "string",
            "description": "Scheduled start datetime of the operation",
            "format": "date-time",
            "nullable": true
          },
          "scheduledEndUtc": {
            "type": "string",
            "description": "Scheduled end datetime of the operation",
            "format": "date-time",
            "nullable": true
          },
          "completedOnUtc": {
            "type": "string",
            "description": "The operation completion datetime.",
            "format": "date-time",
            "nullable": true
          },
          "completedById": {
            "type": "string",
            "description": "Operation completed user identifier. Please reference /api/users endpoint.",
            "nullable": true
          },
          "scheduledEquipmentId": {
            "type": "string",
            "description": "Identifier of the equipment that this operation is scheduled to run on",
            "nullable": true
          },
          "scheduledEquipmentName": {
            "type": "string",
            "description": "The name of the equipment that this operation is scheduled to run on.",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "The custom field data on the object",
            "nullable": true
          },
          "instructions": {
            "type": "string",
            "description": "Instructions specific to the item to make operation.",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "System operation name.",
            "nullable": true
          },
          "leadTimeInDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Number of days required between order and receipt. Only applicable for outside processing operations.",
            "format": "int32",
            "nullable": true
          },
          "associatedPurchaseOrderIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Associated purchase order IDs.",
            "nullable": true
          },
          "estimatedSetupTimeInSeconds": {
            "type": "number",
            "description": "The estimated setup time in seconds for the operation.",
            "format": "double",
            "nullable": true
          },
          "estimatedSetupTimeBasis": {
            "$ref": "#/components/schemas/DomainOperationsRouting_Step_SetupTimeOption"
          },
          "estimatedRunTimeInSeconds": {
            "type": "number",
            "description": "The estimated run time in seconds for the operation.\nNote: This is an obsolete field from when operation could not separate between machine (unattended) and labor (attended) time.",
            "format": "double",
            "nullable": true
          },
          "estimatedRunTimeBasis": {
            "$ref": "#/components/schemas/DomainOperationsRouting_Step_RunTimeOption"
          },
          "estimatedMachineTimeInSeconds": {
            "type": "number",
            "description": "The estimated machine time in seconds for the operation.",
            "format": "double",
            "nullable": true
          },
          "estimatedMachineTimeBasis": {
            "$ref": "#/components/schemas/DomainOperationsRouting_Step_RunTimeOption"
          },
          "estimatedLaborTimeInSeconds": {
            "type": "number",
            "description": "The estimated labor time in seconds for the operation.",
            "format": "double",
            "nullable": true
          },
          "estimatedLaborTimeBasis": {
            "$ref": "#/components/schemas/DomainOperationsRouting_Step_RunTimeOption"
          },
          "isMachineTimeOnly": {
            "type": "boolean",
            "description": "Whether this operation can be run without an employee present.  If true, use the machineTime properties.  If false,\nuse the laborTime properties."
          },
          "workOrderId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of work order that this operation is associated to, if applicable.\nPlease reference api/work-orders endpoint.",
            "nullable": true
          },
          "quantityToMake": {
            "type": "number",
            "description": "Quantity this operation is expected to produce.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "format": "double",
            "readOnly": true
          },
          "quantityCompleted": {
            "type": "number",
            "description": "Quantity already completed on this operation, if the job is in progress.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "format": "double",
            "readOnly": true
          },
          "quantityMade": {
            "type": "number",
            "description": "Quantity recorded as made on this operation: stamped when the operation completes, and banked through\nreceiving on an outside-processing operation. Unlike FulcrumProduct.PublicApi.Dto.Job.ItemToMake.Operation.OperationDto.QuantityCompleted, it does not include\nthe running count banked while the operation is in progress.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "format": "double",
            "readOnly": true
          },
          "excludeSetupTimeFromAudit": {
            "type": "boolean",
            "description": "Whether this operation's setup time is left out of the routing audit's job-history averages.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "readOnly": true
          },
          "excludeLaborTimeFromAudit": {
            "type": "boolean",
            "description": "Whether this operation's labor time is left out of the routing audit's job-history averages.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "readOnly": true
          },
          "excludeMachineTimeFromAudit": {
            "type": "boolean",
            "description": "Whether this operation's machine time is left out of the routing audit's job-history averages.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an routing operation on a job item to make"
      },
      "ItemToMakeOperationItemRequiredDto": {
        "required": [
          "itemId",
          "itemNumber"
        ],
        "type": "object",
        "properties": {
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the required item.\nPlease reference /api/items endpoint."
          },
          "itemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Item number of the required item"
          },
          "revision": {
            "type": "string",
            "description": "Revision of the required item",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a required input item for a job operation"
      },
      "ItemToMakeOperationMaterialRequiredDto": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Identifier of the material shape.\nPlease reference /api/material-shapes endpoint."
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Name of the material shape required"
          }
        },
        "additionalProperties": false,
        "description": "Represents a required input material for a job operation"
      },
      "ItemToMakeOperationUpdateDto": {
        "type": "object",
        "properties": {
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "The custom fields to update on the operation object",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an routing operation on a job item to make"
      },
      "ItemUpdateDto": {
        "type": "object",
        "properties": {
          "number": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item number. If omitted, the current number is kept. Renaming enforces number\nuniqueness (400 on collision) and updates every reference to the item — BOM inputs,\nusage, purchase orders, and the system lot. Uniqueness is scoped to number + revision:\nwhen renaming an item with multiple revisions, rename every revision of the family or\nthe revisions will split under different numbers.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Item description.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "accountingCode2Id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "materialCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item material code key identifier. Please reference /api/material-codes endpoint.",
            "nullable": true
          },
          "gradeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item grade code key identifier. Please reference /api/grade-codes endpoint.",
            "nullable": true
          },
          "shapeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item shape code key identifier. Please reference /api/shape-codes endpoint.",
            "nullable": true
          },
          "gaugeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item gauge code key identifier. Please reference /api/gauge-codes endpoint.",
            "nullable": true
          },
          "categoryId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item category code key identifier. Please reference /api/item-categories endpoint.",
            "nullable": true
          },
          "width": {
            "minimum": 0,
            "type": "number",
            "description": "Item width",
            "format": "double",
            "nullable": true
          },
          "height": {
            "minimum": 0,
            "type": "number",
            "description": "Item height",
            "format": "double",
            "nullable": true
          },
          "length": {
            "minimum": 0,
            "type": "number",
            "description": "Item length",
            "format": "double",
            "nullable": true
          },
          "weight": {
            "minimum": 0,
            "type": "number",
            "description": "Item weight",
            "format": "double",
            "nullable": true
          },
          "minimumStockOnHand": {
            "minimum": 0,
            "type": "number",
            "description": "Item minimum stock on hand.",
            "format": "double",
            "nullable": true
          },
          "minimumProductionQuantity": {
            "minimum": 0,
            "type": "number",
            "description": "Item minimum production quantity for a manufacturing run.",
            "format": "double",
            "nullable": true
          },
          "internalNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Internal item notes.",
            "nullable": true
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "The item's stocking unit of measure — the unit every inventory quantity, cost, and\ntransaction on the item is expressed in. If omitted — or sent as null, or as a string that is\nempty or only whitespace — the current unit of measure is kept; there is no way to clear it.\nThe unit must belong to the item's existing unit type (a Pieces item accepts Piece, Set or\nCase); the unit type itself cannot be changed after the item is created. Changing the unit\nis rejected while anything already carries a unit that the change would invalidate — the item\nbeing in use by a quote, sales order, purchase order, job, invoice or another item's routing,\nholding inventory on hand, or having a price break that carries a price (item, vendor, customer, or customer-tier)\n— because none of those is converted when the unit changes. The 400 names which one blocked the\nchange. Each condition is read as the item stands before the update, so clearing a blocker and\nchanging the unit in one request is still rejected — clear it first, then change the unit in a\nsecond request. Sales unit of measure conversions are the exception: they are replaced wholesale\nby every update, so changing the unit while sending none is accepted, and a request that changes\nthe unit while conversions are present — sent on the update, or carried forward from the item by\na patch — is rejected. An item with no unit type recorded cannot have its unit changed at all.\nSurrounding whitespace is trimmed; the remainder is matched case-sensitively, as on item create.",
            "nullable": true
          },
          "salesUnitOfMeasureConversions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonUnitOfMeasureConversionDto"
            },
            "description": "Unit of measure conversions for sellable items.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Whether or not this item is taxable (default)",
            "nullable": true
          },
          "isLotTracked": {
            "type": "boolean",
            "description": "Whether this item is lot-tracked. If omitted, the current setting is kept.",
            "nullable": true
          },
          "isNonInventory": {
            "type": "boolean",
            "description": "Whether this item is a non-inventory item — one that supports the business but is never\nheld in inventory. Turning it on is rejected with a 400 unless the item is a buy item that is\nnot sellable; an item that is already non-inventory can restate that value, so a read-modify-write\nupdate of a legacy item does not start failing. Setting this also keeps the item's\ninventoried state in step: a non-inventory item is never inventoried. If omitted, the\ncurrent setting is kept.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an update on an Item."
      },
      "ItemVendorCreateDto": {
        "required": [
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor id associated to this entity. Please reference /api/vendors endpoint."
          },
          "vendorItemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item number for this vendor.",
            "nullable": true
          },
          "vendorItemName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item name for this vendor.",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The price of this item for this vendor.",
            "format": "double",
            "nullable": true
          },
          "isPrimary": {
            "type": "boolean",
            "description": "Signifies if this is the primary vendor for this item."
          },
          "leadTimeInDays": {
            "type": "integer",
            "description": "Lead time for this vendor.",
            "format": "int32",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes on this association.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Vendor with additional context for an item."
      },
      "ItemVendorDto": {
        "required": [
          "id",
          "priceBreaks",
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id"
          },
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor id associated to this entity. Please reference /api/vendors endpoint."
          },
          "vendorItemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item number for this vendor.",
            "nullable": true
          },
          "vendorItemName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item name for this vendor.",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The price of this item for this vendor.",
            "format": "double",
            "nullable": true
          },
          "isPrimary": {
            "type": "boolean",
            "description": "Signifies if this is the primary vendor for this item."
          },
          "leadTimeInDays": {
            "type": "integer",
            "description": "Lead time for this vendor.",
            "format": "int32",
            "nullable": true
          },
          "unitOfMeasureName": {
            "minLength": 1,
            "type": "string",
            "description": "The unit of measure name. This can be standard unit measurement names (Piece, Square foot, etc) or a custom measurement name.",
            "nullable": true
          },
          "unitQuantity": {
            "type": "number",
            "description": "The vendor unit quantity for conversions. Ex: a FulcrumProduct.PublicApi.Dto.Item.Vendor.ItemVendorDto.UnitQuantity of 5 would indicate that 5 FulcrumProduct.PublicApi.Dto.Item.Vendor.ItemVendorDto.UnitOfMeasureName of this item for this vendor are equal to FulcrumProduct.PublicApi.Dto.Item.Vendor.ItemVendorDto.InventoryUnitQuantity in the base inventory unit of measure.",
            "format": "double",
            "nullable": true
          },
          "inventoryUnitQuantity": {
            "type": "number",
            "description": "The inventory unit quantity for conversions. Ex: an FulcrumProduct.PublicApi.Dto.Item.Vendor.ItemVendorDto.InventoryUnitQuantity of 5 would indicate that 5 inventory units (Pieces, Foot, etc) of this item are equal to FulcrumProduct.PublicApi.Dto.Item.Vendor.ItemVendorDto.UnitQuantity units in FulcrumProduct.PublicApi.Dto.Item.Vendor.ItemVendorDto.UnitOfMeasureName for this vendor.",
            "format": "double",
            "nullable": true
          },
          "priceBreaks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonPriceBreakDto"
            },
            "description": "Price breaks."
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes on this association.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Vendor with additional context for an item."
      },
      "ItemVendorUpdateDto": {
        "type": "object",
        "properties": {
          "vendorItemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item number for this vendor.",
            "nullable": true
          },
          "vendorItemName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The item name for this vendor.",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The price of this item for this vendor.",
            "format": "double",
            "nullable": true
          },
          "isPrimary": {
            "type": "boolean",
            "description": "Signifies if this is the primary vendor for this item."
          },
          "leadTimeInDays": {
            "type": "integer",
            "description": "Lead time for this vendor.",
            "format": "int32",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes on this association.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Vendor with additional context for an item."
      },
      "ItemsAndInventoryDataQualityPlanStatus": {
        "enum": [
          "needsApproval",
          "approved"
        ],
        "type": "string"
      },
      "ItemsAndInventoryRoutingsCostBreakdownType": {
        "enum": [
          "estimated",
          "inProgressJob",
          "completedJob",
          "cancelledJob"
        ],
        "type": "string"
      },
      "ItemsToMakeOperationsAddQuantityCompletedRequest": {
        "required": [
          "additionalQuantity"
        ],
        "type": "object",
        "properties": {
          "additionalQuantity": {
            "type": "number",
            "description": "The additional quantity to add to the operation's completed quantity.\nMust be greater than zero.",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Request to add additional quantity completed to a job operation"
      },
      "ItemsToMakeOperationsAddQuantityCompletedResponse": {
        "required": [
          "additionalQuantityAdded",
          "itemToMakeId",
          "jobId",
          "newTotalQuantityCompleted",
          "operationId",
          "operationStatus",
          "previousQuantityCompleted",
          "quantityRequired"
        ],
        "type": "object",
        "properties": {
          "jobId": {
            "minLength": 1,
            "type": "string",
            "description": "The ID of the job"
          },
          "itemToMakeId": {
            "minLength": 1,
            "type": "string",
            "description": "The ID of the item to make"
          },
          "operationId": {
            "minLength": 1,
            "type": "string",
            "description": "The ID of the operation"
          },
          "previousQuantityCompleted": {
            "type": "number",
            "description": "The quantity completed before this action",
            "format": "double"
          },
          "additionalQuantityAdded": {
            "type": "number",
            "description": "The quantity added in this action",
            "format": "double"
          },
          "newTotalQuantityCompleted": {
            "type": "number",
            "description": "The new total quantity completed after this action",
            "format": "double"
          },
          "quantityRequired": {
            "type": "number",
            "description": "The total quantity required for this operation",
            "format": "double"
          },
          "operationStatus": {
            "minLength": 1,
            "type": "string",
            "description": "The current status of the operation"
          }
        },
        "additionalProperties": false,
        "description": "Response after adding additional quantity completed to a job operation"
      },
      "ItemsToMakeOperationsCompleteJobOperationRequest": {
        "type": "object",
        "properties": {
          "quantityMade": {
            "minimum": 0,
            "type": "number",
            "description": "Additional quantity completed as part of this completion, added on top of any quantity\nalready recorded on the operation. May be zero when all quantity was recorded earlier\n(for example via add-quantity-completed).",
            "format": "double"
          },
          "quantityScrapped": {
            "minimum": 0,
            "type": "number",
            "description": "Quantity scrapped on this operation.",
            "format": "double"
          },
          "scrapReasonId": {
            "type": "string",
            "description": "Id of the scrap reason to record with the scrapped quantity. Optional.",
            "nullable": true
          },
          "locationId": {
            "type": "string",
            "description": "Id of the inventory location to receive finished goods into when this completion finishes\nthe item (last operation). Optional; when omitted the shop's default location is used.",
            "nullable": true
          },
          "lotNumber": {
            "type": "string",
            "description": "Lot number for finished goods when the item is lot tracked. Required when this completion\nfinishes a lot-tracked item and inventory will be created; when omitted in that case for a\ncompletion that adds quantity, a lot number is generated.",
            "nullable": true
          },
          "expirationDate": {
            "type": "string",
            "description": "Expiration date for the finished-goods lot. Optional.",
            "format": "date-time",
            "nullable": true
          },
          "addItemsToInventory": {
            "type": "boolean",
            "description": "Whether finished goods are added to inventory when this completion finishes the item.\nDefaults to true."
          }
        },
        "additionalProperties": false,
        "description": "Request to complete a job operation"
      },
      "ItemsToMakeOperationsCompleteJobOperationResponse": {
        "required": [
          "inventoryUpdated",
          "itemToMakeId",
          "jobId",
          "operationId",
          "operationStatus",
          "quantityMadeThisCompletion",
          "quantityScrapped",
          "totalQuantityCompleted"
        ],
        "type": "object",
        "properties": {
          "jobId": {
            "minLength": 1,
            "type": "string",
            "description": "The ID of the job"
          },
          "itemToMakeId": {
            "minLength": 1,
            "type": "string",
            "description": "The ID of the item to make"
          },
          "operationId": {
            "minLength": 1,
            "type": "string",
            "description": "The ID of the completed operation"
          },
          "quantityMadeThisCompletion": {
            "type": "number",
            "description": "The quantity added by this completion",
            "format": "double"
          },
          "totalQuantityCompleted": {
            "type": "number",
            "description": "The operation's total completed quantity after this completion",
            "format": "double"
          },
          "quantityScrapped": {
            "type": "number",
            "description": "The quantity scrapped recorded by this completion",
            "format": "double"
          },
          "operationStatus": {
            "minLength": 1,
            "type": "string",
            "description": "The operation's status after this action"
          },
          "inventoryUpdated": {
            "type": "boolean",
            "description": "Whether finished goods were added to inventory by this completion"
          },
          "createdInventoryTransactionId": {
            "type": "string",
            "description": "The ID of the inventory transaction created by this completion, when inventory was updated",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Response after completing a job operation"
      },
      "JobCreateDto": {
        "required": [
          "quantityToMake"
        ],
        "type": "object",
        "properties": {
          "nameOfJob": {
            "type": "string",
            "description": "Name of the job to create. If omitted, the default naming convention will be used",
            "nullable": true
          },
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the customer to be created",
            "nullable": true
          },
          "autoSchedule": {
            "type": "boolean",
            "description": "Auto Schedule job. Defaults to FALSE if omitted.",
            "nullable": true
          },
          "note": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Note to customer. This will appear on PDFs.",
            "nullable": true
          },
          "priority": {
            "$ref": "#/components/schemas/JobPriorityEnum"
          },
          "productionDueDate": {
            "type": "string",
            "description": "The date that the production of items on the job needs to be completed by.",
            "format": "date-time",
            "nullable": true
          },
          "earliestStartDate": {
            "type": "string",
            "description": "If set, this is the earliest date that the job should be scheduled to begin.",
            "format": "date-time",
            "nullable": true
          },
          "quantityToMake": {
            "type": "number",
            "description": "Quantity to make",
            "format": "double"
          },
          "salesOrderId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Sales Order Id the job is created for. If used, ItemToMakeId will be ignored.",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Sales Order Line Item Id the job is created for. If used, ItemToMakeId will be ignored.",
            "nullable": true
          },
          "salesOrderLineItemNameOverride": {
            "type": "string",
            "description": "Sales Order Line Item - Name Override",
            "nullable": true
          },
          "itemToMakeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the item to make. If SalesOrderId/SalesOrderLineItemId is set then ItemToMakeId will be ignored",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of job to be created"
      },
      "JobDto": {
        "required": [
          "id",
          "name",
          "number",
          "parentItemId",
          "priority",
          "quantityToMake",
          "status",
          "workOrderIds",
          "workOrders"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique Id associated to this entity"
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Job number",
            "format": "int32"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Job name, defaults to number unless otherwise specified."
          },
          "parentItemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique identifier of the parent item produced by this job.\nPlease reference api/items endpoint."
          },
          "quantityToMake": {
            "minimum": 0,
            "type": "number",
            "description": "Quantity of parent item produced by this job",
            "format": "double"
          },
          "productionDueDate": {
            "type": "string",
            "description": "Due date",
            "format": "date-time",
            "nullable": true
          },
          "earliestStartDate": {
            "type": "string",
            "description": "If set, this is the earliest date that the job should be scheduled to begin.",
            "format": "date-time",
            "nullable": true
          },
          "salesOrderId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of sales order fulfilled by this job, if applicable.\nPlease reference api/sales-orders endpoint.",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Identifier of sales order line item fulfilled by this job, if applicable.\nPlease reference endpoints nested under api/sales-orders.",
            "nullable": true
          },
          "createdUtc": {
            "type": "string",
            "description": "The date the job was created",
            "format": "date-time"
          },
          "originalScheduledStartUtc": {
            "type": "string",
            "description": "The first scheduled start time.",
            "format": "date-time",
            "nullable": true
          },
          "originalScheduledEndUtc": {
            "type": "string",
            "description": "The first scheduled end time.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledStartUtc": {
            "type": "string",
            "description": "The current scheduled start time.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledEndUtc": {
            "type": "string",
            "description": "The current scheduled end time.",
            "format": "date-time",
            "nullable": true
          },
          "completedOnUtc": {
            "type": "string",
            "description": "The job completion datetime.",
            "format": "date-time",
            "nullable": true
          },
          "cancelledOnUtc": {
            "type": "string",
            "description": "The job cancelled datetime.",
            "format": "date-time",
            "nullable": true
          },
          "revenue": {
            "type": "number",
            "description": "Revenue",
            "format": "double",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Job level internal notes",
            "nullable": true
          },
          "workOrderIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifier of work order(s) that this job is associated to, if applicable.\nPlease reference api/work-orders endpoint."
          },
          "workOrders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderReferenceDto"
            },
            "description": "Work order information, if applicable."
          },
          "status": {
            "$ref": "#/components/schemas/JobStatusEnum"
          },
          "priority": {
            "$ref": "#/components/schemas/JobPriorityEnum"
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a job"
      },
      "JobInProcessTrackingCheckpointDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Id of the checkpoint (the in process tracking field instance on the job's operation)."
          },
          "itemId": {
            "type": "string",
            "description": "Id of the item being made that this checkpoint belongs to.",
            "nullable": true
          },
          "itemName": {
            "type": "string",
            "description": "Name of the item being made.",
            "nullable": true
          },
          "itemDescription": {
            "type": "string",
            "description": "Description of the item being made.",
            "nullable": true
          },
          "equipmentName": {
            "type": "string",
            "description": "Name of the equipment scheduled for the operation.",
            "nullable": true
          },
          "operationName": {
            "type": "string",
            "description": "Name of the operation the checkpoint is recorded against.",
            "nullable": true
          },
          "operationOrder": {
            "type": "integer",
            "description": "Order of the operation within the job's routing.",
            "format": "int32"
          },
          "label": {
            "type": "string",
            "description": "Label describing the checkpoint.",
            "nullable": true
          },
          "units": {
            "type": "string",
            "description": "Units the numeric target and readings are expressed in.",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "Free text describing the checkpoint.",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/InProcessTrackingFieldDataType"
          },
          "targetValue": {
            "type": "number",
            "description": "The target or ideal numeric value, expressed in the checkpoint's drawing units\n(FulcrumProduct.PublicApi.Dto.Job.InProcessTracking.JobInProcessTrackingCheckpointDto.DrawingUnitOfMeasure).",
            "format": "double",
            "nullable": true
          },
          "targetValuePrecision": {
            "type": "integer",
            "description": "Number of decimal places the target is specified to.",
            "format": "int32",
            "nullable": true
          },
          "minimumValue": {
            "type": "number",
            "description": "The minimum acceptable numeric value, expressed in the checkpoint's drawing units\n(FulcrumProduct.PublicApi.Dto.Job.InProcessTracking.JobInProcessTrackingCheckpointDto.DrawingUnitOfMeasure).",
            "format": "double",
            "nullable": true
          },
          "maximumValue": {
            "type": "number",
            "description": "The maximum acceptable numeric value, expressed in the checkpoint's drawing units\n(FulcrumProduct.PublicApi.Dto.Job.InProcessTracking.JobInProcessTrackingCheckpointDto.DrawingUnitOfMeasure).",
            "format": "double",
            "nullable": true
          },
          "triggeringBooleanValue": {
            "type": "boolean",
            "description": "The passing value for a boolean checkpoint.",
            "nullable": true
          },
          "triggeringDropdownValue": {
            "type": "string",
            "description": "The passing value for a dropdown checkpoint.",
            "nullable": true
          },
          "checkpointOrder": {
            "type": "integer",
            "description": "The order of the checkpoint within the operation.",
            "format": "int32"
          },
          "phase": {
            "$ref": "#/components/schemas/InProcessTrackingFieldCheckpointPhase"
          },
          "firstArticle": {
            "type": "boolean",
            "description": "Only applies to the During phase. If true (and required), this checkpoint blocks adding\ncompleted items to inventory until its target is met."
          },
          "isGdt": {
            "type": "boolean",
            "description": "Whether the checkpoint is a GDT (geometric dimensioning and tolerancing) requirement."
          },
          "toleranceType": {
            "$ref": "#/components/schemas/GdtEnumToleranceType"
          },
          "controlType": {
            "$ref": "#/components/schemas/GdtEnumControlType"
          },
          "modifier": {
            "$ref": "#/components/schemas/GdtEnumModifierType"
          },
          "datums": {
            "type": "string",
            "description": "The datum references for a GDT checkpoint.",
            "nullable": true
          },
          "gdtCritical": {
            "type": "boolean",
            "description": "Whether the GDT checkpoint is marked critical.",
            "nullable": true
          },
          "bubbleNumber": {
            "type": "integer",
            "description": "Bubble (balloon) number annotating the checkpoint on the drawing.",
            "format": "int32",
            "nullable": true
          },
          "subBubbleNumber": {
            "type": "integer",
            "description": "Sub-bubble number annotating the checkpoint on the drawing.",
            "format": "int32",
            "nullable": true
          },
          "drawingPage": {
            "type": "integer",
            "description": "Page of the drawing the annotation is on.",
            "format": "int32",
            "nullable": true
          },
          "drawingName": {
            "type": "string",
            "description": "Name of the drawing the checkpoint is annotated on.",
            "nullable": true
          },
          "drawingLocation": {
            "type": "string",
            "description": "Location of the annotation on the drawing.",
            "nullable": true
          },
          "drawingUnitOfMeasure": {
            "$ref": "#/components/schemas/InProcessTrackingEnumQualityUnitOfMeasure"
          },
          "recordingUnitOfMeasure": {
            "$ref": "#/components/schemas/InProcessTrackingEnumQualityUnitOfMeasure"
          },
          "recordingTargetValue": {
            "type": "number",
            "description": "The target value converted into recording units (FulcrumProduct.PublicApi.Dto.Job.InProcessTracking.JobInProcessTrackingCheckpointDto.RecordingUnitOfMeasure), rounded to\nFulcrumProduct.PublicApi.Dto.Job.InProcessTracking.JobInProcessTrackingCheckpointDto.RecordingPrecision. Equal to FulcrumProduct.PublicApi.Dto.Job.InProcessTracking.JobInProcessTrackingCheckpointDto.TargetValue when drawing and recording units\nmatch; null for non-participating (angular/non-dimensional) checkpoints.",
            "format": "double",
            "nullable": true
          },
          "recordingMinimumValue": {
            "type": "number",
            "description": "The minimum acceptable value in recording units (FulcrumProduct.PublicApi.Dto.Job.InProcessTracking.JobInProcessTrackingCheckpointDto.RecordingUnitOfMeasure). Same\npopulation rule as FulcrumProduct.PublicApi.Dto.Job.InProcessTracking.JobInProcessTrackingCheckpointDto.RecordingTargetValue.",
            "format": "double",
            "nullable": true
          },
          "recordingMaximumValue": {
            "type": "number",
            "description": "The maximum acceptable value in recording units (FulcrumProduct.PublicApi.Dto.Job.InProcessTracking.JobInProcessTrackingCheckpointDto.RecordingUnitOfMeasure). Same\npopulation rule as FulcrumProduct.PublicApi.Dto.Job.InProcessTracking.JobInProcessTrackingCheckpointDto.RecordingTargetValue.",
            "format": "double",
            "nullable": true
          },
          "recordingPrecision": {
            "type": "integer",
            "description": "The number of decimal places the recording-unit requirement is expressed to. Same population rule as\nFulcrumProduct.PublicApi.Dto.Job.InProcessTracking.JobInProcessTrackingCheckpointDto.RecordingTargetValue.",
            "format": "int32",
            "nullable": true
          },
          "responses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobInProcessTrackingResponseDto"
            },
            "description": "Every recorded reading for this checkpoint."
          }
        },
        "additionalProperties": false,
        "description": "An in process tracking checkpoint on a job, together with every recorded operator reading for it."
      },
      "JobInProcessTrackingResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Stable identifier of the reading, unique within the job.",
            "format": "uuid"
          },
          "operator": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "recordedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "updatedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "numericValue": {
            "type": "number",
            "description": "The recorded value when the checkpoint is numeric, expressed in the checkpoint's recording units\n(`RecordingUnitOfMeasure`).",
            "format": "double",
            "nullable": true
          },
          "numericValuePrecision": {
            "type": "integer",
            "description": "The number of decimal places captured for FulcrumProduct.PublicApi.Dto.Job.InProcessTracking.InProcessTrackingResponseDto.NumericValue.",
            "format": "int32",
            "nullable": true
          },
          "booleanValue": {
            "type": "boolean",
            "description": "The recorded value when the checkpoint is a boolean.",
            "nullable": true
          },
          "stringValue": {
            "type": "string",
            "description": "The recorded value when the checkpoint is text or a dropdown selection.",
            "nullable": true
          },
          "intervalMarker": {
            "type": "integer",
            "description": "Sampling interval this reading belongs to, when the checkpoint uses interval sampling.",
            "format": "int32",
            "nullable": true
          },
          "multiplicityMarker": {
            "type": "integer",
            "description": "The reading's ordinal within its interval, when multiple readings are recorded per interval.",
            "format": "int32",
            "nullable": true
          },
          "measurementToolId": {
            "type": "string",
            "description": "Id of the measurement tool used to take the reading, if any.",
            "nullable": true
          },
          "measurementToolName": {
            "type": "string",
            "description": "Name of the measurement tool used to take the reading.",
            "nullable": true
          },
          "measurementToolSerialNumber": {
            "type": "string",
            "description": "Serial number of the measurement tool used to take the reading.",
            "nullable": true
          },
          "measurementToolType": {
            "$ref": "#/components/schemas/ToolType"
          },
          "measurementToolNextCalibrationUtc": {
            "type": "string",
            "description": "The measurement tool's current next-calibration date (live, not snapshotted at reading time).",
            "format": "date-time",
            "nullable": true
          },
          "createdOnUtc": {
            "type": "string",
            "description": "When the reading was first recorded.",
            "format": "date-time"
          },
          "updatedOnUtc": {
            "type": "string",
            "description": "When the reading was last edited, if ever.",
            "format": "date-time",
            "nullable": true
          },
          "bonusToleranceValue": {
            "type": "number",
            "description": "Bonus tolerance applied to a GDT reading, when the checkpoint allows it.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single recorded operator reading against an in process tracking checkpoint."
      },
      "JobItemToMakeCostBreakdownsDto": {
        "type": "object",
        "properties": {
          "costBreakdown": {
            "$ref": "#/components/schemas/CommonCostBreakdownDto"
          },
          "costBreakdownEstimated": {
            "$ref": "#/components/schemas/CommonCostBreakdownDto"
          }
        },
        "additionalProperties": false,
        "description": "Cost breakdowns for an item to make"
      },
      "JobItemToMakeDto": {
        "required": [
          "depth",
          "id",
          "isCustom",
          "itemId",
          "quantityToMake",
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique Id associated to this entity"
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the item on which this entity is based.\nPlease reference /api/items endpoint."
          },
          "quantityToMake": {
            "type": "number",
            "description": "Quantity of this item produced by the associated job.",
            "format": "double"
          },
          "isCustom": {
            "type": "boolean",
            "description": "Denotes whether this job produces a customized version of the base item"
          },
          "status": {
            "$ref": "#/components/schemas/JobItemToMakeStatusEnum"
          },
          "quantityMade": {
            "type": "number",
            "description": "Quantity already produced, if the job is in progress.",
            "format": "double",
            "nullable": true
          },
          "depth": {
            "type": "integer",
            "description": "Structurally, identify where in the tree of building the parent item this item lies.\nExample: The top-level item would have a depth of zero and it's direct subcomponents would be 1.\nThis cascades down so that a subcomponent to a subcomponent would be 2... and so on.",
            "format": "int32"
          },
          "routingNotes": {
            "type": "string",
            "description": "The routing notes (the \"Routing Notes\" field) captured on this job's routing for the item.\nNull when the job's routing has no note for the item.",
            "nullable": true
          },
          "costBreakdown": {
            "$ref": "#/components/schemas/CommonCostBreakdownDto"
          },
          "costBreakdownEstimated": {
            "$ref": "#/components/schemas/CommonCostBreakdownDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents an ItemToMake on a Job"
      },
      "JobItemToMakeOpStatusEnum": {
        "enum": [
          "pending",
          "ready",
          "running",
          "paused",
          "complete",
          "cancelled"
        ],
        "type": "string",
        "description": "Job Item to Make Operation status"
      },
      "JobItemToMakeOperationPickInventoryDto": {
        "required": [
          "itemId",
          "quantity"
        ],
        "type": "object",
        "properties": {
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The identifier of the item to be picked. Please reference api/items endpoint"
          },
          "quantity": {
            "type": "number",
            "description": "Quantity of the item to pick.",
            "format": "double"
          },
          "locationId": {
            "type": "string",
            "description": "ID of the location to pick from. If not set or set to an empty string, will\npick from inventory not assigned to a location. Cannot be set if FulcrumProduct.PublicApi.Dto.Job.ItemToMake.OperationPickInventoryDto.UseDefaultLocation\nis set to ```true```.",
            "nullable": true
          },
          "useDefaultLocation": {
            "type": "boolean",
            "description": "If set to true, inventory will be picked from the default location for the item. If set to true,\nFulcrumProduct.PublicApi.Dto.Job.ItemToMake.OperationPickInventoryDto.LocationId cannot be set.  If the item does not have a default location set and this\nis set to true, will pick from inventory not assigned to a location."
          },
          "lotId": {
            "type": "string",
            "description": "The ID of the lot to pick from.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Pick event for an input item"
      },
      "JobItemToMakeStatusEnum": {
        "enum": [
          "new",
          "working",
          "complete",
          "cancelled"
        ],
        "type": "string",
        "description": "Job Item to Make status"
      },
      "JobMessageCreateDto": {
        "required": [
          "body"
        ],
        "type": "object",
        "properties": {
          "body": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Message text"
          },
          "itemToMakeId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of the item-to-make to post on. Must be supplied together with operationId; omit both to post on the job itself.",
            "nullable": true
          },
          "operationId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of the operation to post on. Must be supplied together with itemToMakeId; omit both to post on the job itself.",
            "nullable": true
          },
          "mentions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "User Ids to @mention in the message. Please reference /api/users endpoints.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A chat message to post on a job, or on one operation of an item-to-make on the job."
      },
      "JobMessageDto": {
        "required": [
          "createdUtc",
          "id",
          "jobId",
          "mentions"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Unique id of the message"
          },
          "jobId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the job the message was posted on"
          },
          "itemToMakeId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of the item-to-make the message was posted on; null for a job-level message",
            "nullable": true
          },
          "operationId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of the operation the message was posted on; null for a job-level message",
            "nullable": true
          },
          "body": {
            "type": "string",
            "description": "Message text",
            "nullable": true
          },
          "mentions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Ids of the users @mentioned in the message. Please reference /api/users endpoints."
          },
          "createdUtc": {
            "type": "string",
            "description": "When the message was posted",
            "format": "date-time"
          },
          "createdBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "modifiedUtc": {
            "type": "string",
            "description": "When the message was last edited",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A chat message posted on a job, or on one operation of an item-to-make on the job."
      },
      "JobPriorityEnum": {
        "enum": [
          "low",
          "moderate",
          "high"
        ],
        "type": "string",
        "description": "Job priority"
      },
      "JobRequestFindParameters": {
        "type": "object",
        "properties": {
          "jobIds": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter to jobs whose ids are in the list",
            "nullable": true
          },
          "numbers": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Filter jobs to only given numbers",
            "nullable": true
          },
          "jobNames": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter jobs to only given names",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/JobStatusEnum"
          },
          "statuses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobStatusEnum"
            },
            "description": "Filter jobs to match the given statuses",
            "nullable": true
          },
          "parentItemId": {
            "type": "string",
            "description": "Filter jobs based on the id of the parent item they produce",
            "nullable": true
          },
          "hasIncompleteOperations": {
            "type": "boolean",
            "description": "Filters jobs to have those that have at least 1 incomplete operation.\nNote that this will filter out jobs that haven't been approved yet because they technically have \nno operations on them until approved.",
            "nullable": true
          },
          "salesOrderId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Filters for jobs that are for this sales order id.\nPlease reference /api/sales-orders endpoint.",
            "nullable": true
          },
          "createdBeforeUtc": {
            "type": "string",
            "description": "Filters jobs created before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "createdAfterUtc": {
            "type": "string",
            "description": "Filters jobs created after (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "modifiedBeforeUtc": {
            "type": "string",
            "description": "Filters jobs modified before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "modifiedAfterUtc": {
            "type": "string",
            "description": "Filters jobs modified after (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.\nUseful for polling incrementally instead of re-syncing every job.",
            "format": "date-time",
            "nullable": true
          },
          "productionDueDateFrom": {
            "type": "string",
            "description": "Filter to jobs whose production due date falls on or after this date. The whole day is included,\nso any time component is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "productionDueDateTo": {
            "type": "string",
            "description": "Filter to jobs whose production due date falls on or before this date. The whole day is included,\nso a job due later that same day still matches.",
            "format": "date-time",
            "nullable": true
          },
          "completedOnFrom": {
            "type": "string",
            "description": "Filter to jobs completed on or after this date, as a whole day in the shop's timezone. Any time\ncomponent is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "completedOnTo": {
            "type": "string",
            "description": "Filter to jobs completed on or before this date, as a whole day in the shop's timezone, so a job\ncompleted later that same shop day still matches.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding jobs."
      },
      "JobRequestUpdateStatus": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/JobStatusEnum"
          },
          "createPOs": {
            "type": "boolean",
            "description": "Create Purchase Orders for the Job. Required for the following statuses: Engineering, Approved",
            "nullable": true
          },
          "isInitialDataImport": {
            "type": "boolean",
            "description": "The job will be created as Complete. No inventory transactions. This is should mostly be used when importing jobs from legacy systems.\nRequired for the following statuses: Complete",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Update a job status."
      },
      "JobStatusEnum": {
        "enum": [
          "draft",
          "needsReview",
          "approved",
          "engineering",
          "scheduled",
          "inProgress",
          "complete",
          "cancelled",
          "hold"
        ],
        "type": "string",
        "description": "Job status"
      },
      "JobTrackingDto": {
        "required": [
          "id",
          "name",
          "number",
          "parentItemId",
          "priority",
          "quantityToMake",
          "status",
          "workOrderIds",
          "workOrders"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique Id associated to this entity"
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Job number",
            "format": "int32"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Job name, defaults to number unless otherwise specified."
          },
          "parentItemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique identifier of the parent item produced by this job.\nPlease reference api/items endpoint."
          },
          "quantityToMake": {
            "minimum": 0,
            "type": "number",
            "description": "Quantity of parent item produced by this job",
            "format": "double"
          },
          "productionDueDate": {
            "type": "string",
            "description": "Due date",
            "format": "date-time",
            "nullable": true
          },
          "earliestStartDate": {
            "type": "string",
            "description": "If set, this is the earliest date that the job should be scheduled to begin.",
            "format": "date-time",
            "nullable": true
          },
          "salesOrderId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of sales order fulfilled by this job, if applicable.\nPlease reference api/sales-orders endpoint.",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Identifier of sales order line item fulfilled by this job, if applicable.\nPlease reference endpoints nested under api/sales-orders.",
            "nullable": true
          },
          "createdUtc": {
            "type": "string",
            "description": "The date the job was created",
            "format": "date-time"
          },
          "originalScheduledStartUtc": {
            "type": "string",
            "description": "The first scheduled start time.",
            "format": "date-time",
            "nullable": true
          },
          "originalScheduledEndUtc": {
            "type": "string",
            "description": "The first scheduled end time.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledStartUtc": {
            "type": "string",
            "description": "The current scheduled start time.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledEndUtc": {
            "type": "string",
            "description": "The current scheduled end time.",
            "format": "date-time",
            "nullable": true
          },
          "completedOnUtc": {
            "type": "string",
            "description": "The job completion datetime.",
            "format": "date-time",
            "nullable": true
          },
          "cancelledOnUtc": {
            "type": "string",
            "description": "The job cancelled datetime.",
            "format": "date-time",
            "nullable": true
          },
          "revenue": {
            "type": "number",
            "description": "Revenue",
            "format": "double",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Job level internal notes",
            "nullable": true
          },
          "workOrderIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifier of work order(s) that this job is associated to, if applicable.\nPlease reference api/work-orders endpoint."
          },
          "workOrders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderReferenceDto"
            },
            "description": "Work order information, if applicable."
          },
          "status": {
            "$ref": "#/components/schemas/JobStatusEnum"
          },
          "priority": {
            "$ref": "#/components/schemas/JobPriorityEnum"
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "previousOperations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobTrackingOperationDetailsDto"
            },
            "description": "The previously completed operation(s) for the job."
          },
          "currentOperations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobTrackingOperationDetailsDto"
            },
            "description": "The current in progress/paused operation(s) for the job."
          },
          "nextOperations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobTrackingOperationDetailsDto"
            },
            "description": "The next ready operation(s) for the job."
          },
          "pendingOperations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobTrackingOperationDetailsDto"
            },
            "description": "The operations that are awaiting other operations to finish."
          },
          "cancelledOperations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JobTrackingOperationDetailsDto"
            },
            "description": "The operations that were cancelled."
          },
          "estimatedSetupTimeInSeconds": {
            "type": "number",
            "description": "Estimated setup time (in seconds).",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "estimatedRunTimeInSeconds": {
            "type": "number",
            "description": "Estimated run time (in seconds).",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "estimatedLaborTimeInSeconds": {
            "type": "number",
            "description": "Estimated labor time (in seconds).",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "estimatedMachineTimeInSeconds": {
            "type": "number",
            "description": "Estimated machine time (in seconds).",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "elapsedSetupTimeInSeconds": {
            "type": "number",
            "description": "Elapsed setup time (in seconds).",
            "format": "double",
            "nullable": true
          },
          "elapsedRunTimeInSeconds": {
            "type": "number",
            "description": "Elapsed run time (in seconds).",
            "format": "double",
            "nullable": true
          },
          "elapsedLaborTimeInSeconds": {
            "type": "number",
            "description": "Elapsed labor time (in seconds).",
            "format": "double",
            "nullable": true
          },
          "elapsedMachineTimeInSeconds": {
            "type": "number",
            "description": "Elapsed machine time (in seconds).",
            "format": "double",
            "nullable": true
          },
          "customerName": {
            "type": "string",
            "description": "The customer that this job is associated with",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a job (for tracking purposes). This is essentially a summary of the job's current state."
      },
      "JobTrackingItemToMakeDto": {
        "required": [
          "depth",
          "id",
          "isCustom",
          "itemId",
          "quantityToMake",
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique Id associated to this entity"
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the item on which this entity is based.\nPlease reference /api/items endpoint."
          },
          "quantityToMake": {
            "type": "number",
            "description": "Quantity of this item produced by the associated job.",
            "format": "double"
          },
          "isCustom": {
            "type": "boolean",
            "description": "Denotes whether this job produces a customized version of the base item"
          },
          "status": {
            "$ref": "#/components/schemas/JobItemToMakeStatusEnum"
          },
          "quantityMade": {
            "type": "number",
            "description": "Quantity already produced, if the job is in progress.",
            "format": "double",
            "nullable": true
          },
          "depth": {
            "type": "integer",
            "description": "Structurally, identify where in the tree of building the parent item this item lies.\nExample: The top-level item would have a depth of zero and it's direct subcomponents would be 1.\nThis cascades down so that a subcomponent to a subcomponent would be 2... and so on.",
            "format": "int32"
          },
          "routingNotes": {
            "type": "string",
            "description": "The routing notes (the \"Routing Notes\" field) captured on this job's routing for the item.\nNull when the job's routing has no note for the item.",
            "nullable": true
          },
          "costBreakdown": {
            "$ref": "#/components/schemas/CommonCostBreakdownDto"
          },
          "costBreakdownEstimated": {
            "$ref": "#/components/schemas/CommonCostBreakdownDto"
          },
          "itemReference": {
            "$ref": "#/components/schemas/ItemReferenceDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents an item to make on a job (for tracking purposes)"
      },
      "JobTrackingOperationDetailsDto": {
        "required": [
          "itemToMake",
          "operation"
        ],
        "type": "object",
        "properties": {
          "itemToMake": {
            "$ref": "#/components/schemas/JobTrackingItemToMakeDto"
          },
          "operation": {
            "$ref": "#/components/schemas/JobTrackingOperationDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a job operation and the item affected (for tracking purposes)."
      },
      "JobTrackingOperationDto": {
        "required": [
          "id",
          "isOutsideProcessing",
          "order",
          "status",
          "systemOperationId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique Id associated to this entity"
          },
          "status": {
            "$ref": "#/components/schemas/JobItemToMakeOpStatusEnum"
          },
          "order": {
            "minimum": 0,
            "type": "integer",
            "description": "Routing order of the operation",
            "format": "int32"
          },
          "systemOperationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the system operation associated to this entity\nPlease reference api/operations."
          },
          "isOutsideProcessing": {
            "type": "boolean",
            "description": "Denotes whether this is an outside processing operation"
          },
          "originalScheduledStartUtc": {
            "type": "string",
            "description": "The first scheduled start time.",
            "format": "date-time",
            "nullable": true
          },
          "originalScheduledEndUtc": {
            "type": "string",
            "description": "The first scheduled end time.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledStartUtc": {
            "type": "string",
            "description": "Scheduled start datetime of the operation",
            "format": "date-time",
            "nullable": true
          },
          "scheduledEndUtc": {
            "type": "string",
            "description": "Scheduled end datetime of the operation",
            "format": "date-time",
            "nullable": true
          },
          "completedOnUtc": {
            "type": "string",
            "description": "The operation completion datetime.",
            "format": "date-time",
            "nullable": true
          },
          "completedById": {
            "type": "string",
            "description": "Operation completed user identifier. Please reference /api/users endpoint.",
            "nullable": true
          },
          "scheduledEquipmentId": {
            "type": "string",
            "description": "Identifier of the equipment that this operation is scheduled to run on",
            "nullable": true
          },
          "scheduledEquipmentName": {
            "type": "string",
            "description": "The name of the equipment that this operation is scheduled to run on.",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "The custom field data on the object",
            "nullable": true
          },
          "instructions": {
            "type": "string",
            "description": "Instructions specific to the item to make operation.",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "System operation name.",
            "nullable": true
          },
          "leadTimeInDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Number of days required between order and receipt. Only applicable for outside processing operations.",
            "format": "int32",
            "nullable": true
          },
          "associatedPurchaseOrderIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Associated purchase order IDs.",
            "nullable": true
          },
          "estimatedSetupTimeInSeconds": {
            "type": "number",
            "description": "The estimated setup time in seconds for the operation.",
            "format": "double",
            "nullable": true
          },
          "estimatedSetupTimeBasis": {
            "$ref": "#/components/schemas/DomainOperationsRouting_Step_SetupTimeOption"
          },
          "estimatedRunTimeInSeconds": {
            "type": "number",
            "description": "The estimated run time in seconds for the operation.\nNote: This is an obsolete field from when operation could not separate between machine (unattended) and labor (attended) time.",
            "format": "double",
            "nullable": true
          },
          "estimatedRunTimeBasis": {
            "$ref": "#/components/schemas/DomainOperationsRouting_Step_RunTimeOption"
          },
          "estimatedMachineTimeInSeconds": {
            "type": "number",
            "description": "The estimated machine time in seconds for the operation.",
            "format": "double",
            "nullable": true
          },
          "estimatedMachineTimeBasis": {
            "$ref": "#/components/schemas/DomainOperationsRouting_Step_RunTimeOption"
          },
          "estimatedLaborTimeInSeconds": {
            "type": "number",
            "description": "The estimated labor time in seconds for the operation.",
            "format": "double",
            "nullable": true
          },
          "estimatedLaborTimeBasis": {
            "$ref": "#/components/schemas/DomainOperationsRouting_Step_RunTimeOption"
          },
          "isMachineTimeOnly": {
            "type": "boolean",
            "description": "Whether this operation can be run without an employee present.  If true, use the machineTime properties.  If false,\nuse the laborTime properties."
          },
          "workOrderId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of work order that this operation is associated to, if applicable.\nPlease reference api/work-orders endpoint.",
            "nullable": true
          },
          "quantityToMake": {
            "type": "number",
            "description": "Quantity this operation is expected to produce.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "format": "double",
            "readOnly": true
          },
          "quantityCompleted": {
            "type": "number",
            "description": "Quantity already completed on this operation, if the job is in progress.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "format": "double",
            "readOnly": true
          },
          "quantityMade": {
            "type": "number",
            "description": "Quantity recorded as made on this operation: stamped when the operation completes, and banked through\nreceiving on an outside-processing operation. Unlike FulcrumProduct.PublicApi.Dto.Job.ItemToMake.Operation.OperationDto.QuantityCompleted, it does not include\nthe running count banked while the operation is in progress.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "format": "double",
            "readOnly": true
          },
          "excludeSetupTimeFromAudit": {
            "type": "boolean",
            "description": "Whether this operation's setup time is left out of the routing audit's job-history averages.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "readOnly": true
          },
          "excludeLaborTimeFromAudit": {
            "type": "boolean",
            "description": "Whether this operation's labor time is left out of the routing audit's job-history averages.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "readOnly": true
          },
          "excludeMachineTimeFromAudit": {
            "type": "boolean",
            "description": "Whether this operation's machine time is left out of the routing audit's job-history averages.\nRead-only: returned on operation reads but not settable through the update endpoints.",
            "readOnly": true
          },
          "isRework": {
            "type": "boolean",
            "description": "Whether this operation is a rework operation (a redo created from a prior operation)."
          },
          "hasAssociatedRework": {
            "type": "boolean",
            "description": "Whether this operation was sent for rework (one or more rework operations were created from it)."
          },
          "rework": {
            "$ref": "#/components/schemas/JobTrackingOperationReworkDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a job operation (for tracking purposes)."
      },
      "JobTrackingOperationReworkDto": {
        "type": "object",
        "properties": {
          "reasonId": {
            "type": "string",
            "description": "Identifier of the rework reason.",
            "nullable": true
          },
          "reason": {
            "type": "string",
            "description": "The rework reason.",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Free-text notes captured when the rework was recorded.",
            "nullable": true
          },
          "quantityToRework": {
            "type": "integer",
            "description": "The quantity sent for rework.",
            "format": "int32"
          },
          "quantityScrapped": {
            "type": "integer",
            "description": "The quantity scrapped as part of the rework.",
            "format": "int32"
          },
          "hasScrapMaterials": {
            "type": "boolean",
            "description": "Whether scrap materials were tracked as part of the rework."
          },
          "createdByUserId": {
            "type": "string",
            "description": "Identifier of the user who recorded the rework. Please reference /api/users endpoint.",
            "nullable": true
          },
          "createdUtc": {
            "type": "string",
            "description": "The datetime the rework was recorded.",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Rework details associated with a job operation."
      },
      "JobTrackingTimerRequestListTimersParameters": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "Filter timers based on who started it",
            "nullable": true
          },
          "jobId": {
            "type": "string",
            "description": "Filter timers based on job",
            "nullable": true
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Filter to timers tracked against a job item-to-make that makes this item. Work-order timers never match.",
            "nullable": true
          },
          "runningTimersOnly": {
            "type": "boolean",
            "description": "Filter to only running timers",
            "nullable": true
          },
          "types": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DomainTimeTrackingTimer_Type"
            },
            "description": "Filter to specific timer types",
            "nullable": true
          },
          "createdBeforeUtc": {
            "type": "string",
            "description": "Filters timers created before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "createdAfterUtc": {
            "type": "string",
            "description": "Filters timers created after (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "modifiedBeforeUtc": {
            "type": "string",
            "description": "Filters timers modified before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "modifiedAfterUtc": {
            "type": "string",
            "description": "Filters timers modified after (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "startedBeforeUtc": {
            "type": "string",
            "description": "Filters timers started before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "startedAfterUtc": {
            "type": "string",
            "description": "Filters timers started after (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "stoppedBeforeUtc": {
            "type": "string",
            "description": "Filters timers stopped before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "stoppedAfterUtc": {
            "type": "string",
            "description": "Filters timers stopped after (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "stoppedBeforeUtcOriginal": {
            "type": "string",
            "description": "Filters timers stopped before (exclusive) this parameter in UTC time.\nThis explicitly looks at the ORIGINAL stopped date which means this would be primarily for filtering mechanics that necessitate scope limiting.\nIf no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "stoppedAfterUtcOriginal": {
            "type": "string",
            "description": "Filters timers stopped after (exclusive) this parameter in UTC time.\nThis explicitly looks at the ORIGINAL stopped date which means this would be primarily for filtering mechanics that necessitate scope limiting.\nIf no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching job tracking timers"
      },
      "JobTrackingTimerStartTimerDto": {
        "required": [
          "itemToMakeId",
          "jobId",
          "operationId",
          "type"
        ],
        "type": "object",
        "properties": {
          "userId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The user identifier to associate the timer to.  If not supplied, will use the user assigned to the api key used for authorization",
            "nullable": true
          },
          "jobId": {
            "minLength": 1,
            "type": "string",
            "description": "The job identifier"
          },
          "itemToMakeId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The item to make identifier"
          },
          "operationId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The operation identifier. When the operation is grouped under a work order, the work order operation's timer is started instead and covers every job operation grouped under it"
          },
          "type": {
            "$ref": "#/components/schemas/DomainTimeTrackingTimer_Type"
          }
        },
        "additionalProperties": false,
        "description": "Model for starting a job tracking timer via the public api"
      },
      "JobTrackingTimerStopTimerDto": {
        "required": [
          "timerId"
        ],
        "type": "object",
        "properties": {
          "userId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The user identifier to associate the timer to.  If not supplied, will use the user assigned to the api key used for authorization",
            "nullable": true
          },
          "timerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The timer identifier. A work order timer, or a job operation timer held by one, stops the whole work order timer"
          }
        },
        "additionalProperties": false,
        "description": "Model for stopping a timer"
      },
      "JobUpdateDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the job",
            "nullable": true
          },
          "priority": {
            "$ref": "#/components/schemas/JobPriorityEnum"
          },
          "quantityToMake": {
            "type": "number",
            "description": "The quantity the job should make",
            "format": "double",
            "nullable": true
          },
          "productionDueDate": {
            "type": "string",
            "description": "The production due date",
            "format": "date-time",
            "nullable": true
          },
          "earliestStartDate": {
            "type": "string",
            "description": "If set, this is the earliest date that the job should be scheduled to begin.",
            "format": "date-time",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "The internal notes",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an update on an Job."
      },
      "JsonPatchDocument": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/JsonPatchOperation"
        },
        "description": "Array of operations to perform"
      },
      "JsonPatchOperation": {
        "type": "object",
        "properties": {
          "op": {
            "type": "string"
          },
          "value": { },
          "path": {
            "type": "string"
          },
          "from": {
            "type": "string",
            "description": "Source path — present for move/copy operations, absent otherwise."
          }
        }
      },
      "JsonSerializationIContractResolver": {
        "type": "object",
        "additionalProperties": false
      },
      "LocationDto": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "A verbose description of the location.",
            "nullable": true
          },
          "barcode": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Barcode identifier for this entity.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Location definition."
      },
      "LocationRequestFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter locations based on their name.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding locations."
      },
      "MaterialRequestActivateMaterials": {
        "required": [
          "materialIds"
        ],
        "type": "object",
        "properties": {
          "materialIds": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Material ids to activate."
          },
          "unit": {
            "$ref": "#/components/schemas/FulcrumProductMaterialsFulcrumLengthUnits"
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for activating materials."
      },
      "MaterialRequestFindParameters": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter materials based on matching ids.",
            "nullable": true
          },
          "materials": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Material names.",
            "nullable": true
          },
          "grades": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Grades.",
            "nullable": true
          },
          "forms": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonEnumMaterialFormEnum"
            },
            "description": "Material forms.",
            "nullable": true
          },
          "displayDimensions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of dimension display values to include",
            "nullable": true
          },
          "active": {
            "type": "boolean",
            "description": "Indicate whether to specifically only pull active materials. If left null, all rows are included.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding materials."
      },
      "MaterialRequestGetMaterialRequestDto": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Unique id of the material to retrieve."
          }
        },
        "additionalProperties": false,
        "description": "Request parameters for looking up a single material by id.\nIntroduced for the v2 endpoint because material ids may contain '/' characters,\nwhich cannot be round-tripped through URL path segments."
      },
      "MaterialShapeDto": {
        "required": [
          "form",
          "id",
          "materialReferenceId",
          "materialReferenceName",
          "name",
          "vendors"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "active": {
            "type": "boolean",
            "description": "Indicates if this material is activated."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name."
          },
          "form": {
            "$ref": "#/components/schemas/CommonEnumMaterialFormEnum"
          },
          "materialReferenceId": {
            "minLength": 1,
            "type": "string",
            "description": "Material Id"
          },
          "materialReferenceName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Material name"
          },
          "specification": {
            "type": "string",
            "description": "Specification",
            "nullable": true
          },
          "subSpecification": {
            "type": "string",
            "description": "Sub-specification",
            "nullable": true
          },
          "finish": {
            "type": "string",
            "description": "Finish",
            "nullable": true
          },
          "grade": {
            "type": "string",
            "description": "Grade",
            "nullable": true
          },
          "dimension": {
            "type": "string",
            "description": "Dimension",
            "nullable": true
          },
          "type": {
            "type": "string",
            "description": "Material type",
            "nullable": true
          },
          "version": {
            "type": "string",
            "description": "Version",
            "nullable": true
          },
          "dimensionUnits": {
            "type": "string",
            "description": "Unit the material's dimensions are in: `Inch`, `Foot`, `Yard`, `Millimeter`, `Centimeter` or `Meter`.\nRouting input-material nesting `d2` and `d3` are costed in this unit. A routing costs from a copy of the material's\nunits, shape type and density taken when the input material was added, so later changes to the material may not reach it.",
            "nullable": true
          },
          "shapeType": {
            "type": "string",
            "description": "How the material is measured: `Planar` (sheet and plate, costed by length and width) or `Linear` (bar, tube and\nstructural shapes, costed by length). A nesting's `d3` applies only to `Planar` materials.",
            "nullable": true
          },
          "linearDensity": {
            "type": "number",
            "description": "Weight per unit length, in `densityUnits`. Used to cost `Linear` materials.",
            "format": "double",
            "nullable": true
          },
          "planarDensity": {
            "type": "number",
            "description": "Weight per unit area, in `densityUnits`. Used to cost `Planar` materials.",
            "format": "double",
            "nullable": true
          },
          "densityUnits": {
            "type": "string",
            "description": "Unit of `linearDensity` and `planarDensity`: `PoundPerFoot`, `KilogramPerMeter`,\n`PoundPerSquareFoot` or `KilogramPerSquareMeter`.\nAn input material whose material has no density for its `shapeType` is estimated at zero material cost.",
            "nullable": true
          },
          "vendors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MaterialShapeVendorDto"
            },
            "description": "Vendors that supply this material."
          }
        },
        "additionalProperties": false,
        "description": "Material definition."
      },
      "MaterialShapeVendorCreateDto": {
        "required": [
          "priceBreaks",
          "priceUnit",
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor id associated to this entity. Please reference /api/vendors endpoint."
          },
          "priceUnit": {
            "$ref": "#/components/schemas/CommonEnumMaterialVendorPriceUnitEnum"
          },
          "isPrimary": {
            "type": "boolean",
            "description": "Signifies if this is the primary vendor for this material."
          },
          "leadTimeInDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead time for this vendor.",
            "format": "int32",
            "nullable": true
          },
          "priceBreaks": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MaterialShapeVendorPriceBreakCreateDto"
            },
            "description": "Vendor price breaks"
          }
        },
        "additionalProperties": false,
        "description": "Vendor with additional context for a material."
      },
      "MaterialShapeVendorDto": {
        "required": [
          "id",
          "isPrimary",
          "priceBreaks",
          "priceUnit",
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique id associated to this entity.",
            "format": "uuid"
          },
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor identifier. Pelase reference /api/vendors endpoint."
          },
          "isPrimary": {
            "type": "boolean",
            "description": "Signifies if this is the primary vendor for this material."
          },
          "currencyCode": {
            "type": "string",
            "description": "Currency code/denomination associated to this vendor.",
            "nullable": true
          },
          "priceUnit": {
            "$ref": "#/components/schemas/CommonEnumMaterialVendorPriceUnitEnum"
          },
          "leadTimeInDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Number of days required between order and receipt",
            "format": "int32",
            "nullable": true
          },
          "priceBreaks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MaterialShapeVendorPriceBreakDto"
            },
            "description": "Vendor price breaks"
          }
        },
        "additionalProperties": false,
        "description": "Material vendor definition"
      },
      "MaterialShapeVendorPriceBreakCreateDto": {
        "required": [
          "price",
          "quantity"
        ],
        "type": "object",
        "properties": {
          "quantity": {
            "minimum": 0,
            "type": "integer",
            "description": "The minimum quantity to associate this price break to.",
            "format": "int32"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The price per unit.",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Vendor prices break create/update for a material shape."
      },
      "MaterialShapeVendorPriceBreakDto": {
        "required": [
          "id",
          "price",
          "quantity"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique id associated to this entity.",
            "format": "uuid"
          },
          "quantity": {
            "minimum": 0,
            "type": "integer",
            "description": "The minimum quantity to associate this price break to.",
            "format": "int32"
          },
          "price": {
            "type": "number",
            "description": "The price per unit.",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Vendor prices breaks for a material shape."
      },
      "MaterialShapeVendorUpdateDto": {
        "required": [
          "priceBreaks"
        ],
        "type": "object",
        "properties": {
          "isPrimary": {
            "type": "boolean",
            "description": "Signifies if this is the primary vendor for this material."
          },
          "leadTimeInDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead time for this vendor.",
            "format": "int32",
            "nullable": true
          },
          "priceBreaks": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MaterialShapeVendorPriceBreakCreateDto"
            },
            "description": "Vendor price breaks"
          }
        },
        "additionalProperties": false,
        "description": "Vendor with additional context for a material."
      },
      "MaterialVendorCreateMaterialVendorRequestDto": {
        "required": [
          "materialId",
          "priceBreaks",
          "priceUnit",
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "materialId": {
            "minLength": 1,
            "type": "string",
            "description": "Unique id of the material to create the vendor on."
          },
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor id associated to this entity. Please reference /api/vendors endpoint."
          },
          "priceUnit": {
            "$ref": "#/components/schemas/CommonEnumMaterialVendorPriceUnitEnum"
          },
          "isPrimary": {
            "type": "boolean",
            "description": "Signifies if this is the primary vendor for this material."
          },
          "leadTimeInDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead time for this vendor.",
            "format": "int32",
            "nullable": true
          },
          "priceBreaks": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MaterialShapeVendorPriceBreakCreateDto"
            },
            "description": "Vendor price breaks"
          }
        },
        "additionalProperties": false,
        "description": "Request parameters for creating a vendor on a material.\nIntroduced for the v2 endpoint because material ids may contain '/' characters,\nwhich cannot be round-tripped through URL path segments."
      },
      "MaterialVendorListMaterialVendorRequestDto": {
        "required": [
          "materialId"
        ],
        "type": "object",
        "properties": {
          "materialId": {
            "minLength": 1,
            "type": "string",
            "description": "Unique id of the material to list vendors for."
          }
        },
        "additionalProperties": false,
        "description": "Request parameters for listing the vendors on a material.\nIntroduced for the v2 endpoint because material ids may contain '/' characters,\nwhich cannot be round-tripped through URL path segments."
      },
      "MaterialVendorUpdateMaterialVendorRequestDto": {
        "required": [
          "materialId",
          "priceBreaks"
        ],
        "type": "object",
        "properties": {
          "materialId": {
            "minLength": 1,
            "type": "string",
            "description": "Unique id of the material whose vendor will be updated."
          },
          "isPrimary": {
            "type": "boolean",
            "description": "Signifies if this is the primary vendor for this material."
          },
          "leadTimeInDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead time for this vendor.",
            "format": "int32",
            "nullable": true
          },
          "priceBreaks": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MaterialShapeVendorPriceBreakCreateDto"
            },
            "description": "Vendor price breaks"
          }
        },
        "additionalProperties": false,
        "description": "Request parameters for updating a vendor on a material.\nIntroduced for the v2 endpoint because material ids may contain '/' characters,\nwhich cannot be round-tripped through URL path segments."
      },
      "MessageRequestListJobMessagesParameters": {
        "type": "object",
        "properties": {
          "itemToMakeId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of the item-to-make whose operation chat to list. Must be supplied together with operationId.",
            "nullable": true
          },
          "operationId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of the operation whose chat to list. Must be supplied together with itemToMakeId.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Selects which chat on the job to list. Omit both ids for the job-level chat; supply both for one operation's chat."
      },
      "NCRNcrDto": {
        "required": [
          "cause",
          "detail",
          "id",
          "number",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Number",
            "format": "int32"
          },
          "type": {
            "minLength": 1,
            "type": "string",
            "description": "NCR Type"
          },
          "cause": {
            "minLength": 1,
            "type": "string",
            "description": "Cause"
          },
          "detail": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Detail - required notes on the NCR"
          },
          "departmentId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Department key identifier. Please reference /api/departments endpoint.",
            "nullable": true
          },
          "department": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor key identifier. Please reference /api/vendors endpoint.",
            "nullable": true
          },
          "vendor": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "workCenters": {
            "type": "string",
            "description": "The work centers assigned to this NCR.",
            "nullable": true,
            "readOnly": true
          },
          "scheduledEquipment": {
            "type": "string",
            "description": "Affected Equipment",
            "nullable": true,
            "readOnly": true
          },
          "reason": {
            "type": "string",
            "description": "Reason",
            "nullable": true
          },
          "operator": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "status": {
            "type": "string",
            "description": "NCR Status",
            "nullable": true
          },
          "quantityImpacted": {
            "type": "number",
            "description": "Quantity Impacted",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "incrementalCost": {
            "type": "number",
            "description": "Incremental Cost",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "createdUtc": {
            "type": "string",
            "description": "Created Date",
            "format": "date-time",
            "nullable": true
          },
          "completedUtc": {
            "type": "string",
            "description": "Completed Date",
            "format": "date-time",
            "nullable": true
          },
          "jobIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Impacted Job IDs",
            "readOnly": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "completedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "analyzedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "impacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonImpactDto"
            },
            "description": "Impact information.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an NCR"
      },
      "NCRRequestNcrCreateDto": {
        "required": [
          "detail",
          "type"
        ],
        "type": "object",
        "properties": {
          "title": {
            "maxLength": 500,
            "minLength": 0,
            "type": "string",
            "description": "Short title for the NCR",
            "nullable": true
          },
          "type": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The NCR type, one of the shop's configured NCR types (for example Quality, Quantity, Customer Complaint, Return, Warranty)"
          },
          "detail": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "What was found: the required description of the non-conformance"
          },
          "cause": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "The cause, one of the shop's configured NCR causes",
            "nullable": true
          },
          "reason": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "The reason, one of the shop's configured NCR reasons",
            "nullable": true
          },
          "disposition": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "Disposition, when already decided. One of: Acceptable - Customer, Acceptable - Engineer, Conforming,\nHold, Return To Customer, Return To Vendor, Return To Fulcrum, Rework, Remake/Replace, Scrap - Customer",
            "nullable": true
          },
          "jobId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The affected job's id. The job's customer and sales order are recorded on the impact from the job",
            "nullable": true
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The affected item's id. Defaults to the job's parent item when only a job is given",
            "nullable": true
          },
          "quantityImpacted": {
            "minimum": 0,
            "type": "number",
            "description": "How many units are affected. Requires jobId or itemId. Zero or greater",
            "format": "double",
            "nullable": true
          },
          "quantityImpactedDisposition": {
            "maxLength": 50,
            "minLength": 0,
            "type": "string",
            "description": "Whether the impacted quantity is All, Partial, or Unknown. Defaults to Partial",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request body for opening an NCR. The NCR is created in status New; the quality team classifies\nand works it in the app. An affected job and/or item become the NCR's single impact."
      },
      "NCRRequestNcrListParameters": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Filter NCRs by a specific status\nAccepted Values:\nClosed, Hold, New, Quality Review, Engineering Review",
            "nullable": true
          },
          "type": {
            "type": "string",
            "description": "Filter NCRs by a specific type. Available values are configured per tenant in Quality settings (NCR dropdowns).",
            "nullable": true
          },
          "cause": {
            "type": "string",
            "description": "Filter NCRs by a specific cause. Available values are configured per tenant in Quality settings (NCR dropdowns).",
            "nullable": true
          },
          "reason": {
            "type": "string",
            "description": "Filter NCRs by a specific reason. Available values are configured per tenant in Quality settings (NCR dropdowns).",
            "nullable": true
          },
          "createdUtc": {
            "type": "string",
            "description": "Filter NCRs created on or after this instant, time of day included. Combines with\nFulcrumProduct.PublicApi.Controllers.NCRs.Request.NcrListParameters.CreatedFrom when both are sent.",
            "format": "date-time",
            "nullable": true
          },
          "createdFrom": {
            "type": "string",
            "description": "Filter to NCRs created on or after this date, as a whole day in the shop's timezone. Any time\ncomponent is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "createdTo": {
            "type": "string",
            "description": "Filter to NCRs created on or before this date, as a whole day in the shop's timezone, so\nan NCR created later that same shop day still matches.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching NCRs"
      },
      "NestingDrawingOwnerEnum": {
        "enum": [
          "item",
          "job"
        ],
        "type": "string",
        "description": "Which entity owns a drawing on the work-package manifest. Downloading an `Item`-owned\ndrawing needs View Item on a user-bound token; a `Job`-owned one needs View Job."
      },
      "NestingEnumNestableMaterialFormEnum": {
        "enum": [
          "sheet",
          "plate",
          "roundBar",
          "flatBar",
          "channel",
          "squareTube",
          "angle",
          "treadPlate",
          "hexBar",
          "squareBar",
          "teeBar",
          "hBeam",
          "rectTube",
          "pipe",
          "wBeam",
          "sBeam",
          "roundTube",
          "rectBar",
          "wideBar",
          "reinforcingBar",
          "halfRoundBar",
          "halfOvalBar"
        ],
        "type": "string",
        "description": "Stock form of a material shape. Mirrors the shop's material-form list member for member."
      },
      "NestingNestableJobGroupDto": {
        "required": [
          "jobOperations",
          "material",
          "operation",
          "workOrderOperations"
        ],
        "type": "object",
        "properties": {
          "material": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "operation": {
            "$ref": "#/components/schemas/CommonGuidOrMongoReferenceDto"
          },
          "earliestScheduledStartUtc": {
            "type": "string",
            "description": "Earliest scheduled start across the group's job operations. Null when no job operation in\nthe group carries a scheduled start — including a group made up only of existing nests.",
            "format": "date-time",
            "nullable": true
          },
          "jobOperations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NestingNestableJobOperationDto"
            },
            "description": "Job operations in the group that are still waiting to be nested."
          },
          "workOrderOperations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NestingNestableWorkOrderOperationDto"
            },
            "description": "Work-order operations already created for the group's material shape and operation."
          }
        },
        "additionalProperties": false,
        "description": "One nestable group: everything waiting on, or already nested onto, a single\n(material shape, operation) pair. The pair `material.id` and `operation.id` identifies\nthe group, and no two groups in a response share it."
      },
      "NestingNestableJobOperationDto": {
        "required": [
          "hasMultipleMaterials",
          "isRework",
          "job",
          "jobOperationId",
          "quantityToMake"
        ],
        "type": "object",
        "properties": {
          "jobOperationId": {
            "minLength": 1,
            "type": "string",
            "description": "Id of the job operation. This is the id a work order is created from."
          },
          "job": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "item": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "itemToMakeId": {
            "type": "string",
            "description": "Id of the job's item-to-make line the operation belongs to.",
            "nullable": true
          },
          "quantityToMake": {
            "type": "number",
            "description": "Quantity the operation is to make.",
            "format": "double"
          },
          "customerName": {
            "type": "string",
            "description": "Name of the job's customer.",
            "nullable": true
          },
          "salesOrder": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "productionDueDateUtc": {
            "type": "string",
            "description": "The job's production due date.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledStartUtc": {
            "type": "string",
            "description": "Scheduled start of this operation.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledEndUtc": {
            "type": "string",
            "description": "Scheduled end of this operation.",
            "format": "date-time",
            "nullable": true
          },
          "isRework": {
            "type": "boolean",
            "description": "True when the operation is a rework of an earlier one. Its materials are inherited from the source operation."
          },
          "hasMultipleMaterials": {
            "type": "boolean",
            "description": "True when the operation has more than one material required, so the group it lands in is ambiguous."
          }
        },
        "additionalProperties": false,
        "description": "One job operation waiting to be nested onto the group's material shape and operation."
      },
      "NestingNestableWorkOrderOperationDto": {
        "required": [
          "isNested",
          "machineTimeSeconds",
          "partCount",
          "sheetCount",
          "workOrder",
          "workOrderOperationId"
        ],
        "type": "object",
        "properties": {
          "workOrderOperationId": {
            "minLength": 1,
            "type": "string",
            "description": "Id of the work-order operation."
          },
          "workOrder": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "status": {
            "$ref": "#/components/schemas/WorkOrderStatusEnum"
          },
          "operationStatus": {
            "type": "string",
            "description": "Status of the work-order operation itself: `Pending`, `Ready`, `Running`, `Paused`, `Complete` or `Cancelled`.",
            "nullable": true
          },
          "priority": {
            "$ref": "#/components/schemas/JobPriorityEnum"
          },
          "sheetCount": {
            "type": "integer",
            "description": "Number of sheets the operation's nest requires, counting repetitions.",
            "format": "int32"
          },
          "partCount": {
            "type": "integer",
            "description": "Number of parts the operation's nest places.",
            "format": "int32"
          },
          "machineTimeSeconds": {
            "type": "number",
            "description": "The sum of each sheet's recorded runtime in the operation's nest, in seconds, counting one repetition per sheet.",
            "format": "double"
          },
          "isNested": {
            "type": "boolean",
            "description": "True when the operation carries a nest with parts or plates present. Read the nest itself from the work-order operation nesting-setup endpoint."
          }
        },
        "additionalProperties": false,
        "description": "One work-order operation already created for the group's material shape and operation."
      },
      "NestingRequestNestableJobsListParameters": {
        "type": "object",
        "properties": {
          "needNesting": {
            "type": "boolean",
            "description": "When true, keeps only groups that still have job operations waiting to be nested.",
            "nullable": true
          },
          "existingNests": {
            "type": "boolean",
            "description": "When true, keeps only groups that already have a work-order operation.",
            "nullable": true
          },
          "materialForms": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NestingEnumNestableMaterialFormEnum"
            },
            "description": "Keeps only groups whose material shape has one of these stock forms.",
            "nullable": true
          },
          "operationIds": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Keeps only groups on one of these routing operations.",
            "nullable": true
          },
          "materialShapeIds": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Keeps only groups on one of these material shapes.",
            "nullable": true
          },
          "earliestStartOnOrBefore": {
            "type": "string",
            "description": "Keeps only groups whose earliest scheduled-start job operation falls on or before this\ncalendar date. Only the calendar date is used, exactly as written; any time or UTC offset is\nignored. A group with no dated job operation is dropped as well, which means\nexisting-nest-only groups never survive this filter.",
            "format": "date-time",
            "nullable": true
          },
          "search": {
            "type": "string",
            "description": "Single search token, matched case-insensitively as a substring against the job name and\nnumber, the customer name, the sales order number and name, the item name, the work order\nname, the material shape name, and the operation name. Not split on whitespace.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Filter for the nestable-jobs query. Every field is optional; omitting all of them returns every\ngroup. Filters combine with AND."
      },
      "NestingWorkPackageDrawingDto": {
        "required": [
          "attachmentId",
          "fileName",
          "isOperationSpecific",
          "ownerType"
        ],
        "type": "object",
        "properties": {
          "attachmentId": {
            "minLength": 1,
            "type": "string",
            "description": "Id of the attachment. Download it through `GET /attachments/{attachmentId}/download`."
          },
          "fileName": {
            "minLength": 1,
            "type": "string",
            "description": "File name of the drawing."
          },
          "ownerType": {
            "$ref": "#/components/schemas/NestingDrawingOwnerEnum"
          },
          "isOperationSpecific": {
            "type": "boolean",
            "description": "True when the drawing is tagged for this operation specifically rather than for the item as a whole."
          }
        },
        "additionalProperties": false,
        "description": "A drawing attachment to download for a part."
      },
      "NestingWorkPackageJobOperationParameters": {
        "required": [
          "jobId",
          "jobOperationId"
        ],
        "type": "object",
        "properties": {
          "jobId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Id of the job the operation belongs to."
          },
          "jobOperationId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Id of the job operation, as returned by the nestable-jobs list."
          },
          "itemToMakeId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Id of the job's item-to-make line the operation belongs to. Optional; needed only when the job\ncarries the same job-operation id on more than one item to make, which the manifest reports as\n`ambiguousJobOperation`.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One job operation, named by its job and its job-operation id."
      },
      "NestingWorkPackageManifestDto": {
        "required": [
          "parts",
          "skipped"
        ],
        "type": "object",
        "properties": {
          "parts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NestingWorkPackagePartDto"
            },
            "description": "One part per requested job operation that exists, in request order."
          },
          "skipped": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NestingWorkPackageSkippedDto"
            },
            "description": "Requested job operations that produced no part, in request order."
          }
        },
        "additionalProperties": false,
        "description": "The cut list for a set of job operations: what to cut, how many, from what, by when, and the\ndrawing attachments to download for each part."
      },
      "NestingWorkPackageManifestParameters": {
        "required": [
          "jobOperations"
        ],
        "type": "object",
        "properties": {
          "jobOperations": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NestingWorkPackageJobOperationParameters"
            },
            "description": "The job operations to cut, 1 to 500. The same entry may not appear twice."
          }
        },
        "additionalProperties": false,
        "description": "The job operations to build a work package for. Each is named by its job and its job-operation\nid — the `job.id` and `jobOperationId` values the nestable-jobs list returns — because a\njob-operation id alone is not unique across jobs."
      },
      "NestingWorkPackageMaterialDto": {
        "required": [
          "materialShapeId",
          "name"
        ],
        "type": "object",
        "properties": {
          "materialShapeId": {
            "minLength": 1,
            "type": "string",
            "description": "Id of the material shape."
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Name of the material shape as recorded on the job. Always present; the label to display."
          },
          "form": {
            "$ref": "#/components/schemas/NestingEnumNestableMaterialFormEnum"
          },
          "materialName": {
            "type": "string",
            "description": "Display name of the shape's material, composed from the material master. Null when the master carries no name for it.",
            "nullable": true
          },
          "grade": {
            "type": "string",
            "description": "Grade of the shape's material. Null when the material master carries none.",
            "nullable": true
          },
          "thickness": {
            "type": "number",
            "description": "Thickness of the shape, falling back to its primary dimension when no thickness is recorded.",
            "format": "double",
            "nullable": true
          },
          "thicknessDescription": {
            "type": "string",
            "description": "Thickness as described on the shape, such as a gauge.",
            "nullable": true
          },
          "dimensionUnits": {
            "type": "string",
            "description": "Unit the shape's dimensions are in: `Inch`, `Foot`, `Yard`, `Millimeter`, `Centimeter` or `Meter`.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A required material and the shape it is cut from."
      },
      "NestingWorkPackagePartDto": {
        "required": [
          "drawings",
          "hasMultipleMaterials",
          "isRework",
          "itemToMakeId",
          "job",
          "jobOperationId",
          "operation",
          "quantityToMake"
        ],
        "type": "object",
        "properties": {
          "jobOperationId": {
            "minLength": 1,
            "type": "string",
            "description": "Id of the job operation, as sent."
          },
          "job": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "customerName": {
            "type": "string",
            "description": "Name of the job's customer.",
            "nullable": true
          },
          "productionDueDateUtc": {
            "type": "string",
            "description": "The job's production due date.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledStartUtc": {
            "type": "string",
            "description": "Scheduled start of this operation.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledEndUtc": {
            "type": "string",
            "description": "Scheduled end of this operation.",
            "format": "date-time",
            "nullable": true
          },
          "item": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "itemNumber": {
            "type": "string",
            "description": "The item's number.",
            "nullable": true
          },
          "itemRevision": {
            "type": "string",
            "description": "The item's revision.",
            "nullable": true
          },
          "itemToMakeId": {
            "minLength": 1,
            "type": "string",
            "description": "Id of the job's item-to-make line the operation belongs to."
          },
          "quantityToMake": {
            "type": "number",
            "description": "Quantity the operation is to make, as stored — not rounded to whole parts.",
            "format": "double"
          },
          "operation": {
            "$ref": "#/components/schemas/CommonGuidOrMongoReferenceDto"
          },
          "workOrderOperationId": {
            "type": "string",
            "description": "Id of the work-order operation this job operation is already nested on. Null when it has not been nested yet.",
            "nullable": true
          },
          "isRework": {
            "type": "boolean",
            "description": "True when the operation is a rework of an earlier one. Its material is the source operation's."
          },
          "hasMultipleMaterials": {
            "type": "boolean",
            "description": "True when the operation requires more than one material, so FulcrumProduct.PublicApi.Dto.Nesting.NestingWorkPackagePartDto.Material is only the first of them."
          },
          "material": {
            "$ref": "#/components/schemas/NestingWorkPackageMaterialDto"
          },
          "drawings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NestingWorkPackageDrawingDto"
            },
            "description": "The DXF drawings to cut this part from, ordered by `attachmentId`. Empty when none resolve."
          }
        },
        "additionalProperties": false,
        "description": "One job operation to cut."
      },
      "NestingWorkPackageSkipReasonEnum": {
        "enum": [
          "notFound",
          "ambiguousJobOperation",
          "noSystemOperation"
        ],
        "type": "string",
        "description": "Why a requested job operation produced no part on the work-package manifest."
      },
      "NestingWorkPackageSkippedDto": {
        "required": [
          "jobId",
          "jobOperationId",
          "reason"
        ],
        "type": "object",
        "properties": {
          "jobId": {
            "minLength": 1,
            "type": "string",
            "description": "Id of the job, as sent. Together with FulcrumProduct.PublicApi.Dto.Nesting.NestingWorkPackageSkippedDto.JobOperationId this identifies the request entry."
          },
          "jobOperationId": {
            "minLength": 1,
            "type": "string",
            "description": "Id of the job operation, as sent."
          },
          "reason": {
            "$ref": "#/components/schemas/NestingWorkPackageSkipReasonEnum"
          }
        },
        "additionalProperties": false,
        "description": "A requested job operation that produced no part."
      },
      "NoteCreateDto": {
        "required": [
          "body",
          "parentId",
          "parentType"
        ],
        "type": "object",
        "properties": {
          "parentId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Unique identifier of the object to which the note is attached\nCan be 24 or 36 characters, depending on parent type"
          },
          "parentType": {
            "$ref": "#/components/schemas/NoteTypeEnum"
          },
          "body": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Note text"
          },
          "mentions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "User Ids to tag in the note. Please reference /api/users endpoints.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a note on a document"
      },
      "NoteDto": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "parentId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Unique identifier of the object to which the note is attached\nCan be 24 or 36 characters, depending on parent type",
            "nullable": true
          },
          "parentType": {
            "$ref": "#/components/schemas/NoteTypeEnum"
          },
          "body": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Note text",
            "nullable": true
          },
          "mentions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "User Ids to tag in the note. Please reference /api/users endpoints.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a note on a document"
      },
      "NoteRequestFindParameters": {
        "required": [
          "parentId",
          "parentType"
        ],
        "type": "object",
        "properties": {
          "parentType": {
            "$ref": "#/components/schemas/NoteTypeEnum"
          },
          "parentId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Filter notes by parent Id.\nEither 24 or 36 characters, depending on parent type"
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching notes"
      },
      "NoteTypeEnum": {
        "enum": [
          "salesOrder",
          "purchaseOrder",
          "quote",
          "invoice"
        ],
        "type": "string",
        "description": "Note parent document type"
      },
      "OperationCreateDto": {
        "required": [
          "description",
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of operation."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The description of the operation."
          },
          "isOutsideProcessing": {
            "type": "boolean",
            "description": "Specifies whether this is an outside processing operation."
          },
          "setupTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "laborTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "machineTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "machineTimeTrackingEnabled": {
            "type": "boolean",
            "description": "Specifies whether machine tracking is enabled."
          },
          "outsideProcessingCost": {
            "$ref": "#/components/schemas/ItemRoutingOutsideProcessingOperationCost"
          },
          "defaultVendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Default vendor id that will be used for this operation. Please reference /api/vendors endpoint.",
            "nullable": true
          },
          "vendors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Available vendors.",
            "nullable": true
          },
          "leadDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead days.",
            "format": "int32",
            "nullable": true
          },
          "instructions": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Instructions.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of operation to be created"
      },
      "OperationDto": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "A verbose description of the location.",
            "nullable": true
          },
          "setupTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "laborTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "machineTimeTrackingEnabled": {
            "type": "boolean",
            "description": "Is machine time tracking enabled.",
            "nullable": true
          },
          "machineTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "isOutsideProcessing": {
            "type": "boolean",
            "description": "Specifies whether this is an outside processing operation"
          },
          "outsideProcessingCost": {
            "$ref": "#/components/schemas/ItemRoutingOutsideProcessingOperationCost"
          },
          "unattended": {
            "type": "boolean",
            "description": "Specifies whether this is operation will be unattended."
          },
          "defaultVendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Default vendor id that will be used for this operation. Please reference /api/vendors endpoint.",
            "nullable": true
          },
          "leadDays": {
            "type": "integer",
            "description": "Lead days.",
            "format": "int32"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "workCenters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonReferenceDto"
            },
            "description": "The work centers associated with the operation"
          },
          "isNestable": {
            "type": "boolean",
            "description": "Indicates if this operation is nestable."
          },
          "instructions": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Instructions.",
            "nullable": true
          },
          "rates": {
            "$ref": "#/components/schemas/DtoOperationRates"
          }
        },
        "additionalProperties": false,
        "description": "Operation definition."
      },
      "OperationRequestFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter operations based on their name.",
            "nullable": true
          },
          "modifiedBeforeUtc": {
            "type": "string",
            "description": "Filters operations modified before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "modifiedAfterUtc": {
            "type": "string",
            "description": "Filters operations modified after (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.\nUseful for polling incrementally instead of re-syncing every operation.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding operations."
      },
      "OperationUpdateDto": {
        "required": [
          "description",
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of operation."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The description of the operation."
          },
          "isOutsideProcessing": {
            "type": "boolean",
            "description": "Specifies whether this is an outside processing operation."
          },
          "setupTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "laborTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "machineTime": {
            "$ref": "#/components/schemas/ItemRoutingOperationTime"
          },
          "machineTimeTrackingEnabled": {
            "type": "boolean",
            "description": "Specifies whether machine tracking is enabled."
          },
          "outsideProcessingCost": {
            "$ref": "#/components/schemas/ItemRoutingOutsideProcessingOperationCost"
          },
          "defaultVendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Default vendor id that will be used for this operation. Please reference /api/vendors endpoint.",
            "nullable": true
          },
          "vendors": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Available vendors.",
            "nullable": true
          },
          "leadDays": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead days.",
            "format": "int32",
            "nullable": true
          },
          "instructions": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Instructions.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of an operation to be updated. This is a full replacement of the publicly-exposed fields.\nInternal-only fields not exposed here (in-process tracking, tolerances, shop rates) are preserved."
      },
      "PaymentTermRequestFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter payment terms based on their name.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding payment terms."
      },
      "PriceBreakItemPriceBreakPointDto": {
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Identifier for this break point. Server-generated; ignored on write.",
            "nullable": true
          },
          "quantity": {
            "maximum": 2147483647,
            "minimum": 2,
            "type": "integer",
            "description": "The quantity at which this break point becomes active. Must be greater than 1\n(the unit/base price covers quantity 1).",
            "format": "int32"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The price per unit at this break point. Required for Price-type sales breaks and all\npurchase (Cost) breaks.",
            "format": "double",
            "nullable": true
          },
          "margin": {
            "type": "number",
            "description": "The margin percentage at this break point. Used when the price break is calculated by Margin.",
            "format": "double",
            "nullable": true
          },
          "showOnPdf": {
            "type": "boolean",
            "description": "Whether this break point should be displayed on customer-facing PDFs (quotes, sales orders).\nHas no effect for purchase price breaks."
          }
        },
        "additionalProperties": false,
        "description": "A single quantity break inside a price break."
      },
      "PriceBreakListPurchasePriceBreaksDto": {
        "type": "object",
        "properties": {
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Restrict to price breaks for the given vendor.",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "Restrict to price breaks in the given currency.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Filters for listing purchase price breaks."
      },
      "PriceBreakListSalesPriceBreaksDto": {
        "type": "object",
        "properties": {
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Restrict to price breaks for the given customer.",
            "nullable": true
          },
          "customerTierId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Restrict to price breaks for the given customer tier.",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "Restrict to price breaks in the given currency.",
            "nullable": true
          },
          "baseOnly": {
            "type": "boolean",
            "description": "When true, include only the item's base price (no customer or customer tier).",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Filters for listing sales price breaks."
      },
      "PriceBreakPurchasePriceBreakDto": {
        "required": [
          "breakPoints",
          "id",
          "itemId",
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the price break."
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the item this price break applies to."
          },
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the vendor this price break applies to."
          },
          "currencyCode": {
            "type": "string",
            "description": "ISO 4217 currency code. Null indicates the company's primary currency.",
            "nullable": true
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "Purchasing unit of measure for this price break. Null indicates the item's default unit of measure.",
            "nullable": true
          },
          "unitPrice": {
            "type": "number",
            "description": "The unit price at quantity 1.",
            "format": "double",
            "nullable": true
          },
          "vendorItemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The vendor's part number for this item, if different from the internal number.",
            "nullable": true
          },
          "vendorItemName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The vendor's part description for this item.",
            "nullable": true
          },
          "breakPoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceBreakItemPriceBreakPointDto"
            },
            "description": "Quantity break points beyond quantity 1."
          },
          "modifiedUtc": {
            "type": "string",
            "description": "When this price break was last modified.",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Purchase (vendor cost) price break for an item."
      },
      "PriceBreakPurchasePriceBreakUpsertDto": {
        "required": [
          "breakPoints",
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the vendor this price break applies to."
          },
          "currencyCode": {
            "type": "string",
            "description": "ISO 4217 currency code. Null is treated as the vendor's currency (or, if the vendor has no\ncurrency, the company's primary currency) for identity matching. When matching an existing\nbreak, that break's stored CurrencyCode is preserved. On insert, the value stored is the\nsupplied value or the vendor's currency if none was supplied.",
            "nullable": true
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "Purchasing unit of measure. Null indicates the item's default unit of measure.\nSame null/default-equivalence rules as FulcrumProduct.PublicApi.Dto.PriceBreak.PurchasePriceBreakUpsertDto.CurrencyCode.",
            "nullable": true
          },
          "unitPrice": {
            "minimum": 0,
            "type": "number",
            "description": "The unit price at quantity 1. Required.",
            "format": "double",
            "nullable": true
          },
          "vendorItemNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The vendor's part number for this item, if different from the internal number.",
            "nullable": true
          },
          "vendorItemName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The vendor's part description for this item.",
            "nullable": true
          },
          "breakPoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceBreakItemPriceBreakPointDto"
            },
            "description": "Quantity break points beyond quantity 1. The complete set of break points is replaced\non each upsert; omit a quantity to remove it."
          }
        },
        "additionalProperties": false,
        "description": "Upsert payload for a purchase (vendor cost) price break.\n            \nIdentity key (item-id is the route parameter):\n  FulcrumProduct.PublicApi.Dto.PriceBreak.PurchasePriceBreakUpsertDto.VendorId, FulcrumProduct.PublicApi.Dto.PriceBreak.PurchasePriceBreakUpsertDto.CurrencyCode, FulcrumProduct.PublicApi.Dto.PriceBreak.PurchasePriceBreakUpsertDto.UnitOfMeasureName.\nIf a price break already exists for this key, it is updated; otherwise a new one is created."
      },
      "PriceBreakSalesPriceBreakDto": {
        "required": [
          "breakPoints",
          "id",
          "itemId",
          "pricingType"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the price break."
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the item this price break applies to."
          },
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the customer this price break applies to. Mutually exclusive with\nFulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakDto.CustomerTierId; null on both means this is the item's base price.",
            "nullable": true
          },
          "customerTierId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the customer tier this price break applies to. Mutually exclusive with\nFulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakDto.CustomerId; null on both means this is the item's base price.",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "ISO 4217 currency code. Null indicates the company's primary currency.",
            "nullable": true
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "Sales unit of measure for this price break. Null indicates the item's default sales unit of measure.",
            "nullable": true
          },
          "pricingType": {
            "$ref": "#/components/schemas/DtoPriceBreakSalesPriceBreakPricingTypeEnum"
          },
          "unitPrice": {
            "type": "number",
            "description": "The unit price at quantity 1. Populated when FulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakDto.PricingType is Price.",
            "format": "double",
            "nullable": true
          },
          "margin": {
            "type": "number",
            "description": "The margin percentage applied at quantity 1. Populated when FulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakDto.PricingType is Margin.",
            "format": "double",
            "nullable": true
          },
          "showOnPdf": {
            "type": "boolean",
            "description": "Whether the unit/base price should be displayed on customer-facing PDFs."
          },
          "breakPoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceBreakItemPriceBreakPointDto"
            },
            "description": "Quantity break points beyond quantity 1."
          },
          "modifiedUtc": {
            "type": "string",
            "description": "When this price break was last modified.",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Sales price break for an item. A sales price break is targeted at one of:\nthe item's base price, a specific customer, or a customer tier."
      },
      "PriceBreakSalesPriceBreakUpsertDto": {
        "required": [
          "breakPoints",
          "pricingType"
        ],
        "type": "object",
        "properties": {
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the customer this price break applies to. Mutually exclusive with\nFulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakUpsertDto.CustomerTierId. Leave both null to upsert the item's base price.",
            "nullable": true
          },
          "customerTierId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of the customer tier this price break applies to. Mutually exclusive with\nFulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakUpsertDto.CustomerId. Leave both null to upsert the item's base price.",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "ISO 4217 currency code. Null indicates the company's primary currency.\nNull and the explicit primary currency code are treated as equivalent for identity matching;\nwhen matching an existing break, that break's stored CurrencyCode is preserved (legacy\nrecords may hold null even after primary is set, and downstream code distinguishes them).\nOn insert, the value is stored exactly as supplied.",
            "nullable": true
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "Sales unit of measure. Null indicates the item's default sales unit of measure.\nSame null/default-equivalence rules as FulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakUpsertDto.CurrencyCode.",
            "nullable": true
          },
          "pricingType": {
            "$ref": "#/components/schemas/DtoPriceBreakSalesPriceBreakPricingTypeEnum"
          },
          "unitPrice": {
            "minimum": 0,
            "type": "number",
            "description": "The unit price at quantity 1. Required when FulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakUpsertDto.PricingType is Price.",
            "format": "double",
            "nullable": true
          },
          "margin": {
            "type": "number",
            "description": "The margin percentage at quantity 1. Required when FulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakUpsertDto.PricingType is Margin.",
            "format": "double",
            "nullable": true
          },
          "showOnPdf": {
            "type": "boolean",
            "description": "Whether the unit/base price should be displayed on customer-facing PDFs."
          },
          "breakPoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PriceBreakItemPriceBreakPointDto"
            },
            "description": "Quantity break points beyond quantity 1. The complete set of break points is replaced\non each upsert; omit a quantity to remove it."
          }
        },
        "additionalProperties": false,
        "description": "Upsert payload for a sales price break.\n            \nIdentity key (item-id is the route parameter):\n  FulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakUpsertDto.CustomerId, FulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakUpsertDto.CustomerTierId, FulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakUpsertDto.CurrencyCode, FulcrumProduct.PublicApi.Dto.PriceBreak.SalesPriceBreakUpsertDto.UnitOfMeasureName.\nIf a price break already exists for this key, it is updated; otherwise a new one is created."
      },
      "PurchaseOrderAppliedTaxDto": {
        "required": [
          "taxAmount",
          "taxLineItemId"
        ],
        "type": "object",
        "properties": {
          "taxLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The id of the PO-level tax line item that generated this tax amount.\nReference /api/purchase-orders/{id}/tax-line-items for full details."
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The tax code id. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxCodeCode": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The tax code identifier string (e.g., \"CA State Tax\").",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "The tax rate applied (as a decimal, e.g., 0.0725 for 7.25%).",
            "format": "double"
          },
          "taxAmount": {
            "type": "number",
            "description": "The calculated tax amount allocated to this line item from this tax line.",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Represents a tax allocation from a PO-level tax line item to an individual line item."
      },
      "PurchaseOrderCreateDto": {
        "required": [
          "type",
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor Id"
          },
          "type": {
            "$ref": "#/components/schemas/PurchaseOrderTypeEnum"
          },
          "contactId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Vendor Contact Id;\ndefaults to the Id of the first contact belonging to the input vendor",
            "nullable": true
          },
          "companyInfoId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Company Information Id;\ndefaults to primary company info Id",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "Currency code override;\ndefaults to vendor currency code override, then the company's primary currency code",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "expectedReceiveDate": {
            "type": "string",
            "description": "PO Expected receipt date",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of purchase order to be created"
      },
      "PurchaseOrderDiscountLineItemDto": {
        "required": [
          "accountingDetails",
          "amount",
          "id",
          "isPercentage",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the discount line."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Line item description",
            "nullable": true
          },
          "isPercentage": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.PurchaseOrder.DiscountLineItem.DiscountLineItemDto.Amount discount is percentage based (else, it's an absolute amount)."
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          },
          "price": {
            "type": "number",
            "description": "The calculated amount of this discount.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a discount line item on a purchase order."
      },
      "PurchaseOrderDto": {
        "required": [
          "companyInfoId",
          "id",
          "number",
          "receivingStatus",
          "status",
          "type",
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Number",
            "format": "int32"
          },
          "issueDate": {
            "type": "string",
            "description": "PO creation date",
            "format": "date-time",
            "nullable": true
          },
          "earliestReceiveDate": {
            "type": "string",
            "description": "Earliest Receive Date",
            "format": "date-time",
            "nullable": true
          },
          "orderDate": {
            "type": "string",
            "description": "PO order date (null until status set to Ordered)",
            "format": "date-time",
            "nullable": true
          },
          "expectedReceiveDate": {
            "type": "string",
            "description": "PO Expected receipt date",
            "format": "date-time",
            "nullable": true
          },
          "promiseDate": {
            "type": "string",
            "description": "PO Promise date.",
            "format": "date-time",
            "nullable": true
          },
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor Id"
          },
          "contactId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor Contact Id. Null for purchase orders that have no contact.",
            "nullable": true
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms key identifier. Please reference /api/payment-terms endpoint.",
            "nullable": true
          },
          "paymentTerms": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "type": {
            "$ref": "#/components/schemas/PurchaseOrderTypeEnum"
          },
          "status": {
            "$ref": "#/components/schemas/PurchaseOrderStatusEnum"
          },
          "receivingStatus": {
            "$ref": "#/components/schemas/PurchaseOrderReceivingStatusEnum"
          },
          "vendorCredit": {
            "type": "number",
            "description": "Vendor credit applied to this purchase order, if applicable",
            "format": "double",
            "nullable": true
          },
          "discount": {
            "type": "number",
            "description": "Discount applied to this purchase order, if applicable",
            "format": "double",
            "nullable": true
          },
          "subTotal": {
            "type": "number",
            "description": "Total cost of this purchase order, sans tax (if applicable)",
            "format": "double"
          },
          "total": {
            "type": "number",
            "description": "Total cost of this purchase order, tax included (if applicable)",
            "format": "double"
          },
          "companyInfoId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Company Information Id;"
          },
          "vendorNote": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The vendor note is a string property that represents a note provided to the vendor.",
            "nullable": true
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Notes",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicates whether this purchase order has been deleted"
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Currency code/denomination associated to this vendor.\nIf not provided, default to the primary currency code for the organization.",
            "nullable": true
          },
          "vendorOrderNumber": {
            "type": "string",
            "description": "The vendor's purchase order number",
            "nullable": true
          },
          "jobReferences": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PurchaseOrderJobReferenceDto"
            },
            "description": "Jobs this purchase order is associated with — associated with the order itself, allocated to\none of its part line items, or carried by an outside-processing line item. One entry per job."
          }
        },
        "additionalProperties": false,
        "description": "Represents a purchase order"
      },
      "PurchaseOrderEnumLineItemReceiptStatusEnum": {
        "enum": [
          "open",
          "partiallyReceived",
          "received"
        ],
        "type": "string",
        "description": "Purchase order line item receipt status"
      },
      "PurchaseOrderFeeLineItemCreateDto": {
        "required": [
          "price"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity. Required for receivable line items.",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item unit price.",
            "format": "double"
          },
          "isReceivable": {
            "type": "boolean",
            "description": "Dictate if this fee is receivable. If not provided, defaults to false.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "unitOfMeasure": {
            "$ref": "#/components/schemas/CommonEnumLineItemUomEnum"
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this fee is taxable. If not provided, defaults to false.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.PurchaseOrder.FeeLineItem.FeeLineItemCreateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.PurchaseOrder.FeeLineItem.FeeLineItemCreateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Indicate if the tax supplied is intended to be an override.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a fee line item on a purchase order."
      },
      "PurchaseOrderFeeLineItemDto": {
        "required": [
          "accountingDetails",
          "id",
          "price"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item unit price.",
            "format": "double"
          },
          "unitOfMeasure": {
            "$ref": "#/components/schemas/CommonEnumLineItemUomEnum"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this fee is taxable.",
            "nullable": true
          },
          "isReceivable": {
            "type": "boolean",
            "description": "Dictate if this fee is receivable.",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Dictate if the tax rate is overridden.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.PurchaseOrder.FeeLineItem.FeeLineItemDto.TaxCodeId is provided and FulcrumProduct.PublicApi.Dto.PurchaseOrder.FeeLineItem.FeeLineItemDto.OverrideTaxRate = true, the provided FulcrumProduct.PublicApi.Dto.PurchaseOrder.FeeLineItem.FeeLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a fee line item on a purchase order."
      },
      "PurchaseOrderFeeLineItemUpdateDto": {
        "required": [
          "price"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity. Required for receivable line items.",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "unitOfMeasure": {
            "$ref": "#/components/schemas/CommonEnumLineItemUomEnum"
          },
          "isReceivable": {
            "type": "boolean",
            "description": "Dictate if this fee is receivable. If not provided, defaults to false.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this fee is taxable. If not provided, defaults to false.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.PurchaseOrder.FeeLineItem.FeeLineItemUpdateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.PurchaseOrder.FeeLineItem.FeeLineItemUpdateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Indicate if the tax supplied is intended to be an override.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a fee line item on a purchase order."
      },
      "PurchaseOrderJobReferenceDto": {
        "required": [
          "id",
          "name",
          "number"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to the referenced job."
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Number of the referenced job.",
            "format": "int32"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the referenced job, or its number when the job is unnamed."
          }
        },
        "additionalProperties": false,
        "description": "A reference to a job."
      },
      "PurchaseOrderLineItemDto": {
        "required": [
          "accountingDetails",
          "id",
          "isTaxable",
          "preDiscountSubTotal",
          "price",
          "quantity",
          "subTotal",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "type": {
            "$ref": "#/components/schemas/PurchaseOrderLineItemTypeEnum"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "discountedPrice": {
            "minimum": 0,
            "type": "number",
            "description": "The line item discounted unit price.",
            "format": "double",
            "nullable": true
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Line item description.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The key identifier for the tax code for the line item.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable."
          },
          "lineItemId": {
            "type": "string",
            "description": "The line item id (if applicable).",
            "nullable": true
          },
          "expectedReceiveDate": {
            "type": "string",
            "description": "Line item Expected receipt date.",
            "format": "date-time",
            "nullable": true
          },
          "subTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, including applicable discounts",
            "format": "double"
          },
          "preDiscountSubTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, before discounts",
            "format": "double"
          },
          "isPercentageDiscount": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.PurchaseOrder.PurchaseOrderLineItemDto.DiscountAmount discount is percentage based (else, it's an absolute amount).",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a generic line item on a purchase order."
      },
      "PurchaseOrderLineItemTaxAllocationResponseDto": {
        "type": "object",
        "properties": {
          "appliedTaxes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PurchaseOrderAppliedTaxDto"
            },
            "description": "Tax amounts allocated to this line item from PO-level tax lines.\nNull if the line item is not taxable or has no tax allocations.",
            "nullable": true
          },
          "totalTax": {
            "type": "number",
            "description": "Total tax amount allocated to this line item across all applicable tax lines.\nNull if the line item is not taxable.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Tax allocation data for a purchase order line item."
      },
      "PurchaseOrderLineItemTypeEnum": {
        "enum": [
          "part",
          "outsideProcessing",
          "tax",
          "discount",
          "fee",
          "vendorCredit"
        ],
        "type": "string",
        "description": "Purchase order line item type"
      },
      "PurchaseOrderListDto": {
        "required": [
          "id",
          "number",
          "receivingStatus",
          "status",
          "type",
          "vendorId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Number",
            "format": "int32"
          },
          "issueDate": {
            "type": "string",
            "description": "PO creation date",
            "format": "date-time",
            "nullable": true
          },
          "orderDate": {
            "type": "string",
            "description": "PO order date (null until status set to Ordered)",
            "format": "date-time",
            "nullable": true
          },
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Vendor Id"
          },
          "type": {
            "$ref": "#/components/schemas/PurchaseOrderTypeEnum"
          },
          "status": {
            "$ref": "#/components/schemas/PurchaseOrderStatusEnum"
          },
          "receivingStatus": {
            "$ref": "#/components/schemas/PurchaseOrderReceivingStatusEnum"
          },
          "expectedReceiveDate": {
            "type": "string",
            "description": "PO Expected receipt date",
            "format": "date-time",
            "nullable": true
          },
          "customFieldData": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom Fields",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "currencyCode": {
            "minLength": 1,
            "type": "string",
            "description": "Currency code/denomination associated to this vendor.\nIf not provided, default to the primary currency code for the organization.",
            "nullable": true
          },
          "vendorOrderNumber": {
            "type": "string",
            "description": "The vendor's purchase order number",
            "nullable": true
          },
          "vendorNote": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The vendor note is a string property that represents a note provided to the vendor.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a purchase order"
      },
      "PurchaseOrderOutsideProcessingLineItemCreateDto": {
        "required": [
          "jobId",
          "operationId"
        ],
        "type": "object",
        "properties": {
          "jobId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Job id associated with this line item."
          },
          "operationId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Operation id associated with this line item."
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity.  If not provided, defaults to Job operation QuantityToMake",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item unit price.  If not provided, defaults to price data stored on Job operation.",
            "format": "double",
            "nullable": true
          },
          "expectedReceiveDate": {
            "type": "string",
            "description": "Expected receipt date for this line item.",
            "format": "date-time",
            "nullable": true
          },
          "promiseDate": {
            "type": "string",
            "description": "Promise date (UTC).",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an outside processing line item on a purchase order."
      },
      "PurchaseOrderOutsideProcessingLineItemDto": {
        "required": [
          "accountingDetails",
          "id",
          "isTaxable",
          "jobId",
          "name",
          "operationId",
          "price",
          "quantity"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Line item name"
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item unit price.",
            "format": "double"
          },
          "jobId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Job id associated with this line item."
          },
          "operationId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Job operation associated with this line item."
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id associated with this line item. Null when the source job operation carries no item."
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictates whether the line item is taxable."
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The line item description.",
            "nullable": true
          },
          "receivedStatus": {
            "$ref": "#/components/schemas/PurchaseOrderEnumLineItemReceiptStatusEnum"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined for the outside processing line item.",
            "nullable": true
          },
          "expectedReceiveDate": {
            "type": "string",
            "description": "Expected receipt date for this line item.",
            "format": "date-time",
            "nullable": true
          },
          "promiseDate": {
            "type": "string",
            "description": "Promise date (UTC).",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an outside processing line item on a purchase order."
      },
      "PurchaseOrderOutsideProcessingLineItemUpdateDto": {
        "type": "object",
        "properties": {
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "expectedReceiveDate": {
            "type": "string",
            "description": "Expected receipt date for this line item.",
            "format": "date-time",
            "nullable": true
          },
          "promiseDate": {
            "type": "string",
            "description": "Promise date (UTC).",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an outside processing line item on a purchase order"
      },
      "PurchaseOrderPartLineItemCreateDto": {
        "required": [
          "itemId"
        ],
        "type": "object",
        "properties": {
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id associated with this line item."
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item unit price. Defaults to item's vendor price, if not provided.",
            "format": "double",
            "nullable": true
          },
          "isTaxExempt": {
            "type": "boolean",
            "description": "Dictate if this line item is tax exempt.  Defaults to item details, if not provided.",
            "nullable": true
          },
          "expectedReceiveDate": {
            "type": "string",
            "description": "Expected receipt date for this line item.",
            "format": "date-time",
            "nullable": true
          },
          "promiseDate": {
            "type": "string",
            "description": "Promise date (UTC).",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a part line item on a purchase order."
      },
      "PurchaseOrderPartLineItemDto": {
        "required": [
          "accountingDetails",
          "discountedPrice",
          "id",
          "isInventoried",
          "isTaxable",
          "itemId",
          "name",
          "preDiscountSubTotal",
          "price",
          "quantity",
          "receivedStatus",
          "subTotal"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "part line item name"
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item unit price.",
            "format": "double"
          },
          "discountedPrice": {
            "minimum": 0,
            "type": "number",
            "description": "The line item discounted unit price.",
            "format": "double"
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id associated with this line item."
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictates whether the line item is taxable."
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Dictate if the tax rate is overridden.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The part line item description.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "receivedStatus": {
            "$ref": "#/components/schemas/PurchaseOrderEnumLineItemReceiptStatusEnum"
          },
          "convertedQuantity": {
            "type": "number",
            "description": "Quantity converted into vendor UoM, if applicable",
            "format": "double",
            "nullable": true
          },
          "subTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, including applicable discounts",
            "format": "double"
          },
          "preDiscountSubTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, before discounts",
            "format": "double"
          },
          "expectedReceiveDate": {
            "type": "string",
            "description": "Expected receipt date for this line item",
            "format": "date-time",
            "nullable": true
          },
          "promiseDate": {
            "type": "string",
            "description": "Promise date (UTC).",
            "format": "date-time",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "General notes associated to this part line item",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "customFieldData": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom Fields",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined for the part line item. This should be used in favor of \"CustomFieldData\".",
            "nullable": true
          },
          "isPercentageDiscount": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.PurchaseOrder.PartLineItem.PartLineItemDto.DiscountAmount discount is percentage based (else, it's an absolute amount).",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "vendorPartNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The vendor's known part line item number.",
            "nullable": true
          },
          "vendorPartDescription": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The vendor's known part line item description.",
            "nullable": true
          },
          "vendorNote": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes intended for the vendor for this part line item",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          },
          "isInventoried": {
            "type": "boolean",
            "description": "Indicate if this item is an inventoried item."
          },
          "jobIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Ids of the jobs this line's material is allocated to."
          }
        },
        "additionalProperties": false,
        "description": "Represents a part line item on a purchase order."
      },
      "PurchaseOrderPartLineItemUpdateDto": {
        "required": [
          "quantity"
        ],
        "type": "object",
        "properties": {
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item unit price. Defaults to item's vendor price, if not provided.",
            "format": "double",
            "nullable": true
          },
          "isTaxExempt": {
            "type": "boolean",
            "description": "Override tax exempt status of the part line item, if present.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "vendorNote": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Notes intended for the vendor for this part line item",
            "nullable": true
          },
          "expectedReceiveDate": {
            "type": "string",
            "description": "Expected receipt date (UTC)",
            "format": "date-time",
            "nullable": true
          },
          "promiseDate": {
            "type": "string",
            "description": "Promise date (UTC).",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a part line item on a purchase order."
      },
      "PurchaseOrderReceivingStatusEnum": {
        "enum": [
          "notReceived",
          "partiallyReceived",
          "received"
        ],
        "type": "string",
        "description": "Purchase order receipt status"
      },
      "PurchaseOrderRequestFindParameters": {
        "type": "object",
        "properties": {
          "numbers": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Filter purchase orders to only given numbers",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/PurchaseOrderStatusEnum"
          },
          "receivingStatus": {
            "$ref": "#/components/schemas/PurchaseOrderReceivingStatusEnum"
          },
          "externalReference": {
            "$ref": "#/components/schemas/CommonExternalReferenceFindDto"
          },
          "includeReceiptData": {
            "type": "boolean",
            "description": "If set to true, receipt data will be included in the results"
          },
          "vendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The vendor id.",
            "nullable": true
          },
          "orderDateFrom": {
            "type": "string",
            "description": "Filter to purchase orders whose order date falls on or after this date. The whole day is\nincluded, so any time component is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "orderDateTo": {
            "type": "string",
            "description": "Filter to purchase orders whose order date falls on or before this date. The whole day is\nincluded, so a purchase order ordered later that same day still matches.",
            "format": "date-time",
            "nullable": true
          },
          "jobId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Filter to purchase orders associated with this job — associated with the order itself,\nallocated to one of its part line items, or carried by an outside-processing line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding purchase orders."
      },
      "PurchaseOrderRequestUpdateStatus": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/PurchaseOrderStatusEnum"
          },
          "paidDate": {
            "type": "string",
            "description": "The date that the purchase order was paid. Should be provided in UTC. Will default to current date/time if not provided when applicable.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Update a purchase order status."
      },
      "PurchaseOrderStatusEnum": {
        "enum": [
          "draft",
          "needsApproval",
          "approved",
          "ordered",
          "paid",
          "cancelled"
        ],
        "type": "string",
        "description": "Purchase order status"
      },
      "PurchaseOrderTaxLineItemDto": {
        "required": [
          "accountingDetails",
          "code",
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "code": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying code. Must be unique."
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.PurchaseOrder.TaxLineItem.TaxLineItemDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.PurchaseOrder.TaxLineItem.TaxLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "Tax amount applied at this rate across the entire purchase order.",
            "format": "double",
            "nullable": true
          },
          "taxCodeEditable": {
            "type": "boolean",
            "description": "Indicates if the tax code used is editable.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a tax line item on a purchase order."
      },
      "PurchaseOrderTypeEnum": {
        "enum": [
          "standard",
          "outsideProcessing",
          "vendorCredit"
        ],
        "type": "string",
        "description": "Purchase order type"
      },
      "PurchaseOrderUpdateDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "vendorNote": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The vendor note is a string property that represents a note provided to the vendor.",
            "nullable": true
          },
          "vendorOrderNumber": {
            "type": "string",
            "description": "Vendor order number associated to a third party system.",
            "nullable": true
          },
          "expectedReceiveDate": {
            "type": "string",
            "description": "PO Expected receipt date (UTC)",
            "format": "date-time",
            "nullable": true
          },
          "promiseDate": {
            "type": "string",
            "description": "PO Promise date (UTC).",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an update on a purchase order."
      },
      "PurchaseOrderVendorCreditLineItemDto": {
        "required": [
          "accountingDetails",
          "id",
          "itemId",
          "lineItemId",
          "name",
          "quantity",
          "vendorCredit"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "line item name"
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "vendorCredit": {
            "minimum": 0,
            "type": "number",
            "description": "The value of the vendor credit.",
            "format": "double"
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id associated with this credit."
          },
          "purchaseOrderId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Parent purchase order id associated with this credit.",
            "nullable": true
          },
          "lineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Part or outside processing line item id associated with this credit."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The line item description.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a vendor credit line item on a purchase order."
      },
      "PurchaseOrderVendorCreditLineItemUpdateDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a vendor credit line item on a purchase order."
      },
      "QuoteCapableToPromiseDto": {
        "required": [
          "runs",
          "status",
          "warnings"
        ],
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/QuoteCapableToPromiseStatus"
          },
          "createdUtc": {
            "type": "string",
            "description": "When this calculation was recorded. Until a newly queued calculation starts, the previous one is returned,\nso compare this with the value read before to tell when a new calculation has replaced it. Null when none\nhas run.",
            "format": "date-time",
            "nullable": true
          },
          "startedUtc": {
            "type": "string",
            "description": "When the latest calculation started. Null when none has run, or when it was refused or failed: a failure\nis recorded without run times.",
            "format": "date-time",
            "nullable": true
          },
          "endedUtc": {
            "type": "string",
            "description": "When the latest calculation ended. Null while it is running, when none has run, or when it was refused or\nfailed.",
            "format": "date-time",
            "nullable": true
          },
          "failureMessage": {
            "type": "string",
            "description": "Why the latest calculation failed, when it did.",
            "nullable": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Messages for the warnings the latest calculation raised."
          },
          "runs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/QuoteCapableToPromiseRunDto"
            },
            "description": "One scenario per job priority, ordered high, moderate, low, then lineItem. Empty unless a calculation\nproduced estimates."
          }
        },
        "additionalProperties": false,
        "description": "The latest capable-to-promise calculation for a quote: when its work could be made."
      },
      "QuoteCapableToPromiseLineDto": {
        "required": [
          "partLineItemId"
        ],
        "type": "object",
        "properties": {
          "partLineItemId": {
            "type": "string",
            "description": "Id of the quote part line item."
          },
          "estimatedStartUtc": {
            "type": "string",
            "description": "When work on the line is estimated to start. Null when it could not be scheduled.",
            "format": "date-time",
            "nullable": true
          },
          "estimatedEndUtc": {
            "type": "string",
            "description": "When work on the line is estimated to end. Null when it could not be scheduled.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The estimate for one quote part line within a capable-to-promise scenario."
      },
      "QuoteCapableToPromisePriority": {
        "enum": [
          "high",
          "moderate",
          "low",
          "lineItem"
        ],
        "type": "string",
        "description": "The job priority a capable-to-promise scenario schedules the quote's work at."
      },
      "QuoteCapableToPromiseRequest": {
        "type": "object",
        "properties": {
          "inventoryFulfillment": {
            "type": "boolean",
            "description": "When true, inventory on hand that is not already demanded elsewhere covers part of each line, and only\nthe remainder is scheduled. Defaults to false."
          },
          "ignoreWarnings": {
            "type": "boolean",
            "description": "When true, the calculation runs even when the current schedule is out of date, which makes it take\nlonger. When false, an out-of-date schedule ends the calculation with a warning instead. Defaults to false."
          }
        },
        "additionalProperties": false,
        "description": "Options for a capable-to-promise calculation on a quote."
      },
      "QuoteCapableToPromiseRunDto": {
        "required": [
          "lines",
          "priority"
        ],
        "type": "object",
        "properties": {
          "priority": {
            "$ref": "#/components/schemas/QuoteCapableToPromisePriority"
          },
          "estimatedStartUtc": {
            "type": "string",
            "description": "The earliest estimated start across the scenario's work. Null when no work was scheduled.",
            "format": "date-time",
            "nullable": true
          },
          "estimatedEndUtc": {
            "type": "string",
            "description": "The latest estimated end across the scenario's work: when the whole quote could be made. Null when no\nwork was scheduled, or when any of its work has no estimated end.",
            "format": "date-time",
            "nullable": true
          },
          "lines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/QuoteCapableToPromiseLineDto"
            },
            "description": "The estimate for each quote part line that needed work scheduled, ordered by `partLineItemId`."
          }
        },
        "additionalProperties": false,
        "description": "The estimate for a quote's work when it is scheduled at one job priority."
      },
      "QuoteCapableToPromiseStatus": {
        "enum": [
          "notRun",
          "running",
          "succeeded",
          "failed"
        ],
        "type": "string",
        "description": "Where the latest capable-to-promise calculation for a quote stands."
      },
      "QuoteCreateDto": {
        "required": [
          "customerId"
        ],
        "type": "object",
        "properties": {
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the customer to be created"
          },
          "billingAddress": {
            "$ref": "#/components/schemas/CommonAddressCreateDto"
          },
          "shippingAddress": {
            "$ref": "#/components/schemas/CommonAddressCreateDto"
          },
          "contact": {
            "$ref": "#/components/schemas/CustomerContactCreateDto"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for the Quote",
            "nullable": true
          },
          "salesPersonId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Sales Person identifier.  Please reference /api/users endpoint.\nIf not provided, the salesperson defined on the customer will be used.",
            "nullable": true
          },
          "crmOpportunity": {
            "$ref": "#/components/schemas/FulcrumProDomainReference"
          },
          "opportunity": {
            "type": "string",
            "description": "CRM Opportunity identifier.",
            "nullable": true
          },
          "notesToCustomer": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "A field for the seller to provide additional details or instructions for the customer relating to the order.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of sales order to be created"
      },
      "QuoteDiscountLineItemDto": {
        "required": [
          "accountingDetails",
          "amount",
          "id",
          "isPercentage",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the discount line."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The name of the discount line.",
            "nullable": true
          },
          "isPercentage": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.Quote.DiscountLineItem.DiscountLineItemDto.Amount discount is percentage based (else, it's an absolute amount)."
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double"
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a discount line item on a quote."
      },
      "QuoteDiscountLineItemUpdateDto": {
        "required": [
          "amount",
          "isPercentage",
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the discount line."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The description of the discount line.",
            "nullable": true
          },
          "isPercentage": {
            "type": "boolean",
            "description": "Indicates whether \"Amount\" value is percentage based or an absolute amount."
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double"
          }
        },
        "additionalProperties": false,
        "description": "Represents a discount line item on a quote."
      },
      "QuoteDto": {
        "required": [
          "createdUtc",
          "customerId",
          "id",
          "number",
          "quotedDate",
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Number",
            "format": "int32"
          },
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Customer identifier. Please reference /api/customers endpoint."
          },
          "quotedDate": {
            "type": "string",
            "description": "Quoted date (generally the creation date but can be post/pre-dated).",
            "format": "date-time"
          },
          "dueDate": {
            "type": "string",
            "description": "The date the quote needs to be completed by. Null when the quote has no due date.",
            "format": "date-time",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/DtoQuotesStatus"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "totalInPrimaryCurrency": {
            "type": "number",
            "description": "The total quote price in local currency of the fulcrum customer",
            "format": "double",
            "nullable": true
          },
          "currencyInfo": {
            "$ref": "#/components/schemas/DomainCurrenciesDocumentCurrencyInfo"
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined for the quote;",
            "nullable": true
          },
          "opportunity": {
            "type": "string",
            "description": "CRM Opportunity identifier.",
            "nullable": true
          },
          "salesPersonId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique identifier of the sales person attached to this sales order.\nPlease reference /api/users endpoints.",
            "nullable": true
          },
          "billingAddress": {
            "$ref": "#/components/schemas/CommonAddressDto"
          },
          "shippingAddresses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonAddressDto"
            },
            "description": "The customer address(es) that the quote contents should be shipped to.",
            "nullable": true
          },
          "companyId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Company identifier. Please reference /api/companies endpoint.",
            "nullable": true
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms key identifier. Please reference /api/payment-terms endpoint.",
            "nullable": true
          },
          "paymentTerms": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "createdUtc": {
            "type": "string",
            "description": "Date this record was created (UTC).",
            "format": "date-time"
          },
          "notesToCustomer": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "A field for the seller to provide additional details or instructions for the customer relating to the order.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a Quote"
      },
      "QuoteFeeLineItemCreateDto": {
        "required": [
          "price"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "unitOfMeasure": {
            "$ref": "#/components/schemas/CommonEnumLineItemUomEnum"
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this fee is taxable.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.Quote.FeeLineItem.QuoteFeeLineItemCreateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.Quote.FeeLineItem.QuoteFeeLineItemCreateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Indicate if the tax supplied is intended to be an override.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a fee line item on a sales order."
      },
      "QuoteFeeLineItemDto": {
        "required": [
          "accountingDetails",
          "id",
          "price"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "unitOfMeasure": {
            "$ref": "#/components/schemas/CommonEnumLineItemUomEnum"
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this fee is taxable.",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Dictate if the tax rate is overridden.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier.",
            "nullable": true
          },
          "taxRate": {
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.Quote.FeeLineItem.QuoteFeeLineItemDto.TaxCodeId is provided and FulcrumProduct.PublicApi.Dto.Quote.FeeLineItem.QuoteFeeLineItemDto.OverrideTaxRate = true, the provided FulcrumProduct.PublicApi.Dto.Quote.FeeLineItem.QuoteFeeLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a fee line item on a sales order."
      },
      "QuoteFeeLineItemUpdateDto": {
        "required": [
          "price"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "unitOfMeasure": {
            "$ref": "#/components/schemas/CommonEnumLineItemUomEnum"
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this fee is taxable.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.Quote.FeeLineItem.QuoteFeeLineItemUpdateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.Quote.FeeLineItem.QuoteFeeLineItemUpdateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Indicate if the tax supplied is intended to be an override.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a fee line item on a sales order."
      },
      "QuotePartLineItemCreateBatchDto": {
        "required": [
          "lineItems"
        ],
        "type": "object",
        "properties": {
          "lineItems": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/QuotePartLineItemCreateDto"
            },
            "description": "The line items to add to a sales order."
          }
        },
        "additionalProperties": false,
        "description": "Represents a batch of part line items to add to a quote."
      },
      "QuotePartLineItemCreateDto": {
        "required": [
          "itemId"
        ],
        "type": "object",
        "properties": {
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id associated with this line item."
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.\nWith `pricingScheme` set to `price`, the line takes this price, and keeps its current price when it is omitted\n(on create, the price the item gives the line).\nWith `pricingScheme` set to `margin`, the price is derived from the line's margin and cost, and a non-zero price\nthat differs from the line's current price (on create, any non-zero price) is rejected with a 400.\nWithout `pricingScheme`, the line is priced under its current scheme: a margin-priced line derives its price\nfrom its margin, a line with quantity price breaks takes the price of the break that applies at its quantity, and\nany other line takes this price, or 0 when it is omitted.",
            "format": "double",
            "nullable": true
          },
          "pricingScheme": {
            "$ref": "#/components/schemas/CommonEnumPricingSchemeInputEnum"
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The part line item description.  Defaults to the item's description if none specified.",
            "nullable": true
          },
          "internalNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The line item internal notes",
            "nullable": true
          },
          "itemNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The line item notes.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.Quote.PartLineItem.QuotePartLineItemCreateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.Quote.PartLineItem.QuotePartLineItemCreateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Indicate if the tax supplied is intended to be an override.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "isPercentageDiscount": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.Quote.PartLineItem.QuotePartLineItemCreateDto.DiscountAmount discount is percentage based (else, it's an absolute amount).",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a part line item on a quote."
      },
      "QuotePartLineItemDto": {
        "required": [
          "accountingDetails",
          "discountedPrice",
          "id",
          "isTaxable",
          "itemId",
          "preDiscountSubTotal",
          "price",
          "quantity",
          "subTotal"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "discountedPrice": {
            "minimum": 0,
            "type": "number",
            "description": "The discounted line item price.",
            "format": "double"
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id associated with this line item."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The part line item description.  Defaults to the item's description if none specified.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable."
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.Quote.PartLineItem.QuotePartLineItemDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.Quote.PartLineItem.QuotePartLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Dictate if the tax rate is overridden.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "isPercentageDiscount": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.Quote.PartLineItem.QuotePartLineItemDto.DiscountAmount discount is percentage based (else, it's an absolute amount).",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "subTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, including applicable discounts",
            "format": "double"
          },
          "preDiscountSubTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, before discounts",
            "format": "double"
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined for the part line item;",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          },
          "costBreakdown": {
            "$ref": "#/components/schemas/CommonCostBreakdownDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a part line item on a quote."
      },
      "QuotePartLineItemUpdateDto": {
        "type": "object",
        "properties": {
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.\nWith `pricingScheme` set to `price`, the line takes this price, and keeps its current price when it is omitted\n(on create, the price the item gives the line).\nWith `pricingScheme` set to `margin`, the price is derived from the line's margin and cost, and a non-zero price\nthat differs from the line's current price (on create, any non-zero price) is rejected with a 400.\nWithout `pricingScheme`, the line is priced under its current scheme: a margin-priced line derives its price\nfrom its margin, a line with quantity price breaks takes the price of the break that applies at its quantity, and\nany other line takes this price, or 0 when it is omitted.",
            "format": "double",
            "nullable": true
          },
          "pricingScheme": {
            "$ref": "#/components/schemas/CommonEnumPricingSchemeInputEnum"
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The part line item description.  Defaults to the item's description if none specified.",
            "nullable": true
          },
          "internalNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The line item internal notes",
            "nullable": true
          },
          "itemNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The line item notes.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.Quote.PartLineItem.QuotePartLineItemUpdateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.Quote.PartLineItem.QuotePartLineItemUpdateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Indicate if the tax supplied is intended to be an override.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "isPercentageDiscount": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.Quote.PartLineItem.QuotePartLineItemUpdateDto.DiscountAmount discount is percentage based (else, it's an absolute amount).",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a part line item on a quote."
      },
      "QuoteRequestFindParameters": {
        "type": "object",
        "properties": {
          "numbers": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Filter quotes to only given numbers",
            "nullable": true
          },
          "externalReference": {
            "$ref": "#/components/schemas/CommonExternalReferenceFindDto"
          },
          "status": {
            "$ref": "#/components/schemas/DtoQuotesStatus"
          },
          "modifiedAfterUtc": {
            "type": "string",
            "description": "Filter to quote records modified after the given datetime (in UTC)",
            "format": "date-time",
            "nullable": true
          },
          "quotedDateFrom": {
            "type": "string",
            "description": "Filter to quotes whose quoted date falls on or after this date. The whole day is included, so\nany time component is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "quotedDateTo": {
            "type": "string",
            "description": "Filter to quotes whose quoted date falls on or before this date. The whole day is included, so\na quote quoted later that same day still matches.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding quotes."
      },
      "QuoteRequestUpdateQuoteStatusRequest": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/DtoQuoteUpdateQuotesStatus"
          }
        },
        "additionalProperties": false,
        "description": "Update a Quote status."
      },
      "QuoteTaxLineItemCreateDto": {
        "type": "object",
        "properties": {
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.\nIf FulcrumProduct.PublicApi.Dto.Quote.TaxLineItem.QuoteTaxLineItemCreateDto.AvalaraOptions is provided, FulcrumProduct.PublicApi.Dto.Quote.TaxLineItem.QuoteTaxLineItemCreateDto.TaxCodeId will be ignored.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.Quote.TaxLineItem.QuoteTaxLineItemCreateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.Quote.TaxLineItem.QuoteTaxLineItemCreateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "avalaraOptions": {
            "$ref": "#/components/schemas/DtoCommonAvalaraOptions"
          }
        },
        "additionalProperties": false,
        "description": "Represents a tax line item on a quote."
      },
      "QuoteTaxLineItemDto": {
        "required": [
          "accountingDetails",
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.Quote.TaxLineItem.QuoteTaxLineItemDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.Quote.TaxLineItem.QuoteTaxLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "avalaraOptions": {
            "$ref": "#/components/schemas/DtoCommonAvalaraOptions"
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a tax line item on a Quote."
      },
      "QuoteTaxLineItemUpdateDto": {
        "type": "object",
        "properties": {
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.\nIf FulcrumProduct.PublicApi.Dto.Quote.TaxLineItem.QuoteTaxLineItemUpdateDto.AvalaraOptions is provided, FulcrumProduct.PublicApi.Dto.Quote.TaxLineItem.QuoteTaxLineItemUpdateDto.TaxCodeId will be ignored.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.Quote.TaxLineItem.QuoteTaxLineItemUpdateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.Quote.TaxLineItem.QuoteTaxLineItemUpdateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "avalaraOptions": {
            "$ref": "#/components/schemas/DtoCommonAvalaraOptions"
          }
        },
        "additionalProperties": false,
        "description": "Represents a tax line item on a quote."
      },
      "QuoteUpdateDto": {
        "type": "object",
        "properties": {
          "billingAddress": {
            "$ref": "#/components/schemas/CommonAddressCreateDto"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for the Quote",
            "nullable": true
          },
          "dueDate": {
            "type": "string",
            "description": "The date the quote needs to be completed by. Only the calendar date is used, exactly as\nwritten; any time or UTC offset is ignored. Omitting the field or sending null on an update\nleaves the stored due date alone — to clear it, patch /dueDate with null.",
            "format": "date-time",
            "nullable": true
          },
          "opportunity": {
            "type": "string",
            "description": "CRM Opportunity identifier.",
            "nullable": true
          },
          "salesPersonId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Sales Person identifier.  Please reference /api/users endpoint.",
            "nullable": true
          },
          "notesToCustomer": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "A field for the seller to provide additional details or instructions for the customer relating to the order.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of quote to be updated"
      },
      "ReceivingLineItemReceiptLineItemCreateDto": {
        "required": [
          "lineItemId",
          "quantityReceived"
        ],
        "type": "object",
        "properties": {
          "lineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of the line item corresponding to this receiving."
          },
          "quantityReceived": {
            "type": "number",
            "description": "Quantity of the associated item that has been received (non-cumulative).",
            "format": "double"
          },
          "lotNumber": {
            "type": "string",
            "description": "Lot number to receive the item into.",
            "nullable": true
          },
          "locationId": {
            "type": "string",
            "description": "Location to receive the item into. Please reference /api/locations endpoint.",
            "nullable": true
          },
          "expirationDate": {
            "type": "string",
            "description": "Expiration date indicating when this receiving is good until.",
            "format": "date-time",
            "nullable": true
          },
          "fullyReceived": {
            "type": "boolean",
            "description": "Indicate if this is fully received.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents creating a receiving object on a purchase order"
      },
      "ReceivingLineItemReceiptLineItemDto": {
        "required": [
          "fullyReceived",
          "id",
          "lineItemId",
          "rolledBack"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "lineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id of the purchase order line item corresponding to this update"
          },
          "fullyReceived": {
            "type": "boolean",
            "description": "Indicates whether the entire quantity of this line item have been received"
          },
          "rolledBack": {
            "type": "boolean",
            "description": "Indicates whether this update is active."
          },
          "quantityReceived": {
            "type": "number",
            "description": "Quantity of the associated item that has been received on this update in the specified unit of measure (non-cumulative)",
            "format": "double",
            "nullable": true
          },
          "unitOfMeasureMultiplier": {
            "type": "number",
            "description": "If the receipt has a different unit of measure than the item is stored in fulcrum, you would use this multiplier with the QuantityReceived to get the amount you received into\nFulcrum.",
            "format": "double"
          },
          "convertedQuantityReceived": {
            "type": "number",
            "description": "Quantity of the associated item that has been received in Fulcrum's unit of measure",
            "format": "double",
            "readOnly": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "unitPrice": {
            "type": "number",
            "description": "Price of the purchase order line received against, per Fulcrum's unit of measure, so it\nmultiplies directly with `convertedQuantityReceived`. Null means there is no price,\nnot a price of zero. Supplied only by the receipts list endpoint.",
            "format": "double",
            "nullable": true
          },
          "lineItemType": {
            "$ref": "#/components/schemas/PurchaseOrderLineItemTypeEnum"
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the item on the purchase order line received against: the part for a part line, the item\nbeing processed for an outside processing line. Null on a fee line, on an outside processing line\nwith no item, on a sales order receipt and on a line that no longer resolves. Supplied only by the receipts list endpoint.",
            "nullable": true
          },
          "unitCost": {
            "type": "number",
            "description": "Cost per unit in Fulcrum's unit of measure, in the primary currency, excluding tax and landed cost: the\nbilled unit price when a billed subtotal is entered, otherwise the line's price after its own discount, at\nthe PO's exchange rate.\nTogether with `unitTax` and `landedCost`, the tax and landed cost Fulcrum applies when it\nrevalues a receipt, the line is valued at\n`convertedQuantityReceived × (unitCost + unitTax) + landedCost`, or\n`convertedQuantityReceived × unitCost + landedCost` excluding tax.\nOn an outside processing line this is the value job cost uses. On a part line the inventory transaction\ncan differ: a receipt entered after the bill is valued at the purchase order price, a bill changed after\nthe inventory adjustment cutoff does not revalue older receipts, on a discounted line with no billed\nsubtotal inventory holds the price before the discount, and on a line that is not taxable but has an\noverridden tax rate receiving adds that tax until the receipt is revalued. Rolled-back lines are populated\nas well; skip them. Null on a fee line, on a sales order receipt and on a line that no longer resolves.\nSupplied only by the receipts list endpoint.",
            "format": "double",
            "nullable": true
          },
          "unitTax": {
            "type": "number",
            "description": "Tax per unit in Fulcrum's unit of measure, in the primary currency, that Fulcrum applies to this line\nwhen it revalues a receipt; zero when the line is not taxed. See `unitCost` for how the three\nvalues combine. Null where `unitCost` is null. Supplied only by the receipts list endpoint.",
            "format": "double",
            "nullable": true
          },
          "landedCost": {
            "type": "number",
            "description": "Total landed cost allocated to this receipt line (not per unit), in the primary currency; zero when none\nis allocated. Null where `unitCost` is null. Supplied only by the receipts list endpoint.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a line item on a receipt for a purchase or sales order"
      },
      "ReceivingLineItemReceiptLineItemUpdateDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this receipt line item object.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a receiving line item on a purchase order or sales order receiving record"
      },
      "ReceivingReceiptCreateDto": {
        "required": [
          "lines",
          "orderId",
          "orderType"
        ],
        "type": "object",
        "properties": {
          "orderType": {
            "$ref": "#/components/schemas/CommonEnumOrderType"
          },
          "orderId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of parent order to which this receipt belongs"
          },
          "lines": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemCreateDto"
            },
            "description": "Line items"
          }
        },
        "additionalProperties": false,
        "description": "Represents creating a receiving object on an entity"
      },
      "ReceivingReceiptDto": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "receivedBy": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Id of the user who received the item(s)",
            "nullable": true,
            "readOnly": true
          },
          "number": {
            "type": "number",
            "description": "Number",
            "format": "double",
            "nullable": true
          },
          "date": {
            "type": "string",
            "description": "Received date",
            "format": "date-time",
            "nullable": true
          },
          "dateOriginal": {
            "type": "string",
            "description": "Original received date",
            "format": "date-time",
            "nullable": true
          },
          "dateOverride": {
            "type": "string",
            "description": "Override received date",
            "format": "date-time",
            "nullable": true
          },
          "accountingHeldUtc": {
            "type": "string",
            "description": "Set while the receipt's accounting events are withheld because it contains material held\nfor incoming inspection (tenant invoice timing = after-inspection). Held receipts are\nexcluded from the receipt list until their inspections resolve; cleared when the deferred\nevents fire.",
            "format": "date-time",
            "nullable": true
          },
          "orderType": {
            "$ref": "#/components/schemas/CommonEnumOrderType"
          },
          "orderId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of parent order to which this receipt belongs",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this receipt object.",
            "nullable": true
          },
          "lines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReceivingLineItemReceiptLineItemDto"
            },
            "description": "Receipt Line item data."
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "invoiceNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The vendor invoice invoice number associated to the receipt.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a receiving object"
      },
      "ReceivingReceiptUpdateDto": {
        "required": [
          "receivedBy"
        ],
        "type": "object",
        "properties": {
          "receivedBy": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id of the user who received the item(s)"
          },
          "date": {
            "type": "string",
            "description": "Received date override.  If not provided,\nreceipt date will default to the date the object was initially created.",
            "format": "date-time",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this receipt object.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a receiving object on a purchase order"
      },
      "ReceivingRequestListFindParameters": {
        "type": "object",
        "properties": {
          "salesOrderIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Include receipts for specific sales order ids",
            "nullable": true
          },
          "purchaseOrderIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Include receipts for specific purchase order ids",
            "nullable": true
          },
          "receiptIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Include receipts with specific ids",
            "nullable": true
          },
          "includeReceiptLines": {
            "type": "boolean",
            "description": "If set to true, receipt line items will be included in the results"
          },
          "externalReference": {
            "$ref": "#/components/schemas/CommonExternalReferenceFindDto"
          },
          "receivedDateFrom": {
            "type": "string",
            "description": "Inclusive lower bound on the receipt's effective received date, which is its received-date\noverride when one is set and its recorded received date otherwise. A whole day in the shop's\ntimezone; any time of day supplied is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "receivedDateTo": {
            "type": "string",
            "description": "Inclusive upper bound on that same effective received date. A whole day in the shop's\ntimezone; any time of day supplied is ignored.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding receipts."
      },
      "RoutingDataFullRoutingMakeSummaryDto": {
        "type": "object",
        "properties": {
          "itemLevel": {
            "type": "string",
            "nullable": true
          },
          "itemId": {
            "type": "string",
            "nullable": true
          },
          "itemName": {
            "type": "string",
            "nullable": true
          },
          "routingId": {
            "type": "string",
            "nullable": true
          },
          "path": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RoutingRequestIptFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter to in process tracking fields whose label contains the given string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding operations on an item's routing."
      },
      "RoutingRequestItemFindParameters": {
        "type": "object",
        "properties": {
          "number": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter to items who's number contains the given string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding input items on an item's routing."
      },
      "RoutingRequestOperationFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter to operations who's name contains the given string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding operations on an item's routing."
      },
      "SalesOrderBlanketLineItemDto": {
        "required": [
          "accountingDetails",
          "discountedPrice",
          "id",
          "isTaxable",
          "itemId",
          "name",
          "preDiscountSubTotal",
          "price",
          "quantity",
          "subTotal"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The line item name."
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "discountedPrice": {
            "minimum": 0,
            "type": "number",
            "description": "The discounted line item price.",
            "format": "double"
          },
          "dueDate": {
            "type": "string",
            "description": "Customer delivery date",
            "format": "date-time",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable."
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Dictate if the tax rate is overridden.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id associated with this line item."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The part line item description.  Defaults to the item's description if none specified.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "internalNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The line item internal notes. Aka production notes.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "isPercentageDiscount": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemDto.DiscountAmount discount is percentage based (else, it's an absolute amount).",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonUrlDto"
            },
            "description": "List of links associated with the line item",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined for the part line item;",
            "nullable": true
          },
          "parentLineId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Identifier pointing to the parent line item (if this part line was sourced from a blanket line item). Please reference /api/sales-order/{salesOrderId}/blanket-line-items/list endpoint.",
            "nullable": true
          },
          "subTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, including applicable discounts",
            "format": "double"
          },
          "preDiscountSubTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, before discounts",
            "format": "double"
          },
          "customerPartNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The customer's known part line item number.",
            "nullable": true
          },
          "customerPartDescription": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The customer's known part line item description.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          },
          "isFullyInvoiced": {
            "type": "boolean",
            "description": "Indicate if this item has been fully invoiced."
          },
          "isInvoiced": {
            "type": "boolean",
            "description": "Indicate if this item has ANY invoices."
          },
          "quantityInvoiced": {
            "minimum": 0,
            "type": "number",
            "description": "Indicate the total quantity that have been invoiced (issued/paid).",
            "format": "double",
            "nullable": true
          },
          "quantityOnInvoices": {
            "minimum": 0,
            "type": "number",
            "description": "Indicate the total quantity that exists on any invoice (including open).",
            "format": "double",
            "nullable": true
          },
          "costBreakdown": {
            "$ref": "#/components/schemas/CommonCostBreakdownDto"
          },
          "children": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SalesOrderPartLineItemDto"
            },
            "description": "Underlying part line items associated to this blanket line."
          }
        },
        "additionalProperties": false,
        "description": "Represents a blanket line item on a sales order."
      },
      "SalesOrderBlanketLineItemUpdateDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a blanket line item on a sales order."
      },
      "SalesOrderCreateDto": {
        "required": [
          "customerId"
        ],
        "type": "object",
        "properties": {
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the customer to be created"
          },
          "orderedDate": {
            "type": "string",
            "description": "The ordered date of the sales order. For supplied values, only the calendar date is used,\nexactly as written; any time or UTC offset is ignored. If not supplied, defaults to the\ncurrent UTC timestamp.",
            "format": "date-time",
            "nullable": true
          },
          "customerPoNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Optional customer supplied purchase order number",
            "nullable": true
          },
          "shippingAddress": {
            "$ref": "#/components/schemas/CommonAddressCreateDto"
          },
          "billingAddress": {
            "$ref": "#/components/schemas/CommonAddressCreateDto"
          },
          "contact": {
            "$ref": "#/components/schemas/CustomerContactCreateDto"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for the Sales Order",
            "nullable": true
          },
          "externalQuoteUrl": {
            "type": "string",
            "description": "A reference URL that points to an external quote entity.",
            "nullable": true
          },
          "dueDate": {
            "type": "string",
            "description": "The due date of the sales order. This indicates the expected date of completion.\nOnly the calendar date is used, exactly as written; any time or UTC offset is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms key identifier. Please reference /api/payment-terms endpoint.",
            "nullable": true
          },
          "salesPersonId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Sales Person identifier. Please reference /api/users endpoint.\nIf not provided, the salesperson defined on the customer will be used.",
            "nullable": true
          },
          "publicNote": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Note to customer. This will appear on PDFs.",
            "nullable": true
          },
          "priority": {
            "$ref": "#/components/schemas/SalesOrderPriority"
          },
          "companyId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Company identifier. Please reference /api/companies endpoint.\nIf not provided, the primary company will be used (if available).",
            "nullable": true
          },
          "productionDueDate": {
            "type": "string",
            "description": "The date that the production of items on the sales order needs to be completed by.\nOnly the calendar date is used, exactly as written; any time or UTC offset is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "shippingMethodId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Shipping method identifier. Please reference /api/shipping-methods endpoint.",
            "nullable": true
          },
          "deposit": {
            "$ref": "#/components/schemas/CommonDepositCreateDto"
          },
          "dropship": {
            "type": "boolean",
            "description": "Marks the order as dropshipped: fulfilled by shipping directly to the end customer.\nDefaults to false if omitted."
          },
          "dropshipCustomerPoNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The end customer's purchase order number for a dropshipped order.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of sales order to be created"
      },
      "SalesOrderDiscountLineItemDto": {
        "required": [
          "accountingDetails",
          "amount",
          "id",
          "isPercentage",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the discount line."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the discount line.",
            "nullable": true
          },
          "isPercentage": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.SalesOrder.DiscountLineItem.DiscountLineItemDto.Amount discount is percentage based (else, it's an absolute amount)."
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "absoluteAmount": {
            "minimum": 0,
            "type": "number",
            "description": "The absolute amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          },
          "price": {
            "type": "number",
            "description": "The calculated amount of this discount.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a discount line item on a sales order."
      },
      "SalesOrderDiscountLineItemUpdateDto": {
        "required": [
          "amount",
          "isPercentage",
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the discount line."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The description of the discount line.",
            "nullable": true
          },
          "isPercentage": {
            "type": "boolean",
            "description": "Indicates whether \"Amount\" value is percentage based or an absolute amount."
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a discount line item on a sales order."
      },
      "SalesOrderDto": {
        "required": [
          "createdUtc",
          "customerId",
          "id",
          "number",
          "orderedDate",
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Number",
            "format": "int32"
          },
          "orderedDate": {
            "type": "string",
            "description": "Sales order ordered date (generally the creation date but can be post/pre-dated).",
            "format": "date-time"
          },
          "customerPoNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "CustomerPoNumber",
            "nullable": true
          },
          "externalQuoteUrl": {
            "type": "string",
            "description": "A reference URL that points to an external quote entity.",
            "nullable": true
          },
          "createdFromQuoteId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique identifier of the quote that this sales order was created from. Please reference /api/quotes endpoints.",
            "nullable": true
          },
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the customer that the sales order is for"
          },
          "deliveryDueDate": {
            "type": "string",
            "description": "The date the SO needs to be delivered to the customer",
            "format": "date-time",
            "nullable": true
          },
          "productionDueDate": {
            "type": "string",
            "description": "The date that production needs to be completed by",
            "format": "date-time",
            "nullable": true
          },
          "sentToProductionDateUtc": {
            "type": "string",
            "description": "The datetime in UTC that the SO status was updated to Send to Production",
            "format": "date-time",
            "nullable": true
          },
          "dropship": {
            "type": "boolean",
            "description": "Indicates the order is dropshipped: fulfilled by shipping directly to the end customer."
          },
          "dropshipCustomerPoNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The end customer's purchase order number for a dropshipped order.",
            "nullable": true
          },
          "billingAddress": {
            "$ref": "#/components/schemas/CommonAddressDto"
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The payment terms assigned to this sales order.",
            "nullable": true
          },
          "paymentTerms": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "discount": {
            "type": "number",
            "description": "Total discount for the SO when a Discount Line as been aded",
            "format": "double",
            "nullable": true
          },
          "subtotal": {
            "type": "number",
            "description": "The sum of the line items this sales order bills, before tax, the discount and any refund are\napplied. Child lines of a blanket-order line are excluded; the parent line carries the amount.",
            "format": "double"
          },
          "salesPersonId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique identifier of the sales person attached to this sales order.\nPlease reference /api/users endpoints.",
            "nullable": true
          },
          "publicNote": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Note to customer. This will appear on PDFs.",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicates whether this sales order has been deleted"
          },
          "companyId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Company identifier. Please reference /api/companies endpoint.",
            "nullable": true
          },
          "createdUtc": {
            "type": "string",
            "description": "Date this record was created (UTC).",
            "format": "date-time"
          },
          "modifiedUtc": {
            "type": "string",
            "description": "Date this record was modified (UTC). Of note, this does account for children items (line items).",
            "format": "date-time",
            "nullable": true
          },
          "usesV3Shipping": {
            "type": "boolean",
            "description": "Indicate if this sales order uses V3 shipping."
          },
          "status": {
            "$ref": "#/components/schemas/SalesOrderStatus"
          },
          "priority": {
            "$ref": "#/components/schemas/SalesOrderPriority"
          },
          "shipByDate": {
            "type": "string",
            "description": "The date this sales order should ship by, as shown on the sales order in the app: the earliest ship by\ndate across the order's non-cancelled shipments, or, when no shipment has one, the earliest delivery\ndue date less the customer's shipping lead time.",
            "format": "date-time",
            "nullable": true
          },
          "deposit": {
            "$ref": "#/components/schemas/CommonDepositDto"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "contact": {
            "$ref": "#/components/schemas/CustomerContactDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a sales order"
      },
      "SalesOrderFeeLineItemCreateDto": {
        "required": [
          "price"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.\nIf this value is not provided and the name matches a defined \"default fee\", the description\non the \"default fee\" will be used.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.\nIf this value is not provided and the name matches a defined \"default fee\", the accounting code\non the \"default fee\" will be used.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this fee is taxable.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.SalesOrder.FeeLineItem.FeeLineItemCreateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.SalesOrder.FeeLineItem.FeeLineItemCreateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Indicate if the tax supplied is intended to be an override.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a fee line item on a sales order."
      },
      "SalesOrderFeeLineItemDto": {
        "required": [
          "accountingDetails",
          "id",
          "price"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "unitOfMeasure": {
            "$ref": "#/components/schemas/CommonEnumLineItemUomEnum"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this fee is taxable.",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Dictate if the tax rate is overridden.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier.",
            "nullable": true
          },
          "taxRate": {
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.SalesOrder.FeeLineItem.FeeLineItemDto.TaxCodeId is provided and FulcrumProduct.PublicApi.Dto.SalesOrder.FeeLineItem.FeeLineItemDto.OverrideTaxRate = true, the provided FulcrumProduct.PublicApi.Dto.SalesOrder.FeeLineItem.FeeLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a fee line item on a sales order."
      },
      "SalesOrderFeeLineItemUpdateDto": {
        "required": [
          "price"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this fee is taxable.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.SalesOrder.FeeLineItem.FeeLineItemUpdateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.SalesOrder.FeeLineItem.FeeLineItemUpdateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Indicate if the tax supplied is intended to be an override.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a fee line item on a sales order."
      },
      "SalesOrderLineItemDto": {
        "required": [
          "accountingDetails",
          "id",
          "isTaxable",
          "preDiscountSubTotal",
          "price",
          "subTotal",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "lineItemId": {
            "type": "string",
            "description": "The line item id (if applicable).",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/SalesOrderLineItemTypeEnum"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "discountedPrice": {
            "minimum": 0,
            "type": "number",
            "description": "The line item discounted unit price (if applicable).",
            "format": "double",
            "nullable": true
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose name for this entity.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Line item description.",
            "nullable": true
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable."
          },
          "subTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, including applicable discounts",
            "format": "double"
          },
          "preDiscountSubTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, before discounts",
            "format": "double"
          },
          "isPercentageDiscount": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.SalesOrder.SalesOrderLineItemDto.DiscountAmount discount is percentage based (else, it's an absolute amount).",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined for the sales order part line item;",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a generic line item on a sales order."
      },
      "SalesOrderLineItemTypeEnum": {
        "enum": [
          "part",
          "shipping",
          "tax",
          "discount",
          "fee",
          "refund"
        ],
        "type": "string",
        "description": "Sales order line item type"
      },
      "SalesOrderPartLineItemCreateBatchDto": {
        "required": [
          "lineItems"
        ],
        "type": "object",
        "properties": {
          "lineItems": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SalesOrderPartLineItemCreateDto"
            },
            "description": "The line items to add to a sales order."
          }
        },
        "additionalProperties": false,
        "description": "Represents a batch of part line items to add to a sales order."
      },
      "SalesOrderPartLineItemCreateDto": {
        "required": [
          "itemId"
        ],
        "type": "object",
        "properties": {
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id associated with this line item."
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.\nNote, if a price break exists for the item being added (vendor price breaks, item price breaks, etc), this value will be ignored\nas it is quantity-driven based on the price breaks that do/will exist, unless `pricingScheme` is `price`.\nIf this value is not provided and no price breaks exist, the default will be 0.\nWith `pricingScheme` set to `margin`, any non-zero price is rejected with a 400.",
            "format": "double",
            "nullable": true
          },
          "pricingScheme": {
            "$ref": "#/components/schemas/CommonEnumPricingSchemeInputEnum"
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemCreateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemCreateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Indicate if the tax supplied is intended to be an override.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The part line item description.  Defaults to the item's description if none specified.",
            "nullable": true
          },
          "internalNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The line item internal notes",
            "nullable": true
          },
          "itemNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The line item notes (visible in job tracking).",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "isPercentageDiscount": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemCreateDto.DiscountAmount discount is percentage based (else, it's an absolute amount).",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonUrlDto"
            },
            "description": "A list of links/urls to associated with the line item.",
            "nullable": true
          },
          "deliveryDate": {
            "type": "string",
            "description": "The delivery date for the line item.\nOnly the calendar date is used, exactly as written; any time or UTC offset is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "The unit of measure to apply. If left blank, the default unit of measure for the item will be applied.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.\nIf this value is not provided and the name matches a defined \"default fee\", the accounting code\non the \"default fee\" will be used.",
            "nullable": true
          },
          "isCustomerItem": {
            "type": "boolean",
            "description": "Determines whether or not to display the customer part number and customer part description.",
            "nullable": true
          },
          "customerPartNumber": {
            "type": "string",
            "description": "Used for the part number on customer facing documents when IsCustomerItem is true",
            "nullable": true
          },
          "customerPartDescription": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Used for the description on customer facing documents when IsCustomerItem is true",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a part line item on a sales order."
      },
      "SalesOrderPartLineItemDto": {
        "required": [
          "accountingDetails",
          "discountedPrice",
          "id",
          "isTaxable",
          "itemId",
          "name",
          "preDiscountSubTotal",
          "price",
          "quantity",
          "subTotal"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The line item name."
          },
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.",
            "format": "double"
          },
          "discountedPrice": {
            "minimum": 0,
            "type": "number",
            "description": "The discounted line item price.",
            "format": "double"
          },
          "dueDate": {
            "type": "string",
            "description": "Customer delivery date",
            "format": "date-time",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable."
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Dictate if the tax rate is overridden.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Item id associated with this line item."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The part line item description.  Defaults to the item's description if none specified.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "internalNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The line item internal notes. Aka production notes.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "isPercentageDiscount": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemDto.DiscountAmount discount is percentage based (else, it's an absolute amount).",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonUrlDto"
            },
            "description": "List of links associated with the line item",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined for the part line item;",
            "nullable": true
          },
          "parentLineId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Identifier pointing to the parent line item (if this part line was sourced from a blanket line item). Please reference /api/sales-order/{salesOrderId}/blanket-line-items/list endpoint.",
            "nullable": true
          },
          "subTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, including applicable discounts",
            "format": "double"
          },
          "preDiscountSubTotal": {
            "minimum": 0,
            "type": "number",
            "description": "Total line item cost, before discounts",
            "format": "double"
          },
          "customerPartNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The customer's known part line item number.",
            "nullable": true
          },
          "customerPartDescription": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The customer's known part line item description.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          },
          "isFullyInvoiced": {
            "type": "boolean",
            "description": "Indicate if this item has been fully invoiced."
          },
          "isInvoiced": {
            "type": "boolean",
            "description": "Indicate if this item has ANY invoices."
          },
          "quantityInvoiced": {
            "minimum": 0,
            "type": "number",
            "description": "Indicate the total quantity that have been invoiced (issued/paid).",
            "format": "double",
            "nullable": true
          },
          "quantityOnInvoices": {
            "minimum": 0,
            "type": "number",
            "description": "Indicate the total quantity that exists on any invoice (including open).",
            "format": "double",
            "nullable": true
          },
          "costBreakdown": {
            "$ref": "#/components/schemas/CommonCostBreakdownDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a part line item on a sales order."
      },
      "SalesOrderPartLineItemFullRoutingInputMaterialUpdateDto": {
        "required": [
          "costing"
        ],
        "type": "object",
        "properties": {
          "costing": {
            "$ref": "#/components/schemas/CommonEnumMaterialRequirementCostingEnum"
          },
          "routingStepId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The routing step id.\nThis value should be the Id of an operation on the routing being edited, as returned by that routing's operations list\n(for example items/{itemId}/routing/operations/list, or the sales-order part line item routing's operations/list).",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Update an input material on a sales order part line item's routing"
      },
      "SalesOrderPartLineItemInputItemCreateBatchDto": {
        "required": [
          "lineItems"
        ],
        "type": "object",
        "properties": {
          "lineItems": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ItemRoutingInputItemCreateDto"
            },
            "description": "The input items to add to an item."
          }
        },
        "additionalProperties": false,
        "description": "Represents a batch of input items to add to an item."
      },
      "SalesOrderPartLineItemUpdateDto": {
        "type": "object",
        "properties": {
          "quantity": {
            "minimum": 0,
            "type": "number",
            "description": "The line item quantity",
            "format": "double"
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "The line item price.\nNote, if a price break exists for the item being added (vendor price breaks, item price breaks, etc), this value will be ignored\nas it is quantity-driven based on the price breaks that do/will exist, unless `pricingScheme` is `price`.\nIf this value is not provided and no price breaks exist, the default will be 0.\nWith `pricingScheme` set to `margin`, a non-zero price that differs from the line's current price is rejected\nwith a 400.",
            "format": "double",
            "nullable": true
          },
          "pricingScheme": {
            "$ref": "#/components/schemas/CommonEnumPricingSchemeInputEnum"
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemUpdateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemUpdateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Indicate if the tax supplied is intended to be an override.",
            "nullable": true
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The part line item description.  Defaults to the item's description if none specified.",
            "nullable": true
          },
          "internalNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The line item internal notes. Aka production notes.",
            "nullable": true
          },
          "itemNotes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "The line item notes (visible in job tracking).",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "isPercentageDiscount": {
            "type": "boolean",
            "description": "Indicates whether FulcrumProduct.PublicApi.Dto.SalesOrder.PartLineItem.PartLineItemUpdateDto.DiscountAmount discount is percentage based (else, it's an absolute amount).",
            "nullable": true
          },
          "discountAmount": {
            "type": "number",
            "description": "The amount of the discount.",
            "format": "double",
            "nullable": true
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonUrlDto"
            },
            "description": "List of links associated with the line item.",
            "nullable": true
          },
          "deliveryDate": {
            "type": "string",
            "description": "The Delivery Date for the line item.\nOnly the calendar date is used, exactly as written; any time or UTC offset is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "unitOfMeasureName": {
            "type": "string",
            "description": "The unit of measure to apply. If left blank, the existing unit of measure on the line item will be retained.",
            "nullable": true
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.\nIf this value is not provided and the name matches a defined \"default fee\", the accounting code\non the \"default fee\" will be used.",
            "nullable": true
          },
          "isCustomerItem": {
            "type": "boolean",
            "description": "Determines whether or not to display the customer part number and customer part description.",
            "nullable": true
          },
          "customerPartNumber": {
            "type": "string",
            "description": "Used for the part number on customer facing documents when IsCustomerItem is true",
            "nullable": true
          },
          "customerPartDescription": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Used for the description on customer facing documents when IsCustomerItem is true",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a part line item on a sales order."
      },
      "SalesOrderPriority": {
        "enum": [
          "low",
          "moderate",
          "high"
        ],
        "type": "string",
        "description": "Priority of the sales order"
      },
      "SalesOrderRefundLineItemCreateDto": {
        "required": [
          "refundAmount",
          "refundedLineId",
          "refundQuantity"
        ],
        "type": "object",
        "properties": {
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The refund line item description.  Defaults to the item's description if none specified.",
            "nullable": true
          },
          "refundedLineId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The related, original line id that was refunded."
          },
          "refundQuantity": {
            "minimum": 0,
            "type": "number",
            "description": "The quantity to be refunded.",
            "format": "double"
          },
          "refundAmount": {
            "minimum": 0,
            "type": "number",
            "description": "The refund amount.",
            "format": "double"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "refundReasonCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Refund reason code key identifier. Please reference /api/refund-reason-codes endpoint.",
            "nullable": true
          },
          "isReturn": {
            "type": "boolean",
            "description": "Indicate if a return is expected.",
            "nullable": true
          },
          "returnQuantity": {
            "type": "number",
            "description": "The quantity to be returned.",
            "format": "double",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a refund line item on a sales order."
      },
      "SalesOrderRefundLineItemDto": {
        "required": [
          "accountingDetails",
          "id",
          "name",
          "refundAmount",
          "refundedLineId",
          "refundQuantity"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "refundedLineId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The related, original line id that was refunded."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The line item name."
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The refund line item description.  Defaults to the item's description if none specified.",
            "nullable": true
          },
          "refundQuantity": {
            "minimum": 0,
            "type": "number",
            "description": "The quantity to be refunded.",
            "format": "double"
          },
          "refundAmount": {
            "minimum": 0,
            "type": "number",
            "description": "The refund amount.",
            "format": "double"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "refundReasonCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Refund reason code key identifier. Please reference /api/refund-reason-codes endpoint.",
            "nullable": true
          },
          "isReturn": {
            "type": "boolean",
            "description": "Indicate if a return is expected.",
            "nullable": true
          },
          "returnQuantity": {
            "type": "number",
            "description": "The quantity to be returned.",
            "format": "double",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Refund line item."
      },
      "SalesOrderRefundLineItemUpdateDto": {
        "required": [
          "refundAmount",
          "refundQuantity"
        ],
        "type": "object",
        "properties": {
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The refund line item description.",
            "nullable": true
          },
          "refundQuantity": {
            "minimum": 0,
            "type": "number",
            "description": "The quantity to be refunded.",
            "format": "double"
          },
          "refundAmount": {
            "minimum": 0,
            "type": "number",
            "description": "The refund amount.",
            "format": "double"
          },
          "accountingCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Accounting code key identifier. Please reference /api/accounting-codes endpoint.",
            "nullable": true
          },
          "refundReasonCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Refund reason code key identifier. Please reference /api/refund-reason-codes endpoint.",
            "nullable": true
          },
          "isReturn": {
            "type": "boolean",
            "description": "Indicate if a return is expected.",
            "nullable": true
          },
          "returnQuantity": {
            "minimum": 0,
            "type": "number",
            "description": "The quantity to be returned.",
            "format": "double",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a refund line item on a sales order."
      },
      "SalesOrderRequestFindParameters": {
        "type": "object",
        "properties": {
          "numbers": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Filter sales orders to only given numbers",
            "nullable": true
          },
          "externalReference": {
            "$ref": "#/components/schemas/CommonExternalReferenceFindDto"
          },
          "status": {
            "$ref": "#/components/schemas/SalesOrderStatus"
          },
          "externalQuoteUrls": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter sales orders to those matching an external quote URL.",
            "nullable": true
          },
          "createdFromQuoteId": {
            "type": "string",
            "description": "Filter sales orders created from the specific quote",
            "nullable": true
          },
          "customerPoNumber": {
            "type": "string",
            "description": "Filter sales orders to those whose customer purchase-order number matches this one. Matched\ncase-insensitively against the value as given (trimmed) and against its normalized form, which drops a\nleading label such as \"PO#\" or \"P.O. Number:\" and collapses whitespace — so \"PO# 4500123456\" finds an\norder stored as either \"PO# 4500123456\" or \"4500123456\". An order whose stored number is longer than 100\ncharacters is never found, and a value with no form of 100 characters or fewer matches no orders, as does\na value longer than 1000 characters once trimmed. Whitespace-only is treated as absent, as it is for every\nstring filter.",
            "nullable": true
          },
          "customerId": {
            "type": "string",
            "description": "Filter sales orders to those placed by exactly this customer.",
            "nullable": true
          },
          "createdBeforeUtc": {
            "type": "string",
            "description": "Filters created before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "createdAfterUtc": {
            "type": "string",
            "description": "Filters created after (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "modifiedBeforeUtc": {
            "type": "string",
            "description": "Filters modified before (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "modifiedAfterUtc": {
            "type": "string",
            "description": "Filters modified after (exclusive) this parameter in UTC time. If no time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding sales orders."
      },
      "SalesOrderRequestUpdateStatus": {
        "required": [
          "status"
        ],
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/SalesOrderStatus"
          }
        },
        "additionalProperties": false,
        "description": "Update a sales order status."
      },
      "SalesOrderShippingChargeLineItemDto": {
        "required": [
          "accountingDetails",
          "amount",
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the shipping charge line."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The description of the shipping charge line.",
            "nullable": true
          },
          "amount": {
            "minimum": 0,
            "type": "number",
            "description": "The amount of the charge.",
            "format": "double"
          },
          "overrideTaxRate": {
            "type": "boolean",
            "description": "Dictate if the tax rate is overridden.",
            "nullable": true
          },
          "isTaxable": {
            "type": "boolean",
            "description": "Dictate if this line item is taxable.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.SalesOrder.ShippingChargeLineItem.ShippingChargeLineItemDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.SalesOrder.ShippingChargeLineItem.ShippingChargeLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Related sales order line item id.",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "Line number",
            "format": "int32"
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a shipping charge line item on a Sales Order."
      },
      "SalesOrderStatus": {
        "enum": [
          "draft",
          "needsApproval",
          "approved",
          "inProgress",
          "complete"
        ],
        "type": "string",
        "description": "Sales order status"
      },
      "SalesOrderTaxLineItemAvalaraOptions": {
        "type": "object",
        "properties": {
          "address": {
            "$ref": "#/components/schemas/CommonAddressDto"
          }
        },
        "additionalProperties": false,
        "description": "Options for use with Avalara (if enabled)."
      },
      "SalesOrderTaxLineItemCreateDto": {
        "type": "object",
        "properties": {
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.\nIf FulcrumProduct.PublicApi.Dto.SalesOrder.TaxLineItem.TaxLineItemCreateDto.AvalaraOptions is provided, FulcrumProduct.PublicApi.Dto.SalesOrder.TaxLineItem.TaxLineItemCreateDto.TaxCodeId will be ignored.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.SalesOrder.TaxLineItem.TaxLineItemCreateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.SalesOrder.TaxLineItem.TaxLineItemCreateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "avalaraOptions": {
            "$ref": "#/components/schemas/SalesOrderTaxLineItemAvalaraOptions"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a tax line item on a sales order."
      },
      "SalesOrderTaxLineItemDto": {
        "required": [
          "accountingDetails",
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax code to use for this entity. If a FulcrumProduct.PublicApi.Dto.SalesOrder.TaxLineItem.TaxLineItemDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.SalesOrder.TaxLineItem.TaxLineItemDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "avalaraOptions": {
            "$ref": "#/components/schemas/SalesOrderTaxLineItemAvalaraOptions"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "price": {
            "minimum": 0,
            "type": "number",
            "description": "Tax amount applied at this rate across the entire sales order.",
            "format": "double",
            "nullable": true
          },
          "accountingDetails": {
            "$ref": "#/components/schemas/CommonAccountingDetailsDto"
          }
        },
        "additionalProperties": false,
        "description": "Represents a tax line item on a sales order."
      },
      "SalesOrderTaxLineItemUpdateDto": {
        "type": "object",
        "properties": {
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Verbose description for this entity.",
            "nullable": true
          },
          "taxCodeId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Tax code key identifier. Please reference /api/tax-rates endpoint.\nIf FulcrumProduct.PublicApi.Dto.SalesOrder.TaxLineItem.TaxLineItemUpdateDto.AvalaraOptions is provided, FulcrumProduct.PublicApi.Dto.SalesOrder.TaxLineItem.TaxLineItemUpdateDto.TaxCodeId will be ignored.",
            "nullable": true
          },
          "taxRate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate to use for this entity. If a FulcrumProduct.PublicApi.Dto.SalesOrder.TaxLineItem.TaxLineItemUpdateDto.TaxCodeId is provided, the provided FulcrumProduct.PublicApi.Dto.SalesOrder.TaxLineItem.TaxLineItemUpdateDto.TaxRate will supercede the defined tax rate.",
            "format": "double",
            "nullable": true
          },
          "avalaraOptions": {
            "$ref": "#/components/schemas/SalesOrderTaxLineItemAvalaraOptions"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a tax line item on a sales order."
      },
      "SalesOrderUpdateDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          },
          "customerPoNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "CustomerPoNumber",
            "nullable": true
          },
          "priority": {
            "$ref": "#/components/schemas/SalesOrderPriority"
          },
          "deliveryDueDate": {
            "type": "string",
            "description": "The date the SO needs to be delivered to the customer.  Note: this does not affect individual line update delivery dates.\nOnly the calendar date is used, exactly as written; any time or UTC offset is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "publicNote": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Note to customer. This will appear on PDFs.",
            "nullable": true
          },
          "dropship": {
            "type": "boolean",
            "description": "Indicates the order is dropshipped: fulfilled by shipping directly to the end customer.\nOmit (or send null) to leave both dropship fields untouched.",
            "nullable": true
          },
          "dropshipCustomerPoNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The end customer's purchase order number for a dropshipped order.\nWritten only when FulcrumProduct.PublicApi.Dto.SalesOrder.SalesOrderUpdateDto.Dropship is supplied: send a dropship value with no PO\nnumber to clear the stored one. Omitting the dropship flag leaves this field as it is.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an update on an SalesOrder."
      },
      "ScrapReportEntryDto": {
        "required": [
          "dateUtc",
          "quantity",
          "value"
        ],
        "type": "object",
        "properties": {
          "item": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "quantity": {
            "type": "number",
            "description": "Quantity scrapped, in the item's unit of measure.",
            "format": "double"
          },
          "value": {
            "type": "number",
            "description": "Cost value of the scrapped quantity, in the tenant's primary currency.",
            "format": "double"
          },
          "operator": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "operation": {
            "type": "string",
            "description": "Operation name on the job during which the scrap was logged.",
            "nullable": true
          },
          "reason": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "workCenter": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "department": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "equipment": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "job": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "dateUtc": {
            "type": "string",
            "description": "UTC timestamp at which the scrap entry was recorded.",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "One scrap entry in the scrap report — a quantity of a specific item that\nwas scrapped during a specific operation, on a specific job. Aggregated\nfrom job-tracking activity rather than stored as a top-level entity."
      },
      "SettingEnumOverheadCalculationMethodEnum": {
        "enum": [
          "laborBurdened",
          "machineBurdened"
        ],
        "type": "string",
        "description": "Which tracked time carries the overhead rate when costs are calculated."
      },
      "SettingsCostingSettingsDto": {
        "required": [
          "overheadCalculationMethod"
        ],
        "type": "object",
        "properties": {
          "overheadCalculationMethod": {
            "$ref": "#/components/schemas/SettingEnumOverheadCalculationMethodEnum"
          }
        },
        "additionalProperties": false,
        "description": "The account's costing configuration."
      },
      "SettingsPricingSettingsDto": {
        "required": [
          "defaultMargin",
          "defaultMaterialMarkup",
          "useDefaultMargin",
          "useMarginBasedPricing",
          "useShopRatePricing"
        ],
        "type": "object",
        "properties": {
          "useMarginBasedPricing": {
            "type": "boolean",
            "description": "Whether margin-based pricing is turned on for the account."
          },
          "useDefaultMargin": {
            "type": "boolean",
            "description": "Whether the account offers `defaultMargin` on items as an option for margin-based pricing."
          },
          "defaultMargin": {
            "type": "number",
            "description": "The account's default margin, as a percentage (15 means 15%), returned as stored; 0 when it was never set.",
            "format": "double"
          },
          "useShopRatePricing": {
            "type": "boolean",
            "description": "Whether newly created items are priced with Shop Rate. False when the account never set it."
          },
          "defaultMaterialMarkup": {
            "type": "number",
            "description": "The material markup, as a percentage, pre-filled on new quote and sales order lines priced with Shop Rate\nwhen the item's price break has no markup of its own. Null when the account has not set one.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The account's sales pricing configuration: how new items are priced by default. Margins and markups are\npercentages, in the same unit as a sales price break's `margin` (15 means 15%)."
      },
      "ShipmentLineItemDto": {
        "required": [
          "id",
          "packingStatus",
          "quantityToShip",
          "shipmentName",
          "shipmentType"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Shipment line item identifier"
          },
          "packingStatus": {
            "$ref": "#/components/schemas/ShippingDataPackingStatus"
          },
          "shipmentType": {
            "$ref": "#/components/schemas/ShippingDataShipmentType"
          },
          "quantityToShip": {
            "type": "number",
            "description": "The quantity to ship",
            "format": "double"
          },
          "shipmentName": {
            "minLength": 1,
            "type": "string",
            "description": "The shipment name (eg. SHP-S0123-1)"
          },
          "shipmentStatus": {
            "$ref": "#/components/schemas/ShippingDataShipmentStatus"
          },
          "shipByDate": {
            "type": "string",
            "description": "The date the shipment this line item belongs to is scheduled to ship by",
            "format": "date-time",
            "nullable": true
          },
          "shippedDate": {
            "type": "string",
            "description": "The date the shipment this line item belongs to was actually shipped",
            "format": "date-time",
            "nullable": true
          },
          "shippedDateOverride": {
            "type": "string",
            "description": "The shipped date override of the shipment this line item belongs to",
            "format": "date-time",
            "nullable": true
          },
          "quantityInvoiced": {
            "type": "number",
            "description": "The quantity invoiced",
            "format": "double"
          },
          "quantityPacked": {
            "type": "number",
            "description": "The quantity packed",
            "format": "double"
          },
          "itemId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The item identifier",
            "nullable": true
          },
          "shipmentId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The shipment identifier",
            "nullable": true
          },
          "salesOrderId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The sales order identifier",
            "nullable": true
          },
          "salesOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The sales order line item identifier",
            "nullable": true
          },
          "purchaseOrderId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The purchase order identifier",
            "nullable": true
          },
          "purchaseOrderLineItemId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The purchase order line item identifier",
            "nullable": true
          },
          "quantityShipped": {
            "type": "number",
            "description": "The quantity shipped: what this line had packed, once its shipment has shipped. Zero until then.",
            "format": "double",
            "readOnly": true
          },
          "shippedFromLocations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The locations this line was shipped from"
          },
          "shippedFromLots": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The lots this line was shipped from"
          },
          "packingDetails": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentLineItemPackingDetailDto"
            },
            "description": "Packing details indicating how quantities were split amongst lots/locations."
          }
        },
        "additionalProperties": false,
        "description": "Shipment line item data transfer object"
      },
      "ShipmentLineItemPackingDetailDto": {
        "type": "object",
        "properties": {
          "lotId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Lot identifier. Please reference /api/inventory-lots endpoint.",
            "nullable": true
          },
          "lotName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Lot name.",
            "nullable": true
          },
          "locationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Location identifier. Please reference /api/locations endpoint.",
            "nullable": true
          },
          "locationName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Location name.",
            "nullable": true
          },
          "quantityPacked": {
            "minimum": 0,
            "type": "number",
            "description": "Quantity packed for this shipment line item that are associated to this lot.",
            "format": "double",
            "nullable": true
          },
          "box": {
            "maxLength": 36,
            "minLength": 0,
            "type": "string",
            "description": "Box identifier this packing detail was packed into. Free-form (e.g., \"1\", \"A1\").",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Packing detail associated to a shipment line item."
      },
      "ShipmentLineItemsListParameters": {
        "type": "object",
        "properties": {
          "packingStatus": {
            "$ref": "#/components/schemas/ShippingDataPackingStatus"
          },
          "itemId": {
            "type": "string",
            "description": "Filter shipment line items based on item identifier.",
            "nullable": true
          },
          "shipmentId": {
            "type": "string",
            "description": "Filter shipment line items based on shipment identifier.",
            "nullable": true
          },
          "salesOrderId": {
            "type": "string",
            "description": "Filter shipment line items based on sales order identifier.",
            "nullable": true
          },
          "purchaseOrderId": {
            "type": "string",
            "description": "Filter shipment line items based on purchase order identifier.",
            "nullable": true
          },
          "salesOrderLineItemIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter shipment line items based on sales order line item(s) identifier.",
            "nullable": true
          },
          "purchaseOrderLineItemIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter shipment line items based on purchase order line item identifier.",
            "nullable": true
          },
          "shipmentIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter shipment line items based on shipment identifiers.",
            "nullable": true
          },
          "shipmentType": {
            "$ref": "#/components/schemas/ShippingDataShipmentType"
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching V3 shipment line items"
      },
      "ShipmentsListParameters": {
        "type": "object",
        "properties": {
          "shipmentStatus": {
            "$ref": "#/components/schemas/ShippingDataShipmentStatus"
          },
          "packingStatus": {
            "$ref": "#/components/schemas/ShippingDataPackingStatus"
          },
          "salesOrderId": {
            "type": "string",
            "description": "Filter shipments by sales order identifier",
            "nullable": true
          },
          "purchaseOrderId": {
            "type": "string",
            "description": "Filter shipments by purchase order identifier",
            "nullable": true
          },
          "shipmentType": {
            "$ref": "#/components/schemas/ShippingDataShipmentType"
          },
          "shipmentIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter shipments by shipment identifiers."
          },
          "names": {
            "maxItems": 500,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter shipments by shipment number, e.g. SHP-SO1234-1 or SHP-PO5678-2."
          },
          "shipByDateBefore": {
            "type": "string",
            "description": "Filter to shipments scheduled to ship before this date (exclusive).",
            "format": "date-time",
            "nullable": true
          },
          "shipByDateAfter": {
            "type": "string",
            "description": "Filter to shipments scheduled to ship after this date (exclusive).",
            "format": "date-time",
            "nullable": true
          },
          "shippedDateBefore": {
            "type": "string",
            "description": "Filter to shipments actually shipped before this date (exclusive).\nCompares against the shipped date override (a shop-local date) when one is set, otherwise the shipped date (UTC).",
            "format": "date-time",
            "nullable": true
          },
          "shippedDateAfter": {
            "type": "string",
            "description": "Filter to shipments actually shipped after this date (exclusive).\nCompares against the shipped date override (a shop-local date) when one is set, otherwise the shipped date (UTC).",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching V3 shipments"
      },
      "ShipmentsShipmentDto": {
        "required": [
          "id",
          "name",
          "number",
          "packingStatus",
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Number",
            "format": "int32"
          },
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Shipment Name"
          },
          "status": {
            "$ref": "#/components/schemas/ShippingDataShipmentStatus"
          },
          "packingStatus": {
            "$ref": "#/components/schemas/ShippingDataPackingStatus"
          },
          "trackingNumber": {
            "type": "string",
            "description": "Tracking number",
            "nullable": true
          },
          "shipByDate": {
            "type": "string",
            "description": "Ship by date.",
            "format": "date-time",
            "nullable": true
          },
          "shippedDate": {
            "type": "string",
            "description": "Shipped date.",
            "format": "date-time",
            "nullable": true
          },
          "shippedDateOverride": {
            "type": "string",
            "description": "Shipped date override.",
            "format": "date-time",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Shipment notes.",
            "nullable": true
          },
          "displayNotesToCustomer": {
            "type": "boolean",
            "description": "Whether to display the shipment notes on the pack list."
          },
          "shippingMethod": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "shippingAccount": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "shippingCost": {
            "type": "number",
            "description": "The actual cost to ship as set on the shipment page",
            "format": "double",
            "nullable": true
          },
          "shippingCharge": {
            "type": "number",
            "description": "The estimated cost to ship as set on the original shipment from the sales order page. It is charged to the customer via the Shipping/Handling line",
            "format": "double",
            "nullable": true
          },
          "address": {
            "$ref": "#/components/schemas/CommonAddressDto"
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "The external references associated with this shipment",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a shipment"
      },
      "ShipmentsShipmentUpdateDto": {
        "type": "object",
        "properties": {
          "shipByDate": {
            "type": "string",
            "description": "Ship by date.",
            "format": "date-time",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Shipment notes.",
            "nullable": true
          },
          "displayNotesToCustomer": {
            "type": "boolean",
            "description": "Whether or not to display the shipment notes on the pack list."
          },
          "trackingNumber": {
            "type": "string",
            "description": "The tracking number for the shipment.",
            "nullable": true
          },
          "shippingMethodId": {
            "type": "string",
            "description": "The shipping method identifier",
            "nullable": true
          },
          "shippedDate": {
            "type": "string",
            "description": "The shipped date. Read-only: the value is accepted but not applied; the shipped date is set when the shipment ships.",
            "format": "date-time",
            "nullable": true
          },
          "shippedDateOverride": {
            "type": "string",
            "description": "The actual ship date override. Takes precedence over the shipped date wherever a ship date is reported. Send the calendar date at midnight UTC (e.g. 2014-10-23T00:00:00Z); it is stored as sent and reports compare it as a date. Null clears it. On update, a value outside 2000-01-01 to 2099-12-31 is rejected; patch does not range-check.",
            "format": "date-time",
            "nullable": true
          },
          "shippingCost": {
            "type": "number",
            "description": "The shipment's cost. Read-only: the value is accepted but not applied.",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an update to a Shipment."
      },
      "ShippingDataPackingStatus": {
        "enum": [
          "notPacked",
          "partiallyPacked",
          "fullyPacked",
          "overPacked"
        ],
        "type": "string"
      },
      "ShippingDataShipmentStatus": {
        "enum": [
          "pending",
          "open",
          "shipped",
          "cancelled"
        ],
        "type": "string"
      },
      "ShippingDataShipmentType": {
        "enum": [
          "unknown",
          "standard",
          "outsideProcessing"
        ],
        "type": "string"
      },
      "ShippingMethodDto": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          }
        },
        "additionalProperties": false,
        "description": "Shipping method definition."
      },
      "ShippingMethodRequestFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter shipping methods based on their name.",
            "nullable": true
          },
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter shipping methods based on matching ids.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding shipping methods."
      },
      "TagCreateBaseDto": {
        "required": [
          "name",
          "style"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Descriptive name associated to the object"
          },
          "style": {
            "$ref": "#/components/schemas/CommonEnumStyleEnum"
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Descriptive name associated to the object",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a tag for creation"
      },
      "TagCreateDto": {
        "required": [
          "name",
          "style",
          "types"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Descriptive name associated to the object"
          },
          "style": {
            "$ref": "#/components/schemas/CommonEnumStyleEnum"
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Descriptive name associated to the object",
            "nullable": true
          },
          "types": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonEnumTagTypeEnum"
            },
            "description": "The type(s) of this tag."
          }
        },
        "additionalProperties": false,
        "description": "Represents a tag for creation"
      },
      "TagDto": {
        "required": [
          "id",
          "name",
          "style",
          "types"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique Id associated to the referenced object"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Descriptive name associated to the object"
          },
          "style": {
            "$ref": "#/components/schemas/CommonEnumStyleEnum"
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Descriptive name associated to the object",
            "nullable": true
          },
          "types": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonEnumTagTypeEnum"
            },
            "description": "Represents where/how this tag is used."
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicate if this tag has been deleted.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents a tag"
      },
      "TagRequestFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter tags based on their name.",
            "nullable": true
          },
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter tags based on matching ids.",
            "nullable": true
          },
          "types": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonEnumTagTypeEnum"
            },
            "description": "Filter tags based on matching types.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding accounting codes."
      },
      "TagRequestFindParametersBase": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter tags based on their name.",
            "nullable": true
          },
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter tags based on matching ids.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding accounting codes."
      },
      "TagUpdateDto": {
        "required": [
          "name",
          "style",
          "types"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Descriptive name associated to the object"
          },
          "style": {
            "$ref": "#/components/schemas/CommonEnumStyleEnum"
          },
          "description": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Descriptive name associated to the object",
            "nullable": true
          },
          "types": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonEnumTagTypeEnum"
            },
            "description": "The type(s) of this tag."
          }
        },
        "additionalProperties": false,
        "description": "Represents a tag for update"
      },
      "TaskDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the task",
            "nullable": true
          },
          "relatedRecord": {
            "$ref": "#/components/schemas/TaskRelatedRecordDto"
          },
          "title": {
            "type": "string",
            "description": "What the task is",
            "nullable": true
          },
          "description": {
            "type": "string",
            "description": "A longer description of the task",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Free-text notes on the task",
            "nullable": true
          },
          "sequence": {
            "type": "integer",
            "description": "The step the task sits at within its record's task list. Tasks sharing a step are parallel\nwork, so a step is not unique within a record",
            "format": "int32"
          },
          "taskGroup": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "assignedTo": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "dueDateUtc": {
            "type": "string",
            "description": "When the task is due (UTC), or null when it carries no date",
            "format": "date-time",
            "nullable": true
          },
          "complete": {
            "type": "boolean",
            "description": "Whether the task is complete"
          },
          "completedUtc": {
            "type": "string",
            "description": "When the task was completed (UTC). Server-stamped when the task is first marked complete and\ncleared when it is re-opened. Read-only",
            "format": "date-time",
            "nullable": true
          },
          "completedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "attachmentCount": {
            "type": "integer",
            "description": "How many attachments the task carries",
            "format": "int32"
          },
          "lastNotification": {
            "$ref": "#/components/schemas/TaskNotificationDto"
          }
        },
        "additionalProperties": false,
        "description": "One task, with enough of the record it hangs off to identify it."
      },
      "TaskNotificationChannelEnum": {
        "enum": [
          "none",
          "email",
          "slack",
          "teams",
          "gChat"
        ],
        "type": "string",
        "description": "How a task notification was delivered."
      },
      "TaskNotificationDto": {
        "type": "object",
        "properties": {
          "userId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the user who was told",
            "nullable": true
          },
          "userName": {
            "type": "string",
            "description": "The name of the user who was told",
            "nullable": true
          },
          "channel": {
            "$ref": "#/components/schemas/TaskNotificationChannelEnum"
          },
          "sentUtc": {
            "type": "string",
            "description": "When the message was handed to the sender (UTC). Delivery itself is not tracked",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "The message that went out for a task step: who was told, over which channel, and when."
      },
      "TaskRelatedRecordDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the record, as returned by Change Order List",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "The record's sequential number. Read-only",
            "format": "int32",
            "nullable": true
          },
          "customer": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          }
        },
        "additionalProperties": false,
        "description": "The record a task hangs off. Every task currently hangs off a change order."
      },
      "TaskSaveDto": {
        "required": [
          "title"
        ],
        "type": "object",
        "properties": {
          "relatedRecord": {
            "$ref": "#/components/schemas/TaskRelatedRecordDto"
          },
          "title": {
            "maxLength": 500,
            "minLength": 1,
            "type": "string",
            "description": "What the task is. Required"
          },
          "description": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "A longer description of the task",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Free-text notes on the task",
            "nullable": true
          },
          "dueDateUtc": {
            "type": "string",
            "description": "When the task is due (UTC)",
            "format": "date-time",
            "nullable": true
          },
          "assignedToUserId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The user to assign the task to. Must resolve to a user",
            "nullable": true
          },
          "taskGroupId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The group to file the task under. Must resolve to an active change order task group",
            "nullable": true
          },
          "complete": {
            "type": "boolean",
            "description": "Whether the task is complete. Setting it true completes the task and stamps completedUtc and\ncompletedBy; setting it false re-opens the task and clears both"
          },
          "sequence": {
            "type": "integer",
            "description": "The step the task should sit at. A value of 1 or more places it at that step, alongside any task\nalready there. Null or a value below 1 appends it after the last step on a create and leaves it\nwhere it is on an update",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The writable state of a task. Create and update both take the whole object: update is a full\nreplacement, so an omitted field is cleared."
      },
      "TasksListParameters": {
        "type": "object",
        "properties": {
          "relatedRecordIds": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Only tasks hanging off these records. At most 1000 may be supplied",
            "nullable": true
          },
          "assignedToUserId": {
            "type": "string",
            "description": "Only tasks assigned to this user",
            "nullable": true
          },
          "complete": {
            "type": "boolean",
            "description": "True returns only complete tasks, false only incomplete ones; omitted returns both",
            "nullable": true
          },
          "customerId": {
            "type": "string",
            "description": "Only tasks whose record is raised for this customer",
            "nullable": true
          },
          "taskGroupId": {
            "type": "string",
            "description": "Only tasks filed under this group",
            "nullable": true
          },
          "dueFromUtc": {
            "type": "string",
            "description": "Inclusive lower bound on dueDateUtc",
            "format": "date-time",
            "nullable": true
          },
          "dueToUtc": {
            "type": "string",
            "description": "Inclusive upper bound on dueDateUtc",
            "format": "date-time",
            "nullable": true
          },
          "completedFromUtc": {
            "type": "string",
            "description": "Inclusive lower bound on completedUtc",
            "format": "date-time",
            "nullable": true
          },
          "completedToUtc": {
            "type": "string",
            "description": "Inclusive upper bound on completedUtc",
            "format": "date-time",
            "nullable": true
          },
          "overdue": {
            "type": "boolean",
            "description": "True narrows to incomplete tasks whose due date has passed. False and omitted both apply no\nclause — this narrows, it does not select the complement",
            "nullable": true
          },
          "search": {
            "type": "string",
            "description": "Case-insensitive search over the title, description, notes and the record's customer name,\nand an exact match on the record's number when the term reads as one",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Filters for the task list. All filters are optional and combine with AND semantics (list-valued\nfilters match any of their values)."
      },
      "TaxRateCreateDto": {
        "required": [
          "code",
          "rate"
        ],
        "type": "object",
        "properties": {
          "code": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The code for the tax rate. Must be unique to all active tax rates."
          },
          "rate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate. This is the ratio (0.17 = 17%)",
            "format": "double"
          },
          "applyToLandedCosts": {
            "type": "boolean",
            "description": "Indicate if this tax rate applies to landed costs."
          }
        },
        "additionalProperties": false,
        "description": "Details of tax rate to be created"
      },
      "TaxRateDto": {
        "required": [
          "code",
          "id",
          "rate"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "code": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying code. Must be unique."
          },
          "provider": {
            "$ref": "#/components/schemas/DomainSystemDataTaxCodeProvider"
          },
          "rate": {
            "type": "number",
            "description": "Tax Rate (%)",
            "format": "double"
          },
          "applyToLandedCosts": {
            "type": "boolean",
            "description": "Indicate if this tax rate applies to landed costs."
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicate if this record is deleted."
          }
        },
        "additionalProperties": false,
        "description": "Tax rate definition."
      },
      "TaxRateRequestFindParameters": {
        "type": "object",
        "properties": {
          "code": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter tax rates based on their code.",
            "nullable": true
          },
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter tax rates based on matching ids.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding tax rates."
      },
      "TaxRateUpdateDto": {
        "required": [
          "code",
          "rate"
        ],
        "type": "object",
        "properties": {
          "code": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The code for the tax rate. Must be unique to all active tax rates."
          },
          "rate": {
            "minimum": 0,
            "type": "number",
            "description": "Tax rate. This is the proportion (0.17 = 17%)",
            "format": "double"
          },
          "applyToLandedCosts": {
            "type": "boolean",
            "description": "Indicate if this tax rate applies to landed costs."
          }
        },
        "additionalProperties": false,
        "description": "Details of tax rate to be update"
      },
      "TimeClockClockInDto": {
        "type": "object",
        "properties": {
          "userId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The user identifier to associate the clock in to.  If not supplied, will use the user assigned to the api key used for authorization",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Model for clocking in via the public api"
      },
      "TimeClockClockOutDto": {
        "type": "object",
        "properties": {
          "userId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The user identifier to associate the timer to.  If not supplied, will use the user assigned to the api key used for authorization",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Model for clocking a user out"
      },
      "TimeClockDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The timer identifier",
            "nullable": true
          },
          "startedById": {
            "type": "string",
            "description": "The user identifier who started the timer",
            "nullable": true
          },
          "startedOnUtc": {
            "type": "string",
            "description": "When the timer was started in UTC time.",
            "format": "date-time",
            "nullable": true
          },
          "stoppedOnUtc": {
            "type": "string",
            "description": "When the timer was stopped in UTC time.",
            "format": "date-time",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/DomainTimeTrackingTimer_Type"
          },
          "isRunning": {
            "type": "boolean",
            "description": "Whether the timer is running or not",
            "readOnly": true
          },
          "reasonCodeId": {
            "type": "string",
            "description": "The tag identifier for the reason code",
            "nullable": true
          },
          "clockInCodeId": {
            "type": "string",
            "description": "The tag identifier for the clock in code",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Data transfer object for Timer entity"
      },
      "TimeClockRequestListTimeClocksParameters": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "string",
            "description": "Filter timers based on who started it",
            "nullable": true
          },
          "startedDateRange": {
            "$ref": "#/components/schemas/DtoCommonDateRangeFilter"
          },
          "stoppedDateRange": {
            "$ref": "#/components/schemas/DtoCommonDateRangeFilter"
          },
          "runningTimersOnly": {
            "type": "boolean",
            "description": "Filter to only open timers",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching time clocks"
      },
      "TimerCreateTimerDto": {
        "required": [
          "itemToMakeId",
          "jobId",
          "operationId",
          "startedOnUtc",
          "stoppedOnUtc",
          "type",
          "userId"
        ],
        "type": "object",
        "properties": {
          "userId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The user the timer block is attributed to."
          },
          "jobId": {
            "minLength": 1,
            "type": "string",
            "description": "The job identifier"
          },
          "itemToMakeId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The item to make identifier"
          },
          "operationId": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "The operation identifier"
          },
          "type": {
            "$ref": "#/components/schemas/DomainTimeTrackingTimer_Type"
          },
          "startedOnUtc": {
            "type": "string",
            "description": "When the block started, in UTC.",
            "format": "date-time"
          },
          "stoppedOnUtc": {
            "type": "string",
            "description": "When the block stopped, in UTC. Must be after StartedOnUtc.",
            "format": "date-time"
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value data used to correlate this timer with external systems and search for it later.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Model for creating a complete, closed timer block via the public API."
      },
      "TimerDto": {
        "required": [
          "createdUtc",
          "id",
          "segments",
          "startedOnUtc",
          "startedOnUtcOriginal",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The timer identifier"
          },
          "jobId": {
            "type": "string",
            "description": "The job identifier",
            "nullable": true
          },
          "jobName": {
            "type": "string",
            "description": "The job name.",
            "nullable": true
          },
          "itemToMakeId": {
            "type": "string",
            "description": "The item to make identifier",
            "nullable": true
          },
          "itemToMakeItemId": {
            "type": "string",
            "description": "The item to make's original item id.",
            "nullable": true
          },
          "itemToMakeName": {
            "type": "string",
            "description": "The item to make name.",
            "nullable": true
          },
          "itemToMakeDescription": {
            "type": "string",
            "description": "The item to make description.",
            "nullable": true
          },
          "jobOperationId": {
            "type": "string",
            "description": "The job operation identifier",
            "nullable": true
          },
          "jobOperationName": {
            "type": "string",
            "description": "The job operation name.",
            "nullable": true
          },
          "jobOperationDescription": {
            "type": "string",
            "description": "The job operation description.",
            "nullable": true
          },
          "jobOperationSystemOperationId": {
            "type": "string",
            "description": "The identifier of the system operation the job operation was created from. Populated only by the list endpoints:\nnull when the timer has no job operation or the job operation has no system operation, and always null in the\ncreate, update and patch responses.",
            "nullable": true
          },
          "workOrderId": {
            "type": "string",
            "description": "The work order identifier. Set when the timer is tracked against a work order rather than a job.",
            "nullable": true
          },
          "workOrderName": {
            "type": "string",
            "description": "The work order name (its number when unnamed).",
            "nullable": true
          },
          "workOrderOperationId": {
            "type": "string",
            "description": "The work order operation identifier.",
            "nullable": true
          },
          "workOrderOperationName": {
            "type": "string",
            "description": "The work order operation name.",
            "nullable": true
          },
          "startedById": {
            "type": "string",
            "description": "The user identifier who started the timer",
            "nullable": true
          },
          "startedOnUtc": {
            "type": "string",
            "description": "When the timer was started in UTC time.",
            "format": "date-time"
          },
          "startedOnUtcOriginal": {
            "type": "string",
            "description": "When the timer was ORIGINALLY started in UTC time.",
            "format": "date-time"
          },
          "stoppedOnUtc": {
            "type": "string",
            "description": "When the timer was stopped in UTC time.",
            "format": "date-time",
            "nullable": true
          },
          "stoppedOnUtcOriginal": {
            "type": "string",
            "description": "When the timer was ORIGINALLY stopped in UTC time.",
            "format": "date-time",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/DomainTimeTrackingTimer_Type"
          },
          "isRunning": {
            "type": "boolean",
            "description": "Whether the timer is running or not",
            "readOnly": true
          },
          "createdUtc": {
            "type": "string",
            "description": "When the timer was created in UTC time.",
            "format": "date-time"
          },
          "modifiedUtc": {
            "type": "string",
            "description": "When the timer was modified in UTC time.",
            "format": "date-time",
            "nullable": true
          },
          "elapsedTimeInSeconds": {
            "type": "number",
            "description": "Elapsed time this timer was running.  Can be greater than the labor time if the operator has multiple concurrent timers.",
            "format": "double",
            "nullable": true
          },
          "operationTimeInSeconds": {
            "type": "number",
            "description": "Total Operation run time\nIf this timer was overridden, the operation time will be adjusted by the multiple of the adjustment",
            "format": "double",
            "nullable": true
          },
          "laborTimeInSeconds": {
            "type": "number",
            "description": "Labor time for use in costing calculations\nCan be less than elapsed time if an operator's time was split between jobs",
            "format": "double",
            "nullable": true
          },
          "machineTimeInSeconds": {
            "type": "number",
            "description": "Machine time for use in costing and time displays which is just the elapsed time of the segments\nIf the start/stop time has been overridden directly, use that value",
            "format": "double",
            "nullable": true
          },
          "segments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TimerSegmentDto"
            },
            "description": "The segments of time that this overall timer represents."
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "details": {
            "$ref": "#/components/schemas/DtoTimerAttributionDetails"
          }
        },
        "additionalProperties": false,
        "description": "Data transfer object for Timer entity"
      },
      "TimerSegmentDto": {
        "required": [
          "id",
          "startedOnUtc"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The timer segment identifier.",
            "format": "uuid"
          },
          "startedOnUtc": {
            "type": "string",
            "description": "When this segment begins.",
            "format": "date-time"
          },
          "stoppedOnUtc": {
            "type": "string",
            "description": "When this segment ends. If the timer is not stopped (still running), this value will be blank.",
            "format": "date-time",
            "nullable": true
          },
          "isRunning": {
            "type": "boolean",
            "description": "Whether the timer segment is running or not.",
            "readOnly": true
          },
          "details": {
            "$ref": "#/components/schemas/DtoTimerSegmentAttributionDetails"
          }
        },
        "additionalProperties": false,
        "description": "Data transfer object for TimerSegments entity"
      },
      "TimerUpdateDto": {
        "type": "object",
        "properties": {
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Represents an update on a timer."
      },
      "ToolCalibrationCalibrationResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the measurement row",
            "format": "uuid",
            "nullable": true
          },
          "calibrationCheckpointId": {
            "type": "string",
            "description": "The template checkpoint this measurement answers",
            "format": "uuid"
          },
          "phase": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationCheckpointPhase"
          },
          "trial": {
            "type": "integer",
            "description": "1-based trial number within the phase for this checkpoint",
            "format": "int32"
          },
          "numericValue": {
            "type": "number",
            "description": "The measured numeric value",
            "format": "double",
            "nullable": true
          },
          "numericValuePrecision": {
            "type": "integer",
            "description": "The decimal precision of the measured numeric value",
            "format": "int32",
            "nullable": true
          },
          "booleanValue": {
            "type": "boolean",
            "description": "The measured boolean value, for attribute (pass/fail) checkpoints",
            "nullable": true
          },
          "stringValue": {
            "type": "string",
            "description": "The measured free-text value",
            "nullable": true
          },
          "bonusToleranceValue": {
            "type": "number",
            "description": "The bonus tolerance applied to the measurement",
            "format": "double",
            "nullable": true
          },
          "createdOnUtc": {
            "type": "string",
            "description": "When the measurement was recorded (UTC)",
            "format": "date-time",
            "nullable": true
          },
          "createdBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "masterGageExpirationUtc": {
            "type": "string",
            "description": "The measurement's master gauge calibration expiry (UTC) frozen when the row was saved;\nnull when no master gauge was configured",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single measured trial for one calibration checkpoint, in a single phase (As-Found or As-Left)."
      },
      "ToolCalibrationCheckpointDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the checkpoint; measurement responses reference it",
            "format": "uuid"
          },
          "order": {
            "type": "integer",
            "description": "Relative position of the checkpoint within the template",
            "format": "int32"
          },
          "attribute": {
            "type": "string",
            "description": "The characteristic being measured (e.g. \"Diameter\")",
            "nullable": true
          },
          "nominal": {
            "type": "number",
            "description": "The target/nominal value for the measurement",
            "format": "double",
            "nullable": true
          },
          "minimumValue": {
            "type": "number",
            "description": "The minimum acceptable measured value (inclusive)",
            "format": "double",
            "nullable": true
          },
          "maximumValue": {
            "type": "number",
            "description": "The maximum acceptable measured value (inclusive)",
            "format": "double",
            "nullable": true
          },
          "precision": {
            "type": "number",
            "description": "The decimal precision applied to the nominal value",
            "format": "double",
            "nullable": true
          },
          "units": {
            "type": "string",
            "description": "The unit of measure of the measurement",
            "nullable": true
          },
          "masterGage": {
            "$ref": "#/components/schemas/ToolMasterGageReferenceDto"
          },
          "masterGageId": {
            "type": "string",
            "description": "The checkpoint's raw master gauge id. Set while masterGage is null means the configured\nmaster no longer resolves (\"master unavailable\"), never \"no master configured\"",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single measurement checkpoint belonging to a calibration template."
      },
      "ToolCalibrationCreateDto": {
        "required": [
          "calibrationDateUtc",
          "calibrationSource",
          "result",
          "toolId"
        ],
        "type": "object",
        "properties": {
          "toolId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the tool the calibration was performed on"
          },
          "calibrationSource": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationSource"
          },
          "calibratedByUserId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The user who performed an in-house calibration; required for (and only valid with) the user source",
            "nullable": true
          },
          "calibratedByVendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The vendor that performed an external calibration; required for (and only valid with) the vendor source",
            "nullable": true
          },
          "result": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
          },
          "calibrationDateUtc": {
            "type": "string",
            "description": "When the calibration was performed (UTC)",
            "format": "date-time"
          },
          "masterGageNames": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "Free-text master gauge names supplied with an external attestation; a measured in-house\ncalibration derives its masters from the template instead",
            "nullable": true
          },
          "certificateNumber": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The external certificate number supplied with the calibration",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Free-text notes",
            "nullable": true
          },
          "asFoundNotes": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Free-text notes about the As-Found state",
            "nullable": true
          },
          "tempDegC": {
            "type": "number",
            "description": "Ambient temperature (deg C) captured during calibration",
            "format": "double",
            "nullable": true
          },
          "relHumidity": {
            "type": "number",
            "description": "Ambient relative humidity (%) captured during calibration",
            "format": "double",
            "nullable": true
          },
          "responses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolCalibrationRequestCalibrationResponseSaveDto"
            },
            "description": "The per-checkpoint trial measurements; only valid on in-house (user-source) calibrations\nagainst the tool's current calibration template",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request body for recording a tool calibration. Who performed the calibration is attributed per\nFulcrumProduct.PublicApi.Dto.ToolCalibration.Request.ToolCalibrationCreateDto.CalibrationSource: an in-house (user) calibration names the measuring user, a vendor\ncalibration names the vendor, and a customer calibration is always attributed to the tool's owning\ncustomer server-side. The overall result must match the result the server derives from the\nsubmitted measurements; the pinned template version, As-Found outcome, and sign state are always\nderived server-side and cannot be supplied."
      },
      "ToolCalibrationDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the calibration record",
            "nullable": true
          },
          "tool": {
            "$ref": "#/components/schemas/ToolCalibrationToolReferenceDto"
          },
          "calibrationSource": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationSource"
          },
          "calibratedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "result": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
          },
          "asFoundResult": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
          },
          "calibrationDateUtc": {
            "type": "string",
            "description": "When the calibration was performed (UTC)",
            "format": "date-time",
            "nullable": true
          },
          "masterGageNames": {
            "type": "string",
            "description": "Display labels of the master gauges used: the masters the record's measurements were taken\nagainst for in-house records, or the free-text value supplied with an external record",
            "nullable": true
          },
          "certificateNumber": {
            "type": "string",
            "description": "The external certificate number supplied with the calibration",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Free-text notes",
            "nullable": true
          },
          "asFoundNotes": {
            "type": "string",
            "description": "Free-text notes about the As-Found state",
            "nullable": true
          },
          "tempDegC": {
            "type": "number",
            "description": "Ambient temperature (deg C) captured during calibration",
            "format": "double",
            "nullable": true
          },
          "relHumidity": {
            "type": "number",
            "description": "Ambient relative humidity (%) captured during calibration",
            "format": "double",
            "nullable": true
          },
          "templateVersion": {
            "type": "integer",
            "description": "The template version the record was measured against, pinned at create time; null for\ntemplate-less and external records",
            "format": "int32",
            "nullable": true
          },
          "signedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "signedUtc": {
            "type": "string",
            "description": "When the record was signed (UTC); null until signed",
            "format": "date-time",
            "nullable": true
          },
          "responses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolCalibrationCalibrationResponseDto"
            },
            "description": "The per-checkpoint trial measurements; present only on in-house (user-source) calibrations\nmeasured against a template"
          },
          "version": {
            "type": "string",
            "description": "The record's opaque concurrency token, refreshed by every write. Round-trip it unchanged on an\nedit; the edit is rejected with 409 Conflict when the record changed after this read",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A tool calibration record with its per-checkpoint trial measurements."
      },
      "ToolCalibrationEnumCalibrationCheckpointPhase": {
        "enum": [
          "asFound",
          "asLeft"
        ],
        "type": "string",
        "description": "The measurement phase of a checkpoint response. Mirrors\nFulcrumProduct.Domain.ToolCalibrations.Data.CalibrationCheckpointPhase by underlying value."
      },
      "ToolCalibrationEnumCalibrationResult": {
        "enum": [
          "fail",
          "pass",
          "notApplicable"
        ],
        "type": "string",
        "description": "The outcome of a calibration. Mirrors\nFulcrumProduct.Domain.ToolCalibrations.Data.CalibrationResult by underlying value."
      },
      "ToolCalibrationEnumCalibrationSource": {
        "enum": [
          "user",
          "vendor",
          "customer"
        ],
        "type": "string",
        "description": "Who performed the calibration. Mirrors\nFulcrumProduct.Domain.ToolCalibrations.CalibrationSource by underlying value."
      },
      "ToolCalibrationNcrReferenceDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the NCR",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "The NCR's sequential number",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "A non-conformance report opened by a failing calibration save."
      },
      "ToolCalibrationRequestCalibrationResponseSaveDto": {
        "required": [
          "calibrationCheckpointId",
          "phase",
          "trial"
        ],
        "type": "object",
        "properties": {
          "calibrationCheckpointId": {
            "type": "string",
            "description": "The template checkpoint this measurement answers; must belong to the template version the\nrecord is measured against",
            "format": "uuid"
          },
          "phase": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationCheckpointPhase"
          },
          "trial": {
            "maximum": 2147483647,
            "minimum": 1,
            "type": "integer",
            "description": "1-based trial number within the phase for this checkpoint",
            "format": "int32"
          },
          "numericValue": {
            "type": "number",
            "description": "The measured numeric value",
            "format": "double",
            "nullable": true
          },
          "numericValuePrecision": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "The decimal precision of the measured numeric value",
            "format": "int32",
            "nullable": true
          },
          "booleanValue": {
            "type": "boolean",
            "description": "The measured boolean value, for attribute (pass/fail) checkpoints",
            "nullable": true
          },
          "stringValue": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "The measured free-text value",
            "nullable": true
          },
          "bonusToleranceValue": {
            "type": "number",
            "description": "The bonus tolerance applied to the measurement",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A single measured trial for one calibration checkpoint, in a single phase (As-Found or As-Left).\nThe measurer, measurement time, and master gauge expiry snapshot are stamped server-side."
      },
      "ToolCalibrationSavedDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the calibration record",
            "nullable": true
          },
          "tool": {
            "$ref": "#/components/schemas/ToolCalibrationToolReferenceDto"
          },
          "calibrationSource": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationSource"
          },
          "calibratedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "result": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
          },
          "asFoundResult": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
          },
          "calibrationDateUtc": {
            "type": "string",
            "description": "When the calibration was performed (UTC)",
            "format": "date-time",
            "nullable": true
          },
          "masterGageNames": {
            "type": "string",
            "description": "Display labels of the master gauges used: the masters the record's measurements were taken\nagainst for in-house records, or the free-text value supplied with an external record",
            "nullable": true
          },
          "certificateNumber": {
            "type": "string",
            "description": "The external certificate number supplied with the calibration",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Free-text notes",
            "nullable": true
          },
          "asFoundNotes": {
            "type": "string",
            "description": "Free-text notes about the As-Found state",
            "nullable": true
          },
          "tempDegC": {
            "type": "number",
            "description": "Ambient temperature (deg C) captured during calibration",
            "format": "double",
            "nullable": true
          },
          "relHumidity": {
            "type": "number",
            "description": "Ambient relative humidity (%) captured during calibration",
            "format": "double",
            "nullable": true
          },
          "templateVersion": {
            "type": "integer",
            "description": "The template version the record was measured against, pinned at create time; null for\ntemplate-less and external records",
            "format": "int32",
            "nullable": true
          },
          "signedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "signedUtc": {
            "type": "string",
            "description": "When the record was signed (UTC); null until signed",
            "format": "date-time",
            "nullable": true
          },
          "responses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolCalibrationCalibrationResponseDto"
            },
            "description": "The per-checkpoint trial measurements; present only on in-house (user-source) calibrations\nmeasured against a template"
          },
          "version": {
            "type": "string",
            "description": "The record's opaque concurrency token, refreshed by every write. Round-trip it unchanged on an\nedit; the edit is rejected with 409 Conflict when the record changed after this read",
            "nullable": true
          },
          "createdNcr": {
            "$ref": "#/components/schemas/ToolCalibrationNcrReferenceDto"
          }
        },
        "additionalProperties": false,
        "description": "The result of recording or editing a tool calibration record: the persisted record plus, when the\nsave recorded a new failure, the non-conformance report it automatically opened."
      },
      "ToolCalibrationSummaryDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the calibration record",
            "nullable": true
          },
          "tool": {
            "$ref": "#/components/schemas/ToolCalibrationToolReferenceDto"
          },
          "calibrationSource": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationSource"
          },
          "calibratedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "result": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
          },
          "asFoundResult": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
          },
          "calibrationDateUtc": {
            "type": "string",
            "description": "When the calibration was performed (UTC)",
            "format": "date-time",
            "nullable": true
          },
          "masterGageNames": {
            "type": "string",
            "description": "Display labels of the master gauges used: the masters the record's measurements were taken\nagainst for in-house records, or the free-text value supplied with an external record",
            "nullable": true
          },
          "certificateNumber": {
            "type": "string",
            "description": "The external certificate number supplied with the calibration",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Free-text notes",
            "nullable": true
          },
          "asFoundNotes": {
            "type": "string",
            "description": "Free-text notes about the As-Found state",
            "nullable": true
          },
          "tempDegC": {
            "type": "number",
            "description": "Ambient temperature (deg C) captured during calibration",
            "format": "double",
            "nullable": true
          },
          "relHumidity": {
            "type": "number",
            "description": "Ambient relative humidity (%) captured during calibration",
            "format": "double",
            "nullable": true
          },
          "templateVersion": {
            "type": "integer",
            "description": "The template version the record was measured against, pinned at create time; null for\ntemplate-less and external records",
            "format": "int32",
            "nullable": true
          },
          "signedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "signedUtc": {
            "type": "string",
            "description": "When the record was signed (UTC); null until signed",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A tool calibration record as returned by the list endpoint. The by-id endpoint returns the\nderived FulcrumProduct.PublicApi.Dto.ToolCalibration.ToolCalibrationDto, which adds the per-checkpoint measurements."
      },
      "ToolCalibrationTemplateDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the template version",
            "format": "uuid"
          },
          "toolId": {
            "type": "string",
            "description": "The id of the tool this template belongs to",
            "nullable": true
          },
          "version": {
            "type": "integer",
            "description": "The template version number; calibration records pin the version they were measured against",
            "format": "int32"
          },
          "createdUtc": {
            "type": "string",
            "description": "When this version was created (UTC)",
            "format": "date-time"
          },
          "source": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationSource"
          },
          "procedureName": {
            "type": "string",
            "description": "The name of the calibration procedure",
            "nullable": true
          },
          "defaultMasterGage": {
            "$ref": "#/components/schemas/ToolMasterGageReferenceDto"
          },
          "defaultMasterGageId": {
            "type": "string",
            "description": "The raw default-master id. Set while defaultMasterGage is null means the configured master\nno longer resolves (\"master unavailable\"), never \"no master configured\"",
            "nullable": true
          },
          "lowerTolerance": {
            "type": "number",
            "description": "The default lower tolerance applied to checkpoints",
            "format": "double",
            "nullable": true
          },
          "lowerTolPrecision": {
            "type": "integer",
            "description": "The decimal precision of the lower tolerance",
            "format": "int32",
            "nullable": true
          },
          "upperTolerance": {
            "type": "number",
            "description": "The default upper tolerance applied to checkpoints",
            "format": "double",
            "nullable": true
          },
          "upperTolPrecision": {
            "type": "integer",
            "description": "The decimal precision of the upper tolerance",
            "format": "int32",
            "nullable": true
          },
          "trialsPerCheckpoint": {
            "type": "integer",
            "description": "How many trials each checkpoint requires per phase",
            "format": "int32",
            "nullable": true
          },
          "minTempDegC": {
            "type": "number",
            "description": "The minimum acceptable ambient temperature (deg C) during calibration",
            "format": "double",
            "nullable": true
          },
          "maxTempDegC": {
            "type": "number",
            "description": "The maximum acceptable ambient temperature (deg C) during calibration",
            "format": "double",
            "nullable": true
          },
          "maxRelHumidity": {
            "type": "number",
            "description": "The maximum acceptable ambient relative humidity (%) during calibration",
            "format": "double",
            "nullable": true
          },
          "instructions": {
            "type": "string",
            "description": "Free-text calibration instructions",
            "nullable": true
          },
          "checkpoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolCalibrationCheckpointDto"
            },
            "description": "The measurement checkpoints, in display order"
          }
        },
        "additionalProperties": false,
        "description": "A calibration template version for a tool, with the measurement checkpoints an in-house\ncalibration is measured against."
      },
      "ToolCalibrationTemplateVersionDto": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "description": "The template version number",
            "format": "int32"
          },
          "createdUtc": {
            "type": "string",
            "description": "When this version was created (UTC) — the start of its effective range",
            "format": "date-time"
          },
          "createdByName": {
            "type": "string",
            "description": "Who created this version",
            "nullable": true
          },
          "effectiveUntilUtc": {
            "type": "string",
            "description": "When the next version superseded this one (UTC); null means this is the current version",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One row of a tool's calibration template version history."
      },
      "ToolCalibrationToolReferenceDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the tool",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The name of the tool",
            "nullable": true
          },
          "toolType": {
            "$ref": "#/components/schemas/ToolType"
          },
          "serialNumber": {
            "type": "string",
            "description": "The serial number of the tool",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "The tool a calibration record belongs to."
      },
      "ToolCalibrationUpdateDto": {
        "required": [
          "calibrationDateUtc",
          "calibrationSource",
          "result",
          "toolId",
          "version"
        ],
        "type": "object",
        "properties": {
          "toolId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the tool the calibration was performed on"
          },
          "calibrationSource": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationSource"
          },
          "calibratedByUserId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The user who performed an in-house calibration; required for (and only valid with) the user source",
            "nullable": true
          },
          "calibratedByVendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The vendor that performed an external calibration; required for (and only valid with) the vendor source",
            "nullable": true
          },
          "result": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
          },
          "calibrationDateUtc": {
            "type": "string",
            "description": "When the calibration was performed (UTC)",
            "format": "date-time"
          },
          "masterGageNames": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "Free-text master gauge names supplied with an external attestation; a measured in-house\ncalibration derives its masters from the template instead",
            "nullable": true
          },
          "certificateNumber": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The external certificate number supplied with the calibration",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Free-text notes",
            "nullable": true
          },
          "asFoundNotes": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Free-text notes about the As-Found state",
            "nullable": true
          },
          "tempDegC": {
            "type": "number",
            "description": "Ambient temperature (deg C) captured during calibration",
            "format": "double",
            "nullable": true
          },
          "relHumidity": {
            "type": "number",
            "description": "Ambient relative humidity (%) captured during calibration",
            "format": "double",
            "nullable": true
          },
          "responses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolCalibrationRequestCalibrationResponseSaveDto"
            },
            "description": "The per-checkpoint trial measurements; only valid on in-house (user-source) calibrations\nagainst the tool's current calibration template",
            "nullable": true
          },
          "version": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "The record's opaque concurrency token from a read of this record, round-tripped unchanged.\nThe edit is rejected with 409 Conflict when the record changed after that read"
          }
        },
        "additionalProperties": false,
        "description": "Request body for editing an unsigned tool calibration record. A full replacement: the submitted\nmeasurements replace the record's response set wholesale, and the result is re-derived against the\nrecord's pinned template version. Signed records are immutable and reject every edit."
      },
      "ToolCalibrationsListParameters": {
        "type": "object",
        "properties": {
          "toolId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Only calibration records for this tool",
            "nullable": true
          },
          "calibratedByVendorId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Only calibration records performed by this vendor",
            "nullable": true
          },
          "search": {
            "type": "string",
            "description": "Search over tool name/serial number/type, master gauge names, certificate number, and notes",
            "nullable": true
          },
          "toolTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolType"
            },
            "description": "Only calibration records for tools of these types",
            "nullable": true
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
            },
            "description": "Only calibration records with these results",
            "nullable": true
          },
          "calibrationDateFromUtc": {
            "type": "string",
            "description": "Only calibration records performed on or after this UTC instant",
            "format": "date-time",
            "nullable": true
          },
          "calibrationDateToUtc": {
            "type": "string",
            "description": "Only calibration records performed on or before this UTC instant",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Filters for the tool calibration record list. All filters are optional and combine with AND\nsemantics (list-valued filters match any of their values)."
      },
      "ToolCreateDto": {
        "required": [
          "calibrationFrequency",
          "name",
          "toolType"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the tool"
          },
          "serialNumber": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The serial number of the tool",
            "nullable": true
          },
          "toolType": {
            "$ref": "#/components/schemas/ToolType"
          },
          "toolStatus": {
            "$ref": "#/components/schemas/ToolStatus"
          },
          "toolInactiveReason": {
            "$ref": "#/components/schemas/ToolInactiveReason"
          },
          "calibrationFrequency": {
            "$ref": "#/components/schemas/ToolEnumCalibrationFrequency"
          },
          "calibrationInterval": {
            "type": "integer",
            "description": "The interval count paired with a recurring calibration frequency (days or months); must be\nnull for a reference gage",
            "format": "int32",
            "nullable": true
          },
          "lastCalibrationDateUtc": {
            "type": "string",
            "description": "When the tool was last calibrated (UTC); required unless the tool is a reference gage",
            "format": "date-time",
            "nullable": true
          },
          "outForRecalibrationDateUtc": {
            "type": "string",
            "description": "When the tool left the shop for recalibration (UTC). Required when the inactive reason is\noutForCalibration, and must be null for every other reason (tandem validation)",
            "format": "date-time",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Free-text notes",
            "nullable": true
          },
          "defaultUnitOfMeasureName": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The unit of measure the tool measures in; must be a standard unit of measure",
            "nullable": true
          },
          "measurementRangeMin": {
            "type": "number",
            "description": "The lower bound of the tool's measurement range",
            "format": "double",
            "nullable": true
          },
          "measurementRangeMinPrecision": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "The decimal precision of the measurement range lower bound",
            "format": "int32",
            "nullable": true
          },
          "measurementRangeMax": {
            "type": "number",
            "description": "The upper bound of the tool's measurement range",
            "format": "double",
            "nullable": true
          },
          "measurementRangeMaxPrecision": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "The decimal precision of the measurement range upper bound",
            "format": "int32",
            "nullable": true
          },
          "accuracy": {
            "type": "number",
            "description": "The tool's rated accuracy",
            "format": "double",
            "nullable": true
          },
          "accuracyPrecision": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "The decimal precision of the rated accuracy",
            "format": "int32",
            "nullable": true
          },
          "size": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The one size a fixed-size gage checks, as stamped on it (\"1/4-20\", \".2500\"). Only thread and\ngo/no-go gage types keep it; on any other tool type it is cleared, and on those types the\nmeasurement range is cleared instead.",
            "nullable": true
          },
          "designation": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "A fixed-size gage's thread form, class, and GO/NO-GO member (\"UNC-2B GO/NOGO\"). Kept and cleared\nunder the same rule as Size.",
            "nullable": true
          },
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The customer that owns the tool; null for shop-owned tools. A customer-owned tool only takes\ncustomer-source calibration records",
            "nullable": true
          },
          "locationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The location of the tool",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request body for creating a tool. The tool's sequential number, computed next calibration due\ndate, and latest-calibration outcome are always derived server-side."
      },
      "ToolDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the tool",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "The tool's sequential number, unique within the tenant (displayed as T-{number})",
            "format": "int32",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The name of the tool",
            "nullable": true
          },
          "serialNumber": {
            "type": "string",
            "description": "The serial number of the tool",
            "nullable": true
          },
          "toolType": {
            "$ref": "#/components/schemas/ToolType"
          },
          "toolStatus": {
            "$ref": "#/components/schemas/ToolStatus"
          },
          "toolInactiveReason": {
            "$ref": "#/components/schemas/ToolInactiveReason"
          },
          "calibrationFrequency": {
            "$ref": "#/components/schemas/ToolEnumCalibrationFrequency"
          },
          "calibrationInterval": {
            "type": "integer",
            "description": "The interval count paired with a recurring calibration frequency (days or months)",
            "format": "int32",
            "nullable": true
          },
          "lastCalibrationDateUtc": {
            "type": "string",
            "description": "When the tool was last calibrated (UTC)",
            "format": "date-time",
            "nullable": true
          },
          "nextCalibrationDateUtc": {
            "type": "string",
            "description": "When the tool's next calibration is due (UTC, computed); null for reference gages, never-calibrated\ntools, and tools inactive as Retired or Lost (permanently out of service — nothing is ever due\nagainst them; clearing the reason restores the date)",
            "format": "date-time",
            "nullable": true
          },
          "lastCalibrationResult": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
          },
          "lastCalibratedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "customer": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "location": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "notes": {
            "type": "string",
            "description": "Free-text notes",
            "nullable": true
          },
          "defaultUnitOfMeasureName": {
            "type": "string",
            "description": "The unit of measure the tool measures in",
            "nullable": true
          },
          "measurementRangeMin": {
            "type": "number",
            "description": "The lower bound of the tool's measurement range",
            "format": "double",
            "nullable": true
          },
          "measurementRangeMinPrecision": {
            "type": "integer",
            "description": "The decimal precision of the measurement range lower bound",
            "format": "int32",
            "nullable": true
          },
          "measurementRangeMax": {
            "type": "number",
            "description": "The upper bound of the tool's measurement range",
            "format": "double",
            "nullable": true
          },
          "measurementRangeMaxPrecision": {
            "type": "integer",
            "description": "The decimal precision of the measurement range upper bound",
            "format": "int32",
            "nullable": true
          },
          "accuracy": {
            "type": "number",
            "description": "The tool's rated accuracy",
            "format": "double",
            "nullable": true
          },
          "accuracyPrecision": {
            "type": "integer",
            "description": "The decimal precision of the rated accuracy",
            "format": "int32",
            "nullable": true
          },
          "size": {
            "type": "string",
            "description": "The one size a fixed-size gage checks, as stamped on it (\"1/4-20\", \".2500\"). Only carried by\nthread and go/no-go gage types; cleared for every other tool type.",
            "nullable": true
          },
          "designation": {
            "type": "string",
            "description": "A fixed-size gage's thread form, class, and GO/NO-GO member (\"UNC-2B GO/NOGO\", \"Class ZZ GO\").\nOnly carried by thread and go/no-go gage types; cleared for every other tool type.",
            "nullable": true
          },
          "modifiedUtc": {
            "type": "string",
            "description": "When the tool was last modified (UTC); supports incremental sync",
            "format": "date-time",
            "nullable": true
          },
          "outForRecalibrationDateUtc": {
            "type": "string",
            "description": "When the tool left the shop for recalibration (UTC). Null means the tool is on site;\na value means it has been out since that date, and requires the outForCalibration\ninactive reason",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A tool (measurement instrument or gage) tracked by the calibration system."
      },
      "ToolEnumCalibrationFrequency": {
        "enum": [
          "recurringDays",
          "recurringMonths",
          "endOfMonth",
          "endOfQuarter",
          "endOfYear",
          "none"
        ],
        "type": "string",
        "description": "How often the tool requires calibration. Mirrors\nFulcrumProduct.Domain.Tools.Data.CalibrationFrequency by underlying value."
      },
      "ToolInactiveReason": {
        "enum": [
          "lost",
          "damaged",
          "requiresRepair",
          "retired",
          "outForCalibration"
        ],
        "type": "string",
        "description": "Why an inactive tool is out of service. Mirrors\nFulcrumProduct.Domain.Tools.Data.ToolInactiveReason by underlying value."
      },
      "ToolMasterGageReferenceDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the master gauge tool",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The name of the master gauge tool",
            "nullable": true
          },
          "toolType": {
            "$ref": "#/components/schemas/ToolType"
          },
          "serialNumber": {
            "type": "string",
            "description": "The serial number of the master gauge tool",
            "nullable": true
          },
          "nextCalibrationDateUtc": {
            "type": "string",
            "description": "When the master gauge's own calibration expires (UTC); null when it has never been calibrated",
            "format": "date-time",
            "nullable": true
          },
          "calibrationFrequency": {
            "$ref": "#/components/schemas/ToolEnumCalibrationFrequency"
          }
        },
        "additionalProperties": false,
        "description": "A master gauge (itself a tool) referenced by a calibration template or checkpoint."
      },
      "ToolRequestCalibrationCheckpointCreateDto": {
        "type": "object",
        "properties": {
          "attribute": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "The characteristic being measured (e.g. \"Diameter\")",
            "nullable": true
          },
          "nominal": {
            "type": "number",
            "description": "The target/nominal value for the measurement",
            "format": "double",
            "nullable": true
          },
          "minimumValue": {
            "type": "number",
            "description": "The minimum acceptable measured value (inclusive)",
            "format": "double",
            "nullable": true
          },
          "maximumValue": {
            "type": "number",
            "description": "The maximum acceptable measured value (inclusive)",
            "format": "double",
            "nullable": true
          },
          "precision": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "number",
            "description": "The decimal precision applied to the nominal value",
            "format": "double",
            "nullable": true
          },
          "units": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The unit of measure of the measurement",
            "nullable": true
          },
          "masterGageId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the master gauge tool used to measure this checkpoint; when null the template's\ndefault master applies",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A measurement checkpoint of a new calibration template version. The checkpoint id is assigned\nserver-side."
      },
      "ToolRequestCalibrationTemplateCreateDto": {
        "type": "object",
        "properties": {
          "procedureName": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "The name of the calibration procedure",
            "nullable": true
          },
          "defaultMasterGageId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The id of the master gauge tool applied to checkpoints that don't specify their own",
            "nullable": true
          },
          "lowerTolerance": {
            "type": "number",
            "description": "The default lower tolerance applied to checkpoints",
            "format": "double",
            "nullable": true
          },
          "lowerTolPrecision": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "The decimal precision of the lower tolerance",
            "format": "int32",
            "nullable": true
          },
          "upperTolerance": {
            "type": "number",
            "description": "The default upper tolerance applied to checkpoints",
            "format": "double",
            "nullable": true
          },
          "upperTolPrecision": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "The decimal precision of the upper tolerance",
            "format": "int32",
            "nullable": true
          },
          "trialsPerCheckpoint": {
            "maximum": 100,
            "minimum": 1,
            "type": "integer",
            "description": "How many trials each checkpoint requires per phase; between 1 and 100 when specified",
            "format": "int32",
            "nullable": true
          },
          "minTempDegC": {
            "type": "number",
            "description": "The minimum acceptable ambient temperature (deg C) during calibration",
            "format": "double",
            "nullable": true
          },
          "maxTempDegC": {
            "type": "number",
            "description": "The maximum acceptable ambient temperature (deg C) during calibration",
            "format": "double",
            "nullable": true
          },
          "maxRelHumidity": {
            "type": "number",
            "description": "The maximum acceptable ambient relative humidity (%) during calibration",
            "format": "double",
            "nullable": true
          },
          "instructions": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Free-text calibration instructions",
            "nullable": true
          },
          "checkpoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolRequestCalibrationCheckpointCreateDto"
            },
            "description": "The measurement checkpoints, in display order (array position defines the order)",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request body for publishing a new calibration template version for a tool. Template versions are\nappend-only and immutable: each publish becomes the tool's new latest version, existing versions\nremain readable history, and existing calibration records stay pinned to the version they were\nmeasured against. The version number and effective range are assigned server-side."
      },
      "ToolStatus": {
        "enum": [
          "active",
          "inactive"
        ],
        "type": "string",
        "description": "Whether the tool is in service. Mirrors\nFulcrumProduct.Domain.Tools.Data.ToolStatus by underlying value."
      },
      "ToolSummaryDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The id of the tool",
            "nullable": true
          },
          "number": {
            "type": "integer",
            "description": "The tool's sequential number, unique within the tenant (displayed as T-{number})",
            "format": "int32",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "The name of the tool",
            "nullable": true
          },
          "toolType": {
            "$ref": "#/components/schemas/ToolType"
          },
          "serialNumber": {
            "type": "string",
            "description": "The serial number of the tool",
            "nullable": true
          },
          "toolStatus": {
            "$ref": "#/components/schemas/ToolStatus"
          },
          "toolInactiveReason": {
            "$ref": "#/components/schemas/ToolInactiveReason"
          },
          "calibrationStatus": {
            "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
          },
          "lastCalibrationDateUtc": {
            "type": "string",
            "description": "When the tool was last calibrated (UTC)",
            "format": "date-time",
            "nullable": true
          },
          "lastCalibratedBy": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "nextCalibrationDateUtc": {
            "type": "string",
            "description": "When the tool's next calibration is due (UTC, computed); null for reference gages, never-calibrated\ntools, and tools inactive as Retired or Lost (permanently out of service — nothing is ever due\nagainst them; clearing the reason restores the date)",
            "format": "date-time",
            "nullable": true
          },
          "daysUntilDue": {
            "type": "integer",
            "description": "Whole days until the next calibration is due; negative when overdue, null when there is no due date",
            "format": "int32",
            "nullable": true
          },
          "calibrationFrequency": {
            "$ref": "#/components/schemas/ToolEnumCalibrationFrequency"
          },
          "calibrationInterval": {
            "type": "integer",
            "description": "The interval count paired with a recurring calibration frequency (days or months)",
            "format": "int32",
            "nullable": true
          },
          "hasOpenNcr": {
            "type": "boolean",
            "description": "True when the tool has an open NCR"
          },
          "notes": {
            "type": "string",
            "description": "Free-text notes",
            "nullable": true
          },
          "modifiedUtc": {
            "type": "string",
            "description": "When the tool was last modified (UTC); supports incremental sync",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A tool row returned by the tools list, including its derived calibration status."
      },
      "ToolType": {
        "enum": [
          "bevelProtractor",
          "bendAngleGage",
          "boreGage",
          "caliper",
          "cmm",
          "coatingThicknessGage",
          "depthMicrometer",
          "gageBlocks",
          "hardnessTester",
          "heightGage",
          "micrometer",
          "opticalComparator",
          "pinGage",
          "plugGage",
          "radiusGage",
          "sineBar",
          "surfacePlate",
          "surfaceRoughnessTester",
          "thicknessGage",
          "threadPlugGage",
          "threadRingGage",
          "vmm",
          "attributeGage",
          "calibrationArtifact",
          "indicator",
          "calibrationStandard",
          "chamferGage",
          "lightMeter",
          "presetter",
          "digitalConductivityMeter",
          "ringGage",
          "profilometer",
          "splineGage",
          "tapeMeasure",
          "thermometer",
          "stopwatch",
          "torqueWrench",
          "instantMeasurementSystem",
          "protractor",
          "pressureGage",
          "tubeGage",
          "tubeMicrometer",
          "thermocouple",
          "ohmMeter",
          "multimeter",
          "weight",
          "fixture",
          "machine",
          "hygrothermometer",
          "concentricityGage",
          "cmmDatumSphere",
          "threadMicrometer",
          "insideMicrometer",
          "pinMicrometer",
          "setPlug",
          "nptRingGage",
          "nptPlugGage",
          "grooveMicrometer",
          "weldingEquipment",
          "surfaceTesterMaster"
        ],
        "type": "string",
        "description": "The type of tool in the calibration system. Member values mirror\nFulcrumProduct.Domain.ToolCalibrations.Data.ToolType one-to-one (guarded by\nToolCalibrationEnumParityTests) so tools map by underlying value."
      },
      "ToolUpdateDto": {
        "required": [
          "calibrationFrequency",
          "name",
          "toolType"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name of the tool"
          },
          "serialNumber": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The serial number of the tool",
            "nullable": true
          },
          "toolType": {
            "$ref": "#/components/schemas/ToolType"
          },
          "toolStatus": {
            "$ref": "#/components/schemas/ToolStatus"
          },
          "toolInactiveReason": {
            "$ref": "#/components/schemas/ToolInactiveReason"
          },
          "calibrationFrequency": {
            "$ref": "#/components/schemas/ToolEnumCalibrationFrequency"
          },
          "calibrationInterval": {
            "type": "integer",
            "description": "The interval count paired with a recurring calibration frequency (days or months); must be\nnull for a reference gage",
            "format": "int32",
            "nullable": true
          },
          "lastCalibrationDateUtc": {
            "type": "string",
            "description": "When the tool was last calibrated (UTC); required unless the tool is a reference gage",
            "format": "date-time",
            "nullable": true
          },
          "outForRecalibrationDateUtc": {
            "type": "string",
            "description": "When the tool left the shop for recalibration (UTC). Required when the inactive reason is\noutForCalibration, and must be null for every other reason (tandem validation)",
            "format": "date-time",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 0,
            "type": "string",
            "description": "Free-text notes",
            "nullable": true
          },
          "defaultUnitOfMeasureName": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The unit of measure the tool measures in; must be a standard unit of measure",
            "nullable": true
          },
          "measurementRangeMin": {
            "type": "number",
            "description": "The lower bound of the tool's measurement range",
            "format": "double",
            "nullable": true
          },
          "measurementRangeMinPrecision": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "The decimal precision of the measurement range lower bound",
            "format": "int32",
            "nullable": true
          },
          "measurementRangeMax": {
            "type": "number",
            "description": "The upper bound of the tool's measurement range",
            "format": "double",
            "nullable": true
          },
          "measurementRangeMaxPrecision": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "The decimal precision of the measurement range upper bound",
            "format": "int32",
            "nullable": true
          },
          "accuracy": {
            "type": "number",
            "description": "The tool's rated accuracy",
            "format": "double",
            "nullable": true
          },
          "accuracyPrecision": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "The decimal precision of the rated accuracy",
            "format": "int32",
            "nullable": true
          },
          "size": {
            "maxLength": 100,
            "minLength": 0,
            "type": "string",
            "description": "The one size a fixed-size gage checks, as stamped on it (\"1/4-20\", \".2500\"). Only thread and\ngo/no-go gage types keep it; on any other tool type it is cleared, and on those types the\nmeasurement range is cleared instead.",
            "nullable": true
          },
          "designation": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "A fixed-size gage's thread form, class, and GO/NO-GO member (\"UNC-2B GO/NOGO\"). Kept and cleared\nunder the same rule as Size.",
            "nullable": true
          },
          "customerId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The customer that owns the tool; null for shop-owned tools. A customer-owned tool only takes\ncustomer-source calibration records",
            "nullable": true
          },
          "locationId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "The location of the tool",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Request body for updating a tool. A full replacement: omitted fields are cleared."
      },
      "ToolsListParameters": {
        "type": "object",
        "properties": {
          "search": {
            "type": "string",
            "description": "Whitespace-insensitive search over tool name, serial number, tool type, size and designation.\nA value that reads as a plain number (0.75) or a span (0-6) also matches tools whose measurement range covers it,\non tool types that keep a range (not thread and go/no-go gages, fixtures, machines or welding equipment).",
            "nullable": true
          },
          "toolTypes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolType"
            },
            "description": "Only tools of these types",
            "nullable": true
          },
          "toolStatuses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolStatus"
            },
            "description": "Only tools with these statuses",
            "nullable": true
          },
          "calibrationStatuses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToolCalibrationEnumCalibrationResult"
            },
            "description": "Only tools whose derived status matches one of these values. Every tool is judged on its\nactive track: a scheduled tool on its latest calibration, a reference gage on its latest\nin-house verification (a gage with no verifications derives NotApplicable).",
            "nullable": true
          },
          "reference": {
            "type": "boolean",
            "description": "Only reference gages (tools with calibration frequency None). AND-combined with\nFulcrumProduct.PublicApi.Dto.Tool.Request.ToolsListParameters.CalibrationStatuses and the other filters."
          },
          "isOverdue": {
            "type": "boolean",
            "description": "Only tools whose next calibration is past due. Never matches an out-of-service tool —\nany inactive tool, unless its reason is OutForCalibration — because such a tool no\nlonger needs calibration"
          },
          "dueWithin7Days": {
            "type": "boolean",
            "description": "Only tools due for calibration within the next 7 days (includes overdue tools; never\nmatches out-of-service tools — see FulcrumProduct.PublicApi.Dto.Tool.Request.ToolsListParameters.IsOverdue)"
          },
          "dueWithin30Days": {
            "type": "boolean",
            "description": "Only tools due for calibration within the next 30 days (includes overdue tools; never\nmatches out-of-service tools — see FulcrumProduct.PublicApi.Dto.Tool.Request.ToolsListParameters.IsOverdue)"
          },
          "requiresAction": {
            "type": "boolean",
            "description": "Only tools needing action: inactive with reason RequiresRepair"
          },
          "calibrated": {
            "type": "boolean",
            "description": "Only tools in good standing: active, not overdue, and passed their latest calibration"
          },
          "nextCalibrationDateFrom": {
            "type": "string",
            "description": "Only tools whose next calibration is due on or after this date, the whole day included. A tool\nwith no due date never matches.",
            "format": "date-time",
            "nullable": true
          },
          "nextCalibrationDateTo": {
            "type": "string",
            "description": "Only tools whose next calibration is due on or before this date, the whole day included. A tool\nwith no due date never matches.",
            "format": "date-time",
            "nullable": true
          },
          "modifiedAfterUtc": {
            "type": "string",
            "description": "Only tools whose record was written strictly after this UTC instant. Poll with the\nlast-seen modifiedUtc to pick up creates and edits; time-derived transitions (a tool\nbecoming due or overdue) and deletions do not advance modifiedUtc — use the due-window\nfilters for schedule tracking",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Filters for the tools list. All filters are optional and combine with AND semantics\n(list-valued filters match any of their values)."
      },
      "UserDto": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "employeeId": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "This property represents the unique identifier of an employee.",
            "nullable": true
          },
          "firstName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "First name",
            "nullable": true
          },
          "lastName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Last name",
            "nullable": true
          },
          "emailAddress": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          },
          "phoneNumber": {
            "type": "string",
            "description": "Email address",
            "nullable": true
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Roles associated to the user.",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicates whether this user has been deleted"
          }
        },
        "additionalProperties": false,
        "description": "User."
      },
      "UserListDto": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "employeeId": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "This property represents the unique identifier of an employee.",
            "nullable": true
          },
          "firstName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "First name",
            "nullable": true
          },
          "lastName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Last name",
            "nullable": true
          },
          "emailAddress": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          },
          "phoneNumber": {
            "type": "string",
            "description": "Email address",
            "nullable": true
          },
          "roleIds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommonReferenceDto"
            },
            "description": "Roles associated to the user.",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicates whether this user has been deleted"
          }
        },
        "additionalProperties": false,
        "description": "User."
      },
      "UserRequestFindParameters": {
        "type": "object",
        "properties": {
          "firstName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter users based on their first name.",
            "nullable": true
          },
          "lastName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter users based on their last name.",
            "nullable": true
          },
          "emailAddress": {
            "type": "string",
            "description": "Email address",
            "nullable": true
          },
          "phoneNumber": {
            "type": "string",
            "description": "Phone number",
            "nullable": true
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter users to those with any of the provided roles.",
            "nullable": true
          },
          "omniSearch": {
            "type": "string",
            "description": "Search for users based on a string that should match any of the user's first name, last name, email address, phone number or roles.",
            "nullable": true
          },
          "includeDeleted": {
            "type": "boolean",
            "description": "When true, inactive/deleted users are included in the results. Defaults to false, in which case only active users are returned."
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding users."
      },
      "UserStatusDto": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "description": "The user's first name",
            "nullable": true
          },
          "lastName": {
            "type": "string",
            "description": "The user's last name",
            "nullable": true
          },
          "isOnBreak": {
            "type": "boolean",
            "description": "Whether user is on break."
          },
          "breakStartAtUtc": {
            "type": "string",
            "description": "Time the break started.",
            "format": "date-time",
            "nullable": true
          },
          "elapsedBreakTimeInSeconds": {
            "type": "number",
            "description": "The elapsed break time in seconds.",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "isClockedIn": {
            "type": "boolean",
            "description": "Whether the user is clocked in."
          },
          "clockedInAtUtc": {
            "type": "string",
            "description": "Date-time the user clocked in at.",
            "format": "date-time",
            "nullable": true
          },
          "elapsedClockedInTimeInSeconds": {
            "type": "number",
            "description": "The elapsed clocked in time in seconds.",
            "format": "double",
            "nullable": true,
            "readOnly": true
          },
          "jobs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DtoUserJobOpTimer"
            },
            "description": "The jobs the user is working on."
          }
        },
        "additionalProperties": false,
        "description": "A user object that contains information about the jobs/operations the user is clocked into, as well as if the user is on break."
      },
      "V2InventoryDataEventSourceType": {
        "enum": [
          "purchaseOrder",
          "job",
          "shipment",
          "shipmentLineItem",
          "shipping",
          "receiving",
          "item",
          "workOrder",
          "salesOrder",
          "jobOperation",
          "workOrderOperation",
          "fulfillment",
          "itemToMakeMaterialRemnant",
          "poRcvValueAdj"
        ],
        "type": "string"
      },
      "V2InventoryRestResourcesTransactionChangeType": {
        "enum": [
          "increase",
          "decrease",
          "static"
        ],
        "type": "string"
      },
      "VendorAddressDto": {
        "required": [
          "address1",
          "city",
          "id",
          "postalCode"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the address (Bob's Shipping, Primary, Reno Warehouse, etc).",
            "nullable": true
          },
          "address1": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Primary address line."
          },
          "address2": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Second address line.",
            "nullable": true
          },
          "address3": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Third address line.",
            "nullable": true
          },
          "city": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address city"
          },
          "stateProvince": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address state/province.",
            "nullable": true
          },
          "postalCode": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Postal/zip code."
          },
          "country": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Country identifier.",
            "nullable": true
          },
          "shippingLeadTime": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead time for shipping contents.",
            "format": "int32",
            "nullable": true
          },
          "primaryBilling": {
            "type": "boolean",
            "description": "Signifies if this is a primary billing address."
          },
          "primaryShipping": {
            "type": "boolean",
            "description": "Signifies if this is a primary billing address."
          },
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Associated phone number",
            "nullable": true
          },
          "fax": {
            "type": "string",
            "description": "Associated fax number",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "General notes associated to this vendor address",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Address with additional context for a vendor"
      },
      "VendorAddressUpdateDto": {
        "required": [
          "address1",
          "city",
          "postalCode"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the address (Bob's Shipping, Primary, Reno Warehouse, etc).",
            "nullable": true
          },
          "address1": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Primary address line."
          },
          "address2": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Second address line.",
            "nullable": true
          },
          "address3": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Third address line.",
            "nullable": true
          },
          "city": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address city"
          },
          "stateProvince": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Address state/province.",
            "nullable": true
          },
          "postalCode": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Postal/zip code."
          },
          "country": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Country identifier.",
            "nullable": true
          },
          "shippingLeadTime": {
            "minimum": 0,
            "type": "integer",
            "description": "Lead time for shipping contents.",
            "format": "int32",
            "nullable": true
          },
          "primaryBilling": {
            "type": "boolean",
            "description": "Signifies if this is a primary billing address."
          },
          "primaryShipping": {
            "type": "boolean",
            "description": "Signifies if this is a primary billing address."
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Associated phone number",
            "nullable": true
          },
          "fax": {
            "type": "string",
            "description": "Associated fax number",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "General notes associated to this customer address",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Address with additional context for updating for a vendor"
      },
      "VendorContactCreateDto": {
        "required": [
          "firstName"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "First name"
          },
          "lastName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Last name",
            "nullable": true
          },
          "position": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Position / Job Title",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Phone number",
            "nullable": true
          },
          "cellPhone": {
            "type": "string",
            "description": "Cellphone number",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          },
          "fax": {
            "type": "string",
            "description": "Fax number",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Internal notes about this contact.",
            "nullable": true
          },
          "emailPurchaseOrders": {
            "type": "boolean",
            "description": "Whether this contact should receive purchase order emails."
          }
        },
        "additionalProperties": false,
        "description": "A vendor contact"
      },
      "VendorContactDto": {
        "required": [
          "firstName",
          "id",
          "lastName"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 36,
            "type": "string",
            "description": "Id"
          },
          "firstName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "First name"
          },
          "lastName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Last name"
          },
          "position": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Position / Job Title",
            "nullable": true
          },
          "cellPhone": {
            "type": "string",
            "description": "Cellphone number",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Phone number",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          },
          "fax": {
            "type": "string",
            "description": "Fax number",
            "nullable": true
          },
          "notes": {
            "type": "string",
            "description": "Internal notes about this contact.",
            "nullable": true
          },
          "emailPurchaseOrders": {
            "type": "boolean",
            "description": "Whether this contact should receive purchase order emails."
          }
        },
        "additionalProperties": false,
        "description": "A vendor contact"
      },
      "VendorContactUpdateDto": {
        "required": [
          "firstName"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "First name"
          },
          "lastName": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Last name",
            "nullable": true
          },
          "position": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Position / Job Title",
            "nullable": true
          },
          "phone": {
            "type": "string",
            "description": "Phone number",
            "nullable": true
          },
          "cellPhone": {
            "type": "string",
            "description": "Cellphone number",
            "nullable": true
          },
          "email": {
            "type": "string",
            "description": "Email address",
            "format": "email",
            "nullable": true
          },
          "fax": {
            "type": "string",
            "description": "Fax number",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "Internal notes about this contact.",
            "nullable": true
          },
          "emailPurchaseOrders": {
            "type": "boolean",
            "description": "Whether this contact should receive purchase order emails. When omitted, the existing value is preserved.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A vendor contact"
      },
      "VendorCreateDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name to give the entity. Must be unique to all active vendors."
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms key identifier. Please reference /api/payment-terms endpoint.",
            "nullable": true
          },
          "vendorCode": {
            "minLength": 1,
            "type": "string",
            "description": "Unique identifier for this vendor.",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "General notes associated to this vendor",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "The currency of the vendor",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for the vendor",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Definition for creating a vendor."
      },
      "VendorDto": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Id"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name to give the vendor. Must be unique to all active vendors."
          },
          "vendorCode": {
            "minLength": 1,
            "type": "string",
            "description": "Unique identifier for this vendor.",
            "nullable": true
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms identifier. Please reference /api/payment-terms endpoint.",
            "nullable": true
          },
          "paymentTerms": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "General notes associated to this vendor",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "External references associated with this entity.",
            "nullable": true
          },
          "customFields": {
            "type": "object",
            "additionalProperties": { },
            "description": "Custom fields that have been defined on this entity.",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "The currency of the vendor.",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "Approval/quality status of the vendor. One of: Approved, Probation, Monitor, Disqualified, Other.",
            "nullable": true
          },
          "active": {
            "type": "boolean",
            "description": "Whether the vendor is active."
          },
          "leadTime": {
            "type": "integer",
            "description": "Default lead time in days.",
            "format": "int32",
            "nullable": true
          },
          "url": {
            "type": "string",
            "description": "Vendor website URL.",
            "format": "uri",
            "nullable": true
          },
          "vendorSince": {
            "type": "string",
            "description": "Date the vendor relationship began.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "A vendor"
      },
      "VendorRequestFindParameters": {
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter to vendors who's name contains the given string",
            "nullable": true
          },
          "vendorCode": {
            "minLength": 1,
            "type": "string",
            "description": "Unique identifier for this vendor.",
            "nullable": true
          },
          "externalReference": {
            "$ref": "#/components/schemas/CommonExternalReferenceFindDto"
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding vendors."
      },
      "VendorUpdateDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "The name to give the entity. Must be unique to all active vendors."
          },
          "paymentTermsId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Payment terms key identifier. Please reference /api/payment-terms endpoint.",
            "nullable": true
          },
          "vendorCode": {
            "minLength": 1,
            "type": "string",
            "description": "Unique identifier for this vendor.",
            "nullable": true
          },
          "notes": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string",
            "description": "General notes associated to this vendor.",
            "nullable": true
          },
          "currencyCode": {
            "type": "string",
            "description": "The currency of the vendor. When omitted, the existing value is preserved.",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "Approval/quality status of the vendor. One of: Approved, Probation, Monitor, Disqualified, Other.\nWhen omitted, the existing value is preserved.",
            "nullable": true
          },
          "active": {
            "type": "boolean",
            "description": "Whether the vendor is active. When omitted, the existing value is preserved.",
            "nullable": true
          },
          "leadTime": {
            "minimum": 0,
            "type": "integer",
            "description": "Default lead time in days.",
            "format": "int32",
            "nullable": true
          },
          "url": {
            "type": "string",
            "description": "Vendor website URL.",
            "format": "uri",
            "nullable": true
          },
          "vendorSince": {
            "type": "string",
            "description": "Date the vendor relationship began.",
            "format": "date-time",
            "nullable": true
          },
          "externalReferences": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CommonExternalReferenceDto"
            },
            "description": "Arbitrary key-value-pair like data that can be used to later on search for this line item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Definition for updating a vendor."
      },
      "WorkCenterCreateDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "departmentId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Department identifier. Please reference /api/departments endpoint.",
            "nullable": true
          },
          "setupRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for setup.",
            "format": "double",
            "nullable": true
          },
          "laborRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for labor.",
            "format": "double",
            "nullable": true
          },
          "overheadRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for overhead.",
            "format": "double",
            "nullable": true
          },
          "machineRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for machine. Providing a value turns on machine time for this work center.",
            "format": "double",
            "nullable": true
          },
          "equipmentIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the equipment associated with this work center. Please reference /api/equipment endpoint.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of a work center to be created."
      },
      "WorkCenterDto": {
        "required": [
          "id",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique id associated to this entity."
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "departmentId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Department identifier. Please reference /api/departments endpoint.",
            "nullable": true
          },
          "setupRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for setup.",
            "format": "double",
            "nullable": true
          },
          "runRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for run.",
            "format": "double",
            "nullable": true
          },
          "laborRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for labor.",
            "format": "double",
            "nullable": true
          },
          "overheadRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for overhead.",
            "format": "double",
            "nullable": true
          },
          "machineRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for machine.",
            "format": "double",
            "nullable": true
          },
          "deleted": {
            "type": "boolean",
            "description": "Indicates whether this equipment has been deleted"
          },
          "equipment": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EquipmentDto"
            },
            "description": "Equipment associated with this workcenter."
          }
        },
        "additionalProperties": false,
        "description": "Workcenter definition."
      },
      "WorkCenterRequestFindParameters": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter workcenters based on matching ids.",
            "nullable": true
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Filter workcenters based on their name.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding workcenters."
      },
      "WorkCenterUpdateDto": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Identifying name. Must be unique."
          },
          "departmentId": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Department identifier. Please reference /api/departments endpoint.",
            "nullable": true
          },
          "setupRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for setup.",
            "format": "double",
            "nullable": true
          },
          "laborRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for labor.",
            "format": "double",
            "nullable": true
          },
          "overheadRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for overhead.",
            "format": "double",
            "nullable": true
          },
          "machineRate": {
            "minimum": 0,
            "type": "number",
            "description": "Hourly cost rate for machine. Providing a value turns on machine time for this work center.",
            "format": "double",
            "nullable": true
          },
          "equipmentIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the equipment associated with this work center. Replaces the existing set.\nPlease reference /api/equipment endpoint.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Details of a work center to be updated. This is a full replacement: any field omitted\n(department, rates, equipment) is treated as cleared."
      },
      "WorkOrderCreateDto": {
        "required": [
          "operations"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Name of the work order. When omitted, the work order is named by its number.",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/WorkOrderStatusEnum"
          },
          "priority": {
            "$ref": "#/components/schemas/JobPriorityEnum"
          },
          "productionDueDateUtc": {
            "type": "string",
            "description": "Production due date. When omitted, the earliest production due date among the jobs is used.",
            "format": "date-time",
            "nullable": true
          },
          "operations": {
            "maxItems": 50,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderCreateOperationDto"
            },
            "description": "The work-order operations to create, 1 to 50."
          }
        },
        "additionalProperties": false,
        "description": "A work order to create from job operations: each entry in `operations` becomes one work-order\noperation owning the job operations it lists."
      },
      "WorkOrderCreateJobOperationDto": {
        "required": [
          "jobId",
          "jobOperationId"
        ],
        "type": "object",
        "properties": {
          "jobId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Id of the job the operation belongs to."
          },
          "jobOperationId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Id of the job operation, as returned by the nestable-jobs list and the work-package manifest."
          }
        },
        "additionalProperties": false,
        "description": "One job operation, named by its job and its job-operation id."
      },
      "WorkOrderCreateOperationDto": {
        "required": [
          "jobOperations"
        ],
        "type": "object",
        "properties": {
          "additionalInstructions": {
            "type": "string",
            "description": "Instructions shown on the work-order operation.",
            "nullable": true
          },
          "estimatedSetupTimeSeconds": {
            "maximum": 1000000000000000,
            "minimum": 0,
            "type": "number",
            "description": "Estimated setup time in seconds. When omitted, it is aggregated from the job operations.",
            "format": "double",
            "nullable": true
          },
          "estimatedRunTimeSeconds": {
            "maximum": 1000000000000000,
            "minimum": 0,
            "type": "number",
            "description": "Estimated run time in seconds. When omitted, it is aggregated from the job operations.",
            "format": "double",
            "nullable": true
          },
          "jobOperations": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderCreateJobOperationDto"
            },
            "description": "The job operations this work-order operation owns, 1 to 500. All must be on the same system\noperation, and no job operation may appear more than once on the work order. At most 500 job\noperations may be listed across all operations."
          }
        },
        "additionalProperties": false,
        "description": "One work-order operation and the job operations it will own."
      },
      "WorkOrderDto": {
        "required": [
          "id",
          "name",
          "number",
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Unique Id associated to this entity"
          },
          "number": {
            "type": "integer",
            "description": "Job number",
            "format": "int32"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Job name, defaults to number unless otherwise specified."
          },
          "createdUtc": {
            "type": "string",
            "description": "The date the job was created",
            "format": "date-time"
          },
          "completedOnUtc": {
            "type": "string",
            "description": "The job completion datetime.",
            "format": "date-time",
            "nullable": true
          },
          "cancelledOnUtc": {
            "type": "string",
            "description": "The job cancelled datetime.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledStartUtc": {
            "type": "string",
            "description": "The current scheduled start time.",
            "format": "date-time",
            "nullable": true
          },
          "scheduledEndUtc": {
            "type": "string",
            "description": "The current scheduled end time.",
            "format": "date-time",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/WorkOrderStatusEnum"
          },
          "priority": {
            "$ref": "#/components/schemas/JobPriorityEnum"
          }
        },
        "additionalProperties": false,
        "description": "Represents a work order"
      },
      "WorkOrderNestingSetupItemLinkSaveDto": {
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Id of the linked item.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "An item link, by id. The item's name is resolved by the server."
      },
      "WorkOrderNestingSetupJobOperationQuantityDto": {
        "required": [
          "jobOperationId",
          "quantity"
        ],
        "type": "object",
        "properties": {
          "jobOperationId": {
            "minLength": 1,
            "type": "string",
            "description": "Id of the job operation the parts are cut for."
          },
          "quantity": {
            "type": "integer",
            "description": "How many of the part are cut for that job operation.",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "How many of a part are cut for one job operation."
      },
      "WorkOrderNestingSetupJobOperationQuantitySaveDto": {
        "required": [
          "jobOperationId"
        ],
        "type": "object",
        "properties": {
          "jobOperationId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Id of the job operation the parts are cut for."
          },
          "quantity": {
            "maximum": 1000000,
            "minimum": 0,
            "type": "integer",
            "description": "How many of the part are cut for that job operation.",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "How many of a part are cut for one job operation."
      },
      "WorkOrderNestingSetupNestingSoftwareEnum": {
        "enum": [
          "unknown",
          "proNest",
          "nestingCenter",
          "radan",
          "lantek",
          "drAbe",
          "boost",
          "sigmaNest",
          "cadman",
          "fulcrum"
        ],
        "type": "string",
        "description": "The nesting software a nest came from."
      },
      "WorkOrderNestingSetupPartDto": {
        "required": [
          "id",
          "jobOperationQuantities",
          "quantity",
          "surfaceArea"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Identifier of the part within the nest."
          },
          "partNumber": {
            "type": "string",
            "description": "Part number as the nesting software reported it.",
            "nullable": true
          },
          "quantity": {
            "type": "integer",
            "description": "How many of this part the nest cuts.",
            "format": "int32"
          },
          "partTimeSeconds": {
            "type": "number",
            "description": "Cut time for one instance of the part, in seconds.",
            "format": "double",
            "nullable": true
          },
          "surfaceArea": {
            "type": "number",
            "description": "Surface area of one instance of the part.",
            "format": "double"
          },
          "contoursLength": {
            "type": "number",
            "description": "Total contour length cut for one instance of the part.",
            "format": "double",
            "nullable": true
          },
          "item": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "jobOperationQuantities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupJobOperationQuantityDto"
            },
            "description": "How the part's quantity is split across the job operations the nest serves, ordered by job operation id."
          }
        },
        "additionalProperties": false,
        "description": "One distinct part the nest cuts, across every sheet."
      },
      "WorkOrderNestingSetupPartSaveDto": {
        "required": [
          "jobOperationQuantities",
          "partNumber"
        ],
        "type": "object",
        "properties": {
          "partNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Part number as the nesting software reported it. Links the part to its sheet placements."
          },
          "quantity": {
            "maximum": 1000000,
            "minimum": 0,
            "type": "integer",
            "description": "How many of this part the nest cuts. Stored as sent; not recomputed from the sheets.",
            "format": "int32"
          },
          "partTimeSeconds": {
            "maximum": 1000000000,
            "minimum": 0,
            "type": "number",
            "description": "Cut time for one instance of the part, in seconds.",
            "format": "double",
            "nullable": true
          },
          "surfaceArea": {
            "maximum": 1000000000000,
            "minimum": 0,
            "type": "number",
            "description": "Surface area of one instance of the part.",
            "format": "double"
          },
          "contoursLength": {
            "maximum": 1000000000000,
            "minimum": 0,
            "type": "number",
            "description": "Total contour length cut for one instance of the part.",
            "format": "double",
            "nullable": true
          },
          "itemId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Id of the catalog item this part represents. An id that names no item is stored as sent and\nreported in `validationIssues`.",
            "nullable": true
          },
          "item": {
            "$ref": "#/components/schemas/WorkOrderNestingSetupItemLinkSaveDto"
          },
          "jobOperationQuantities": {
            "maxItems": 500,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupJobOperationQuantitySaveDto"
            },
            "description": "How the part's quantity is split across the job operations the nest serves, up to 500. A job\noperation may appear once. Empty is stored and reported as an `error`-severity issue."
          }
        },
        "additionalProperties": false,
        "description": "One distinct part the nest cuts, across every sheet."
      },
      "WorkOrderNestingSetupPlateDto": {
        "required": [
          "completedCount",
          "count",
          "dimensionX",
          "dimensionY",
          "id",
          "isComplete",
          "pageNumber",
          "parts",
          "runtimeSeconds"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Identifier of the sheet within the nest."
          },
          "dimensionX": {
            "type": "number",
            "description": "First sheet dimension as the nesting software reported it.",
            "format": "double"
          },
          "dimensionY": {
            "type": "number",
            "description": "Second sheet dimension as the nesting software reported it.",
            "format": "double"
          },
          "runtimeSeconds": {
            "type": "number",
            "description": "Machine runtime for one repetition of this sheet, in seconds.",
            "format": "double"
          },
          "count": {
            "type": "integer",
            "description": "How many repetitions of this sheet the nest requires.",
            "format": "int32"
          },
          "completedCount": {
            "type": "integer",
            "description": "How many of those repetitions are finished. A sheet completed before repetitions were tracked reports every repetition finished.",
            "format": "int32"
          },
          "isComplete": {
            "type": "boolean",
            "description": "True once every repetition of the sheet is finished."
          },
          "pageNumber": {
            "type": "integer",
            "description": "Page the sheet appeared on in the nest report.",
            "format": "int32"
          },
          "item": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "sheetName": {
            "type": "string",
            "description": "Program name some nesting software records against the sheet.",
            "nullable": true
          },
          "parts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupPlatePartDto"
            },
            "description": "The parts laid out on one repetition of the sheet."
          }
        },
        "additionalProperties": false,
        "description": "One sheet the nest requires, and the parts laid out on it."
      },
      "WorkOrderNestingSetupPlatePartDto": {
        "required": [
          "id",
          "quantity",
          "scrap"
        ],
        "type": "object",
        "properties": {
          "id": {
            "minLength": 1,
            "type": "string",
            "description": "Identifier of the placement within the nest."
          },
          "partNumber": {
            "type": "string",
            "description": "Part number as the nesting software reported it.",
            "nullable": true
          },
          "quantity": {
            "type": "integer",
            "description": "How many of the part are placed on one repetition of the sheet.",
            "format": "int32"
          },
          "scrap": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupScrapDto"
            },
            "description": "Scrap recorded against the part on this sheet."
          }
        },
        "additionalProperties": false,
        "description": "One part laid out on a sheet."
      },
      "WorkOrderNestingSetupPlatePartSaveDto": {
        "required": [
          "partNumber"
        ],
        "type": "object",
        "properties": {
          "partNumber": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Part number as the nesting software reported it. Links the placement to its part."
          },
          "quantity": {
            "maximum": 1000000,
            "minimum": 0,
            "type": "integer",
            "description": "How many of the part are placed on one repetition of the sheet.",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "One part laid out on a sheet."
      },
      "WorkOrderNestingSetupPlateSaveDto": {
        "required": [
          "count",
          "parts"
        ],
        "type": "object",
        "properties": {
          "dimensionX": {
            "maximum": 1000000000,
            "minimum": 0,
            "type": "number",
            "description": "First sheet dimension as the nesting software reported it.",
            "format": "double"
          },
          "dimensionY": {
            "maximum": 1000000000,
            "minimum": 0,
            "type": "number",
            "description": "Second sheet dimension as the nesting software reported it.",
            "format": "double"
          },
          "runtimeSeconds": {
            "maximum": 1000000000,
            "minimum": 0,
            "type": "number",
            "description": "Machine runtime for one repetition of this sheet, in seconds.",
            "format": "double"
          },
          "count": {
            "maximum": 100000,
            "minimum": 1,
            "type": "integer",
            "description": "How many repetitions of this sheet the nest requires, at least 1.",
            "format": "int32"
          },
          "pageNumber": {
            "maximum": 100000,
            "minimum": 0,
            "type": "integer",
            "description": "Page the sheet appeared on in the nest report.",
            "format": "int32"
          },
          "itemId": {
            "maxLength": 36,
            "minLength": 24,
            "type": "string",
            "description": "Id of the material item the sheet is cut from. Drives the operation's required materials. Null\nis stored and reported as an `error`-severity issue.",
            "nullable": true
          },
          "item": {
            "$ref": "#/components/schemas/WorkOrderNestingSetupItemLinkSaveDto"
          },
          "sheetName": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "Program name some nesting software records against the sheet.",
            "nullable": true
          },
          "parts": {
            "maxItems": 2000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupPlatePartSaveDto"
            },
            "description": "The parts laid out on one repetition of the sheet, up to 2000."
          }
        },
        "additionalProperties": false,
        "description": "One sheet the nest requires, and the parts laid out on it."
      },
      "WorkOrderNestingSetupScrapDto": {
        "required": [
          "quantity"
        ],
        "type": "object",
        "properties": {
          "quantity": {
            "type": "integer",
            "description": "How many instances of the part were scrapped.",
            "format": "int32"
          },
          "reworkReasonId": {
            "type": "string",
            "description": "Id of the rework reason the scrap was recorded under.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Scrap recorded against a part on a sheet."
      },
      "WorkOrderNestingSetupUnplacedPartDto": {
        "required": [
          "quantity"
        ],
        "type": "object",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "Id of the source file the part came from.",
            "nullable": true
          },
          "fileName": {
            "type": "string",
            "description": "Name of the source file the part came from.",
            "nullable": true
          },
          "quantity": {
            "type": "integer",
            "description": "How many instances of the part the nest is short.",
            "format": "int32"
          },
          "reason": {
            "type": "string",
            "description": "Why the nesting software could not place them.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One part the nest could not place in full."
      },
      "WorkOrderNestingSetupUnplacedPartSaveDto": {
        "type": "object",
        "properties": {
          "fileId": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "Id of the source file the part came from.",
            "nullable": true
          },
          "fileName": {
            "maxLength": 400,
            "minLength": 0,
            "type": "string",
            "description": "Name of the source file the part came from.",
            "nullable": true
          },
          "quantity": {
            "maximum": 1000000,
            "minimum": 0,
            "type": "integer",
            "description": "How many instances of the part the nest is short.",
            "format": "int32"
          },
          "reason": {
            "maxLength": 1000,
            "minLength": 0,
            "type": "string",
            "description": "Why the nesting software could not place them.",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "One part the nest could not place in full."
      },
      "WorkOrderNestingSetupValidationIssueDto": {
        "required": [
          "index",
          "message",
          "severity",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/WorkOrderNestingSetupValidationIssueTypeEnum"
          },
          "severity": {
            "$ref": "#/components/schemas/WorkOrderNestingSetupValidationIssueSeverityEnum"
          },
          "index": {
            "type": "integer",
            "description": "Position of the part in `parts`, or of the sheet in `plates`, on the stored nest.",
            "format": "int32"
          },
          "message": {
            "minLength": 1,
            "type": "string",
            "description": "What is wrong."
          }
        },
        "additionalProperties": false,
        "description": "One problem validation found on a stored nest."
      },
      "WorkOrderNestingSetupValidationIssueSeverityEnum": {
        "enum": [
          "error",
          "warning"
        ],
        "type": "string",
        "description": "How serious a nest validation issue is."
      },
      "WorkOrderNestingSetupValidationIssueTypeEnum": {
        "enum": [
          "part",
          "plate"
        ],
        "type": "string",
        "description": "What a nest validation issue is about."
      },
      "WorkOrderOperationNestingSetupDto": {
        "required": [
          "isNested",
          "machineTimeSeconds",
          "parts",
          "plates",
          "unplacedParts",
          "workOrderId",
          "workOrderOperationId"
        ],
        "type": "object",
        "properties": {
          "workOrderId": {
            "minLength": 1,
            "type": "string",
            "description": "Id of the work order the operation belongs to."
          },
          "workOrderOperationId": {
            "minLength": 1,
            "type": "string",
            "description": "Id of the work-order operation."
          },
          "operation": {
            "$ref": "#/components/schemas/CommonGuidOrMongoReferenceDto"
          },
          "isNested": {
            "type": "boolean",
            "description": "True when the nest places at least one part or requires at least one sheet. False means `parts` and `plates` are empty and `machineTimeSeconds` is 0; `unplacedParts` may still list what the nest could not place."
          },
          "nestingSoftware": {
            "$ref": "#/components/schemas/WorkOrderNestingSetupNestingSoftwareEnum"
          },
          "machineName": {
            "type": "string",
            "description": "Machine the nest was programmed for, as named by the nesting software.",
            "nullable": true
          },
          "nestingFile": {
            "$ref": "#/components/schemas/CommonReferenceDto"
          },
          "machineTimeSeconds": {
            "type": "number",
            "description": "The sum of each sheet's recorded runtime, in seconds, counting one repetition per sheet — `plates[].count` is not applied. Zero when the operation has no nest.",
            "format": "double"
          },
          "parts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupPartDto"
            },
            "description": "The distinct parts the nest cuts."
          },
          "plates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupPlateDto"
            },
            "description": "The sheets the nest requires."
          },
          "unplacedParts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupUnplacedPartDto"
            },
            "description": "Parts the nest could not place in full, with the shortfall and the reason."
          }
        },
        "additionalProperties": false,
        "description": "The nest planned onto one work-order operation: the parts it cuts, the sheets it cuts them from,\nand the parts it could not place."
      },
      "WorkOrderOperationNestingSetupSaveDto": {
        "type": "object",
        "properties": {
          "nestingSoftware": {
            "$ref": "#/components/schemas/WorkOrderNestingSetupNestingSoftwareEnum"
          },
          "machineName": {
            "maxLength": 200,
            "minLength": 0,
            "type": "string",
            "description": "Machine the nest was programmed for, as named by the nesting software.",
            "nullable": true
          },
          "parts": {
            "maxItems": 2000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupPartSaveDto"
            },
            "description": "The distinct parts the nest cuts, up to 2000. The stored list is derived from the sheets: a part\non no sheet is dropped, and a sheet part number with no entry here is added at quantity 0. Empty\ntogether with `plates` clears the nest."
          },
          "plates": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupPlateSaveDto"
            },
            "description": "The sheets the nest requires, up to 1000, carrying at most 20000 placements between them."
          },
          "unplacedParts": {
            "maxItems": 2000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupUnplacedPartSaveDto"
            },
            "description": "Parts the nest could not place in full, up to 2000."
          }
        },
        "additionalProperties": false,
        "description": "A nest to store on one work-order operation, replacing whatever nest it carries. Parts and sheet\nplacements link by `partNumber`; every nest-internal id is assigned by the server, so none is\nsent. The server owns the nest's `id`, `isNested`, `machineTimeSeconds` and each\nsheet's completion and inventory, so the body carries none of them, and it keeps\n`nestingFile` — the nest report the stored nest was read from — across the replace."
      },
      "WorkOrderOperationNestingSetupSaveResultDto": {
        "required": [
          "nestingSetup",
          "validationIssues"
        ],
        "type": "object",
        "properties": {
          "nestingSetup": {
            "$ref": "#/components/schemas/WorkOrderOperationNestingSetupDto"
          },
          "validationIssues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderNestingSetupValidationIssueDto"
            },
            "description": "Issues found on the stored nest. The write has already happened; an `error` means the nest\ncannot be tracked or costed as it stands."
          }
        },
        "additionalProperties": false,
        "description": "The outcome of replacing the nest on a work-order operation: the nest as stored, and what\nvalidation found on it."
      },
      "WorkOrderReferenceDto": {
        "required": [
          "id",
          "name",
          "number"
        ],
        "type": "object",
        "properties": {
          "id": {
            "maxLength": 24,
            "minLength": 24,
            "type": "string",
            "description": "Identifier of work order.\nPlease reference api/work-orders endpoint for additional information."
          },
          "number": {
            "minimum": 0,
            "type": "integer",
            "description": "Number",
            "format": "int32"
          },
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string",
            "description": "Work order name, defaults to number unless otherwise specified."
          }
        },
        "additionalProperties": false,
        "description": "Work order reference information"
      },
      "WorkOrderRequestFindParameters": {
        "type": "object",
        "properties": {
          "workOrderIds": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter to work orders whose ids are in the list",
            "nullable": true
          },
          "numbers": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Filter to only given numbers",
            "nullable": true
          },
          "names": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Filter to only given names",
            "nullable": true
          },
          "statuses": {
            "maxItems": 500,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WorkOrderStatusEnum"
            },
            "description": "Filter to match the given statuses",
            "nullable": true
          },
          "createdBeforeUtc": {
            "type": "string",
            "description": "Filters jobs created before (exclusive) this parameter in UTC time. If not time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "createdAfterUtc": {
            "type": "string",
            "description": "Filters jobs created after (exclusive) this parameter in UTC time. If not time component is passed, midnight UTC will be used.",
            "format": "date-time",
            "nullable": true
          },
          "completedOnFrom": {
            "type": "string",
            "description": "Filter to work orders completed on or after this date, as a whole day in the shop's timezone.\nAny time component is ignored.",
            "format": "date-time",
            "nullable": true
          },
          "completedOnTo": {
            "type": "string",
            "description": "Filter to work orders completed on or before this date, as a whole day in the shop's timezone,\nso a work order completed later that same shop day still matches.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Parameters used for searching/finding work orders."
      },
      "WorkOrderStatusEnum": {
        "enum": [
          "needsReview",
          "approved",
          "scheduled",
          "inProgress",
          "complete",
          "cancelled"
        ],
        "type": "string",
        "description": "Work order status"
      }
    },
    "securitySchemes": {
      "bearer": {
        "type": "http",
        "description": "Your API bearer token generated in System Data > Advanced > Public API Setup",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "Accounting Code",
      "tags": [
        "Accounting Code"
      ]
    },
    {
      "name": "Alert",
      "tags": [
        "Alert"
      ]
    },
    {
      "name": "Attachment",
      "tags": [
        "Attachment",
        "Attachment Certification"
      ]
    },
    {
      "name": "Auth",
      "tags": [
        "Auth"
      ]
    },
    {
      "name": "CAPAs",
      "tags": [
        "CAPAs"
      ]
    },
    {
      "name": "Change Order",
      "tags": [
        "Change Order"
      ]
    },
    {
      "name": "Chart Of Accounts",
      "tags": [
        "Chart Of Accounts"
      ]
    },
    {
      "name": "Company Info",
      "tags": [
        "Company Info"
      ]
    },
    {
      "name": "Custom Field",
      "tags": [
        "Custom Field"
      ]
    },
    {
      "name": "Customer",
      "tags": [
        "Customer",
        "Customer Address",
        "Customer Contact"
      ]
    },
    {
      "name": "Customer Tier",
      "tags": [
        "Customer Tier"
      ]
    },
    {
      "name": "Department",
      "tags": [
        "Department"
      ]
    },
    {
      "name": "Department Shift",
      "tags": [
        "Department Shift"
      ]
    },
    {
      "name": "Equipment",
      "tags": [
        "Equipment"
      ]
    },
    {
      "name": "Equipment Downtime",
      "tags": [
        "Equipment Downtime"
      ]
    },
    {
      "name": "Gauge Code",
      "tags": [
        "Gauge Code"
      ]
    },
    {
      "name": "Grade Code",
      "tags": [
        "Grade Code"
      ]
    },
    {
      "name": "InProcessTrackingFieldType",
      "tags": [
        "InProcessTrackingFieldType"
      ]
    },
    {
      "name": "Inventory",
      "tags": [
        "Inventory"
      ]
    },
    {
      "name": "Inventory Event",
      "tags": [
        "Inventory Event",
        "Inventory Event Details"
      ]
    },
    {
      "name": "Inventory Lot",
      "tags": [
        "Inventory Lot"
      ]
    },
    {
      "name": "Inventory Transactions",
      "tags": [
        "Inventory Transactions"
      ]
    },
    {
      "name": "Invoice",
      "tags": [
        "Invoice",
        "Invoice Deposit Adjustment Line Item",
        "Invoice Deposit Line Item",
        "Invoice Discount Line Item",
        "Invoice Fee Line Item",
        "Invoice Line Item",
        "Invoice Note",
        "Invoice Part Line Item",
        "Invoice Refund Line Item",
        "Invoice Shipping Charge Line Item",
        "Invoice Tax Line Item"
      ]
    },
    {
      "name": "Item",
      "tags": [
        "Item",
        "Item Custom Fields",
        "Item Customer",
        "Item Material Vendor",
        "Item PriceBreaks",
        "Item Routing",
        "Item Vendor"
      ]
    },
    {
      "name": "Item Category",
      "tags": [
        "Item Category"
      ]
    },
    {
      "name": "Item Class",
      "tags": [
        "Item Class"
      ]
    },
    {
      "name": "Item Tag",
      "tags": [
        "Item Tag"
      ]
    },
    {
      "name": "Job",
      "tags": [
        "Job",
        "Job Custom Fields",
        "Job Full Routing",
        "Job Part Line Item Full Routing",
        "Job Item To Make",
        "Job Item To Make Operation",
        "Job Message",
        "Job Operation"
      ]
    },
    {
      "name": "Job Tracking Timers",
      "tags": [
        "Job Tracking Timers"
      ]
    },
    {
      "name": "Location",
      "tags": [
        "Location"
      ]
    },
    {
      "name": "Material",
      "tags": [
        "Material",
        "Material Vendor"
      ]
    },
    {
      "name": "Material Code",
      "tags": [
        "Material Code"
      ]
    },
    {
      "name": "NCRs",
      "tags": [
        "NCRs"
      ]
    },
    {
      "name": "Nesting",
      "tags": [
        "Nesting"
      ]
    },
    {
      "name": "Note",
      "tags": [
        "Note"
      ]
    },
    {
      "name": "Operation",
      "tags": [
        "Operation"
      ]
    },
    {
      "name": "Payment Term",
      "tags": [
        "Payment Term"
      ]
    },
    {
      "name": "Purchase Order",
      "tags": [
        "Purchase Order",
        "Purchase Order Custom Fields",
        "Purchase Order Discount Line Item",
        "Purchase Order Fee Line Item",
        "Purchase Order Line Item",
        "Purchase Order Outside Processing Line Item",
        "Purchase Order Part Line Item",
        "Purchase Order Tax Line Item",
        "Purchase Order Vendor Credit Line Item"
      ]
    },
    {
      "name": "Quote",
      "tags": [
        "Quote",
        "Quote Custom Fields",
        "Quote Discount Line Item",
        "Quote Fee Line Item",
        "Quote Part Line Item",
        "Quote Part Line Item Custom Fields",
        "Quote Part Line Item Full Routing",
        "Quote Tax Line Item"
      ]
    },
    {
      "name": "Receiving",
      "tags": [
        "Receiving Receipt",
        "Receiving Receipt Line Item"
      ]
    },
    {
      "name": "Refund Reason Code",
      "tags": [
        "Refund Reason Code"
      ]
    },
    {
      "name": "Reporting",
      "tags": [
        "Reporting"
      ]
    },
    {
      "name": "Sales Order",
      "tags": [
        "Sales Order",
        "Sales Order Blanket Line Item",
        "Sales Order Custom Fields",
        "Sales Order Discount Line Item",
        "Sales Order Fee Line Item",
        "Sales Order Line Item",
        "Sales Order Part Line Item",
        "Sales Order Part Line Item Custom Fields",
        "Sales Order Part Line Item Full Routing",
        "Sales Order Refund Line Item",
        "Sales Order Shipping Charge Line Item",
        "Sales Order Tax Line Item"
      ]
    },
    {
      "name": "ScrapReport",
      "tags": [
        "ScrapReport"
      ]
    },
    {
      "name": "Settings",
      "tags": [
        "Settings"
      ]
    },
    {
      "name": "Shape Code",
      "tags": [
        "Shape Code"
      ]
    },
    {
      "name": "Shipment Line Items (V3)",
      "tags": [
        "Shipment Line Items (V3)"
      ]
    },
    {
      "name": "Shipment",
      "tags": [
        "Shipment Custom Fields"
      ]
    },
    {
      "name": "Shipments",
      "tags": [
        "Shipments"
      ]
    },
    {
      "name": "Shipping Method",
      "tags": [
        "Shipping Method"
      ]
    },
    {
      "name": "Tag",
      "tags": [
        "Tag"
      ]
    },
    {
      "name": "Task",
      "tags": [
        "Task"
      ]
    },
    {
      "name": "Tax Rate",
      "tags": [
        "Tax Rate"
      ]
    },
    {
      "name": "Time Clock Timers",
      "tags": [
        "Time Clock Timers"
      ]
    },
    {
      "name": "Timer",
      "tags": [
        "Timer"
      ]
    },
    {
      "name": "Tool",
      "tags": [
        "Tool"
      ]
    },
    {
      "name": "Tool Calibration",
      "tags": [
        "Tool Calibration"
      ]
    },
    {
      "name": "User",
      "tags": [
        "User",
        "User Status"
      ]
    },
    {
      "name": "Vendor",
      "tags": [
        "Vendor",
        "Vendor Address",
        "Vendor Contact"
      ]
    },
    {
      "name": "Work Order",
      "tags": [
        "Work Order"
      ]
    },
    {
      "name": "WorkCenter",
      "tags": [
        "WorkCenter"
      ]
    }
  ]
}