{
  "openapi": "3.1.0",
  "info": {
    "title": "Job Planning and Management",
    "description": "Appointments, budget codes, budget code segments, jobs, job cancel reasons, job canceled logs, job history, job hold reasons, job notes, job types, projects, project notes, project statuses, project sub-statuses, project types",
    "version": "1.0"
  },
  "servers": [
    {
      "url": "https://api.servicetitan.io/jpm/v2",
      "description": "Production"
    },
    {
      "url": "https://api-integration.servicetitan.io/jpm/v2",
      "description": "Integration"
    }
  ],
  "paths": {
    "/tenant/{tenant}/appointments/{id}": {
      "get": {
        "tags": [
          "Appointments"
        ],
        "summary": "Gets appointment specified by ID",
        "operationId": "Appointments_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The appointment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.AppointmentResponse"
                },
                "example": {
                  "id": 0,
                  "jobId": 0,
                  "appointmentNumber": "string",
                  "start": "string",
                  "end": "string",
                  "arrivalWindowStart": "string",
                  "arrivalWindowEnd": "string",
                  "status": {},
                  "specialInstructions": "string",
                  "createdOn": "string",
                  "modifiedOn": "string",
                  "customerId": 0,
                  "unused": true,
                  "createdById": 0,
                  "isConfirmed": true,
                  "active": true,
                  "appointmentSummaries": [
                    {
                      "createdOn": "string",
                      "jobAppointmentId": 0,
                      "jobId": 0,
                      "modifiedOn": "string",
                      "notes": "string",
                      "technicianId": 0
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Appointment was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:r"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Appointments"
        ],
        "summary": "Deletes appointment with specified id.",
        "operationId": "Appointments_Delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The appointment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Appointment was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "409": {
            "description": "Appointment is in the state that doesn't allow deletion",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/appointments": {
      "get": {
        "tags": [
          "Appointments"
        ],
        "summary": "Gets a list of appointments",
        "operationId": "Appointments_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Perform lookup by multiple IDs (maximum 50)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "What kind of items should be returned (only active items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "name": "jobId",
            "in": "query",
            "description": "Return all appointments for this job",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "projectId",
            "in": "query",
            "description": "Return all appointments for jobs that are part of this project",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "number",
            "in": "query",
            "description": "Return all appointments with this appointment number",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Return items with specified status AppointmentStatus\\\nValues: [Scheduled, Dispatched, Working, Hold, Done, Canceled]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Jpm.V2.Base.AppointmentStatus"
                }
              ]
            }
          },
          {
            "name": "startsOnOrAfter",
            "in": "query",
            "description": "Return appointments that start on or after the specified date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "startsBefore",
            "in": "query",
            "description": "Return appointments that start before the specified date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "technicianId",
            "in": "query",
            "description": "Return appointments this technician is assigned to",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "Return appointments for the specified Customer",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "unused",
            "in": "query",
            "description": "Return appointments that are unused",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Return appointments modified before a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Return appointments modified on or after a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Return appointments created on or after a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return appointments created before a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by the specified field:\\\n\"?sort=+FieldName\" for ascending order,\\\n\"?sort=-FieldName\" for descending order.\\\n\\\nAvailable fields are: Id, ModifiedOn, CreatedOn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.AppointmentResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "jobId": 0,
                      "appointmentNumber": "string",
                      "start": "string",
                      "end": "string",
                      "arrivalWindowStart": "string",
                      "arrivalWindowEnd": "string",
                      "status": {},
                      "specialInstructions": "string",
                      "createdOn": "string",
                      "modifiedOn": "string",
                      "customerId": 0,
                      "unused": true,
                      "createdById": 0,
                      "isConfirmed": true,
                      "active": true,
                      "appointmentSummaries": [
                        {
                          "createdOn": "string",
                          "jobAppointmentId": 0,
                          "jobId": 0,
                          "modifiedOn": "string",
                          "notes": "string",
                          "technicianId": 0
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Appointments"
        ],
        "summary": "Adds a new appointment to an existing job",
        "operationId": "Appointments_Add",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.AppointmentAddRequest"
              },
              "example": {
                "jobId": 0,
                "start": "string",
                "end": "string",
                "arrivalWindowStart": "string",
                "arrivalWindowEnd": "string",
                "technicianIds": [
                  0
                ],
                "specialInstructions": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.AppointmentResponse"
                },
                "example": {
                  "id": 0,
                  "jobId": 0,
                  "appointmentNumber": "string",
                  "start": "string",
                  "end": "string",
                  "arrivalWindowStart": "string",
                  "arrivalWindowEnd": "string",
                  "status": {},
                  "specialInstructions": "string",
                  "createdOn": "string",
                  "modifiedOn": "string",
                  "customerId": 0,
                  "unused": true,
                  "createdById": 0,
                  "isConfirmed": true,
                  "active": true,
                  "appointmentSummaries": [
                    {
                      "createdOn": "string",
                      "jobAppointmentId": 0,
                      "jobId": 0,
                      "modifiedOn": "string",
                      "notes": "string",
                      "technicianId": 0
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "409": {
            "description": "Some conflict occurred while executing the request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/appointments/{id}/reschedule": {
      "patch": {
        "tags": [
          "Appointments"
        ],
        "summary": "Reschedule job appointment",
        "operationId": "Appointments_Reschedule",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The appointment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The rescheduling request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.AppointmentRescheduleRequest"
              },
              "example": {
                "start": "string",
                "end": "string",
                "arrivalWindowStart": "string",
                "arrivalWindowEnd": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.AppointmentResponse"
                },
                "example": {
                  "id": 0,
                  "jobId": 0,
                  "appointmentNumber": "string",
                  "start": "string",
                  "end": "string",
                  "arrivalWindowStart": "string",
                  "arrivalWindowEnd": "string",
                  "status": {},
                  "specialInstructions": "string",
                  "createdOn": "string",
                  "modifiedOn": "string",
                  "customerId": 0,
                  "unused": true,
                  "createdById": 0,
                  "isConfirmed": true,
                  "active": true,
                  "appointmentSummaries": [
                    {
                      "createdOn": "string",
                      "jobAppointmentId": 0,
                      "jobId": 0,
                      "modifiedOn": "string",
                      "notes": "string",
                      "technicianId": 0
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Job appointment was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "409": {
            "description": "Some conflict occurred while executing the request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/appointments/{id}/hold": {
      "put": {
        "tags": [
          "Appointments"
        ],
        "summary": "Puts the appointment on hold",
        "operationId": "Appointments_Hold",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The appointment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The hold request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.HoldAppointmentRequest"
              },
              "example": {
                "reasonId": 0,
                "memo": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "409": {
            "description": "Some conflict occurred while executing the request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:w"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Appointments"
        ],
        "summary": "Removes hold from the appointment",
        "operationId": "Appointments_RemoveHold",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The appointment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Appointment was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "409": {
            "description": "Appointment is not on hold",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/appointments/{id}/special-instructions": {
      "put": {
        "tags": [
          "Appointments"
        ],
        "summary": "Updates special instructions for the specified appointment.",
        "operationId": "Appointments_UpdateSpecialInstructions",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The appointment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The update special instructions request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.UpdateAppointmentSpecialInstructionsRequest"
              },
              "example": {
                "specialInstructions": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.AppointmentResponse"
                },
                "example": {
                  "id": 0,
                  "jobId": 0,
                  "appointmentNumber": "string",
                  "start": "string",
                  "end": "string",
                  "arrivalWindowStart": "string",
                  "arrivalWindowEnd": "string",
                  "status": {},
                  "specialInstructions": "string",
                  "createdOn": "string",
                  "modifiedOn": "string",
                  "customerId": 0,
                  "unused": true,
                  "createdById": 0,
                  "isConfirmed": true,
                  "active": true,
                  "appointmentSummaries": [
                    {
                      "createdOn": "string",
                      "jobAppointmentId": 0,
                      "jobId": 0,
                      "modifiedOn": "string",
                      "notes": "string",
                      "technicianId": 0
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "409": {
            "description": "Some conflict occurred while executing the request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/appointments/{id}/confirmation": {
      "put": {
        "tags": [
          "Appointments"
        ],
        "summary": "Adds a confirmation to the specified appointment.",
        "operationId": "Appointments_Confirm",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The appointment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Appointment was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "409": {
            "description": "Appointment is already confirmed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:w"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Appointments"
        ],
        "summary": "Removes a confirmation to the specified appointment.",
        "operationId": "Appointments_RemoveConfirmation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The appointment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Appointment was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "409": {
            "description": "Appointment was not confirmed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/appointments/{id}/summaries": {
      "post": {
        "tags": [
          "Appointments"
        ],
        "summary": "Sets an appointment summary (work performed log) for the specified appointment and technician.\nPrivate preview: available for specific accounts only.",
        "operationId": "Appointments_SetSummary",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The appointment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The summary to set",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.SetAppointmentSummaryRequest"
              },
              "example": {
                "notes": "string",
                "technicianId": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.AppointmentSummaryApiModel"
                },
                "example": {
                  "createdOn": "string",
                  "jobAppointmentId": 0,
                  "jobId": 0,
                  "modifiedOn": "string",
                  "notes": "string",
                  "technicianId": 0
                }
              }
            }
          },
          "400": {
            "description": "Invalid request or feature not enabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Appointment was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/segments": {
      "get": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_ListCompanySegments",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.BudgetCodes.ListSegmentsResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "type": "None",
                      "structure": "None",
                      "isActive": true,
                      "isRequired": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.segments:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/projects/{projectId}/segments": {
      "get": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_ListProjectSegments",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.BudgetCodes.ListSegmentsResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "type": "None",
                      "structure": "None",
                      "isActive": true,
                      "isRequired": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.segments:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/segments/{segmentId}/items": {
      "get": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_ListCompanySegmentItems",
        "parameters": [
          {
            "name": "segmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeChildren",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.BudgetCodes.SegmentItemModel"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "parentId": 0,
                      "code": "string",
                      "description": "string",
                      "path": "string",
                      "costCategory": {},
                      "isActive": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.segments:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/projects/{projectId}/segments/{segmentId}/items": {
      "get": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_ListProjectSegmentItems",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "segmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeChildren",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.BudgetCodes.SegmentItemModel"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "parentId": 0,
                      "code": "string",
                      "description": "string",
                      "path": "string",
                      "costCategory": {},
                      "isActive": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.segments:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/segments/{segmentId}/items/{segmentItemId}/children": {
      "get": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_ListCompanySegmentItemChildren",
        "parameters": [
          {
            "name": "segmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "segmentItemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeChildren",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.BudgetCodes.SegmentItemModel"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "parentId": 0,
                      "code": "string",
                      "description": "string",
                      "path": "string",
                      "costCategory": {},
                      "isActive": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.segments:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/projects/{projectId}/segments/{segmentId}/items/{segmentItemId}/children": {
      "get": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_ListProjectSegmentItemChildren",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "segmentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "segmentItemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "includeChildren",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.BudgetCodes.SegmentItemModel"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "parentId": 0,
                      "code": "string",
                      "description": "string",
                      "path": "string",
                      "costCategory": {},
                      "isActive": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.segments:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/budget-codes": {
      "get": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_ListCompanyBudgetCodes",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "budgetCodeIds",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "segmentIds",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "segmentItemIds",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.BudgetCodes.BudgetCodeModel"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "code": "string",
                      "description": "string",
                      "segments": [
                        {
                          "segmentId": 0,
                          "segmentItemId": 0,
                          "code": "string",
                          "description": "string",
                          "path": "string"
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.budgetcodes:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_CreateBudgetCode",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.CreateFullBudgetCodeArgs"
              },
              "example": {
                "segmentItemIds": [
                  0
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.BudgetCodes.CreateBudgetCodeResponse"
                },
                "example": {
                  "code": {
                    "id": 0,
                    "code": "string",
                    "description": "string",
                    "segments": [
                      {
                        "segmentId": 0,
                        "segmentItemId": 0,
                        "code": "string",
                        "description": "string",
                        "path": "string"
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.budgetcodes:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/projects/{projectId}/budget-codes": {
      "get": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_ListProjectBudgetCodes",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "budgetCodeIds",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "segmentIds",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "segmentItemIds",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.BudgetCodes.BudgetCodeModel"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "code": "string",
                      "description": "string",
                      "segments": [
                        {
                          "segmentId": 0,
                          "segmentItemId": 0,
                          "code": "string",
                          "description": "string",
                          "path": "string"
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.budgetcodes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/budget-codes/match": {
      "get": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_MatchCompanyBudgetCodes",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "codes",
            "in": "query",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.BudgetCodes.MatchBudgetCodesResponse"
                },
                "example": {
                  "matches": [
                    {
                      "code": "string",
                      "isValid": true,
                      "budgetCodes": [
                        {
                          "id": 0,
                          "code": "string",
                          "description": "string",
                          "segments": [
                            {
                              "segmentId": 0,
                              "segmentItemId": 0,
                              "code": "string",
                              "description": "string",
                              "path": "string"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.budgetcodes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/projects/{projectId}/budget-codes/match": {
      "get": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_MatchProjectBudgetCodes",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "codes",
            "in": "query",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.BudgetCodes.MatchBudgetCodesResponse"
                },
                "example": {
                  "matches": [
                    {
                      "code": "string",
                      "isValid": true,
                      "budgetCodes": [
                        {
                          "id": 0,
                          "code": "string",
                          "description": "string",
                          "segments": [
                            {
                              "segmentId": 0,
                              "segmentItemId": 0,
                              "code": "string",
                              "description": "string",
                              "path": "string"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.budgetcodes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/budget-codes/partial": {
      "post": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_CreateBudgetCodePartial",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.CreatePartialBudgetCodeArgs"
              },
              "example": {
                "segments": [
                  {
                    "segmentId": 0,
                    "segmentItemId": 0
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.BudgetCodes.CreateBudgetCodeResponse"
                },
                "example": {
                  "code": {
                    "id": 0,
                    "code": "string",
                    "description": "string",
                    "segments": [
                      {
                        "segmentId": 0,
                        "segmentItemId": 0,
                        "code": "string",
                        "description": "string",
                        "path": "string"
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.budgetcodes:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/budget-codes/batch": {
      "post": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_CreateBudgetCodesBatch",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.BudgetCodes.CreateBudgetCodeBatchResponse"
                },
                "example": {
                  "codes": [
                    {
                      "id": 0,
                      "code": "string",
                      "description": "string",
                      "segments": [
                        {
                          "segmentId": 0,
                          "segmentItemId": 0,
                          "code": "string",
                          "description": "string",
                          "path": "string"
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.budgetcodes:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/work-breakdown-structure/budget-codes/partial/batch": {
      "post": {
        "tags": [
          "BudgetCodes"
        ],
        "operationId": "BudgetCodes_CreateBudgetCodesPartialBatch",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.BudgetCodes.CreateBudgetCodeBatchResponse"
                },
                "example": {
                  "codes": [
                    {
                      "id": 0,
                      "code": "string",
                      "description": "string",
                      "segments": [
                        {
                          "segmentId": 0,
                          "segmentItemId": 0,
                          "code": "string",
                          "description": "string",
                          "path": "string"
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.budgetcodes:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/projects/{projectId}/daily-logs/{id}": {
      "get": {
        "tags": [
          "DailyLogs"
        ],
        "summary": "Gets a daily log by ID",
        "operationId": "DailyLogs_Get",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The daily log ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.DailyLogResponse"
                },
                "example": {
                  "id": 0,
                  "projectId": 0,
                  "date": "string",
                  "health": {},
                  "status": {},
                  "inputs": {
                    "equipment": "string",
                    "issues": "string",
                    "materials": "string",
                    "notes": "string",
                    "safety": "string",
                    "weather": "string"
                  },
                  "summaries": {
                    "equipment": "string",
                    "issues": "string",
                    "materials": "string",
                    "notes": "string",
                    "safety": "string",
                    "weather": "string"
                  },
                  "overallSummary": "string",
                  "attachments": [
                    {
                      "id": 0,
                      "fileName": "string",
                      "kind": {},
                      "timestamp": "string"
                    }
                  ],
                  "modifiedOn": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/projects/{projectId}/daily-logs/{id}/attachments/{attachmentId}": {
      "get": {
        "tags": [
          "DailyLogs"
        ],
        "summary": "Gets the content of a daily log attachment",
        "operationId": "DailyLogs_GetAttachment",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The daily log ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "attachmentId",
            "in": "path",
            "description": "The attachment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:r"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "DailyLogs"
        ],
        "summary": "Removes an attachment from a daily log",
        "operationId": "DailyLogs_RemoveAttachment",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The daily log ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "attachmentId",
            "in": "path",
            "description": "The attachment ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Daily log or attachment not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/projects/{projectId}/daily-logs/{id}/attachments": {
      "post": {
        "tags": [
          "DailyLogs"
        ],
        "summary": "Attaches a file (photo, audio, video, or document) to a daily log",
        "operationId": "DailyLogs_Attach",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The daily log ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              },
              "example": {
                "file": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "201": {
            "description": "The entity has been created"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Daily log not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/projects/{projectId}/daily-logs": {
      "get": {
        "tags": [
          "DailyLogs"
        ],
        "summary": "Gets a list of daily logs for the specified project",
        "operationId": "DailyLogs_GetList",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "dateFrom",
            "in": "query",
            "description": "Only return daily logs on or after this date",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "dateTo",
            "in": "query",
            "description": "Only return daily logs on or before this date",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.DailyLogSummaryResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "projectId": 0,
                      "date": "string",
                      "health": {},
                      "status": {},
                      "modifiedOn": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/projects/{projectId}/daily-logs/{date}": {
      "patch": {
        "tags": [
          "DailyLogs"
        ],
        "summary": "Creates or updates a daily log for the specified project/date, applying whichever fields\nare present in the request body. Sections not included are left untouched.",
        "operationId": "DailyLogs_Patch",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "date",
            "in": "path",
            "description": "The daily log date, in yyyy-MM-dd format",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The patch request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.DailyLogPatchRequest"
              },
              "example": {
                "health": {},
                "inputs": {
                  "equipment": "string",
                  "issues": "string",
                  "materials": "string",
                  "notes": "string",
                  "safety": "string",
                  "weather": "string"
                },
                "summaries": {
                  "equipment": "string",
                  "issues": "string",
                  "materials": "string",
                  "notes": "string",
                  "safety": "string",
                  "weather": "string"
                },
                "overallSummary": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.DailyLogResponse"
                },
                "example": {
                  "id": 0,
                  "projectId": 0,
                  "date": "string",
                  "health": {},
                  "status": {},
                  "inputs": {
                    "equipment": "string",
                    "issues": "string",
                    "materials": "string",
                    "notes": "string",
                    "safety": "string",
                    "weather": "string"
                  },
                  "summaries": {
                    "equipment": "string",
                    "issues": "string",
                    "materials": "string",
                    "notes": "string",
                    "safety": "string",
                    "weather": "string"
                  },
                  "overallSummary": "string",
                  "attachments": [
                    {
                      "id": 0,
                      "fileName": "string",
                      "kind": {},
                      "timestamp": "string"
                    }
                  ],
                  "modifiedOn": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid date format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Project not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/jobs": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for jobs",
        "operationId": "Export_Jobs",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Continuation token received from previous export request in \"continueFrom\" field.\nWhen not specified, the export process starts from the beginning.\\\nUse custom date strings, e.g. \"2020-01-01\" to start the export process from the certain point in time.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeRecentChanges",
            "in": "query",
            "description": "Use \"true\" to start receiving the most recent changes quicker.\nNote this may cause the same results appearing multiple times on consecutive requests.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportResponse_Of_Jpm.V2.ExportJobsResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "summary": "string",
                      "customFields": [
                        {
                          "typeId": 0,
                          "name": "string",
                          "value": "string"
                        }
                      ],
                      "externalData": [
                        {
                          "key": "string",
                          "value": "string"
                        }
                      ],
                      "summaryOfWork": "string",
                      "id": 0,
                      "jobNumber": "string",
                      "projectId": 0,
                      "customerId": 0,
                      "locationId": 0,
                      "jobStatus": "string",
                      "completedOn": "string",
                      "businessUnitId": 0,
                      "jobTypeId": 0,
                      "priority": "string",
                      "campaignId": 0,
                      "appointmentCount": 0,
                      "firstAppointmentId": 0,
                      "lastAppointmentId": 0,
                      "recallForId": 0,
                      "warrantyId": 0,
                      "jobGeneratedLeadSource": {
                        "jobId": 0,
                        "employeeId": 0
                      },
                      "noCharge": true,
                      "notificationsEnabled": true,
                      "createdOn": "string",
                      "createdById": 0,
                      "modifiedOn": "string",
                      "tagTypeIds": [
                        0
                      ],
                      "leadCallId": 0,
                      "partnerLeadCallId": 0,
                      "bookingId": 0,
                      "soldById": 0,
                      "customerPo": "string",
                      "invoiceId": 0,
                      "membershipId": 0,
                      "total": 0,
                      "createdFromEstimateId": 0,
                      "estimateIds": [
                        0
                      ],
                      "equipmentIds": [
                        0
                      ],
                      "isAutoDispatched": true,
                      "active": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/projects": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for projects",
        "operationId": "Export_Projects",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Continuation token received from previous export request in \"continueFrom\" field.\nWhen not specified, the export process starts from the beginning.\\\nUse custom date strings, e.g. \"2020-01-01\" to start the export process from the certain point in time.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeRecentChanges",
            "in": "query",
            "description": "Use \"true\" to start receiving the most recent changes quicker.\nNote this may cause the same results appearing multiple times on consecutive requests.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportResponse_Of_Jpm.V2.ExportProjectsResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "id": 0,
                      "number": "string",
                      "name": "string",
                      "summary": "string",
                      "status": "string",
                      "statusId": 0,
                      "subStatus": "string",
                      "subStatusId": 0,
                      "customerId": 0,
                      "locationId": 0,
                      "projectTypeId": 0,
                      "projectManagerIds": [
                        0
                      ],
                      "businessUnitIds": [
                        0
                      ],
                      "startDate": "string",
                      "targetCompletionDate": "string",
                      "actualCompletionDate": "string",
                      "contractStartDate": "string",
                      "modifiedOn": "string",
                      "createdOn": "string",
                      "customFields": [
                        {
                          "typeId": 0,
                          "name": "string",
                          "value": "string"
                        }
                      ],
                      "externalData": [
                        {
                          "key": "string",
                          "value": "string"
                        }
                      ],
                      "jobIds": [
                        0
                      ],
                      "active": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/appointments": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for appointments",
        "operationId": "Export_Appointments",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "What kind of items should be returned (all items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Continuation token received from previous export request in \"continueFrom\" field.\nWhen not specified, the export process starts from the beginning.\\\nUse custom date strings, e.g. \"2020-01-01\" to start the export process from the certain point in time.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeRecentChanges",
            "in": "query",
            "description": "Use \"true\" to start receiving the most recent changes quicker.\nNote this may cause the same results appearing multiple times on consecutive requests.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportResponse_Of_Jpm.V2.ExportAppointmentsResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "appointmentSummaries": [
                        {
                          "createdOn": "string",
                          "jobAppointmentId": 0,
                          "jobId": 0,
                          "modifiedOn": "string",
                          "notes": "string",
                          "technicianId": 0
                        }
                      ],
                      "id": 0,
                      "jobId": 0,
                      "appointmentNumber": "string",
                      "start": "string",
                      "end": "string",
                      "arrivalWindowStart": "string",
                      "arrivalWindowEnd": "string",
                      "status": {},
                      "specialInstructions": "string",
                      "createdOn": "string",
                      "modifiedOn": "string",
                      "customerId": 0,
                      "unused": true,
                      "createdById": 0,
                      "isConfirmed": true,
                      "active": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.appointments:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/job-canceled-logs": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for job canceled logs",
        "operationId": "Export_JobCancelReasons",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Continuation token received from previous export request in \"continueFrom\" field.\nWhen not specified, the export process starts from the beginning.\\\nUse custom date strings, e.g. \"2020-01-01\" to start the export process from the certain point in time.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeRecentChanges",
            "in": "query",
            "description": "Use \"true\" to start receiving the most recent changes quicker.\nNote this may cause the same results appearing multiple times on consecutive requests.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportResponse_Of_Jpm.V2.ExportJobCanceledLogResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "id": 0,
                      "jobId": 0,
                      "reasonId": 0,
                      "memo": "string",
                      "createdOn": "string",
                      "createdById": 0,
                      "active": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobcanceledlogs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/job-notes": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for job notes",
        "operationId": "Export_JobNotes",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Continuation token received from previous export request in \"continueFrom\" field.\nWhen not specified, the export process starts from the beginning.\\\nUse custom date strings, e.g. \"2020-01-01\" to start the export process from the certain point in time.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeRecentChanges",
            "in": "query",
            "description": "Use \"true\" to start receiving the most recent changes quicker.\nNote this may cause the same results appearing multiple times on consecutive requests.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportResponse_Of_Jpm.V2.ExportJobNotesResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "id": 0,
                      "active": true,
                      "text": "string",
                      "isPinned": true,
                      "createdById": 0,
                      "createdOn": "string",
                      "modifiedOn": "string",
                      "jobId": 0
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobnotes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/project-notes": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for project notes",
        "operationId": "Export_ProjectNotes",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Continuation token received from previous export request in \"continueFrom\" field.\nWhen not specified, the export process starts from the beginning.\\\nUse custom date strings, e.g. \"2020-01-01\" to start the export process from the certain point in time.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeRecentChanges",
            "in": "query",
            "description": "Use \"true\" to start receiving the most recent changes quicker.\nNote this may cause the same results appearing multiple times on consecutive requests.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportResponse_Of_Jpm.V2.ExportProjectNotesResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "id": 0,
                      "active": true,
                      "text": "string",
                      "isPinned": true,
                      "createdById": 0,
                      "createdOn": "string",
                      "modifiedOn": "string",
                      "projectId": 0
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projectnotes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/job-history": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for job status history.",
        "operationId": "Export_JobHistory",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Continuation token received from previous export request in \"continueFrom\" field.\nWhen not specified, the export process starts from the beginning.\\\nUse custom date strings, e.g. \"2020-01-01\" to start the export process from the certain point in time.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeRecentChanges",
            "in": "query",
            "description": "Use \"true\" to start receiving the most recent changes quicker.\nNote this may cause the same results appearing multiple times on consecutive requests.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportResponse_Of_Jpm.V2.ExportJobHistoryResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "jobId": 0,
                      "history": [
                        {
                          "id": 0,
                          "employeeId": 0,
                          "eventType": "string",
                          "date": "string",
                          "usedSchedulingTool": {}
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobhistory:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/job-cancel-reasons": {
      "get": {
        "tags": [
          "JobCancelReasons"
        ],
        "summary": "Gets a list of job cancel reasons",
        "operationId": "JobCancelReasons_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "What kind of items should be returned (active and inactive items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return items created before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Return items created on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Return items modified before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Return items modified on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by the specified field:\\\n\"?sort=+FieldName\" for ascending order,\\\n\"?sort=-FieldName\" for descending order.\\\n\\\nAvailable fields are: Id, ModifiedOn, CreatedOn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.JobCancelReasonResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "active": true,
                      "createdOn": "string",
                      "modifiedOn": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobcancelreasons:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/{id}/equipment": {
      "get": {
        "tags": [
          "JobEquipment"
        ],
        "summary": "Gets the list of equipment IDs attached to the specified job",
        "operationId": "JobEquipment_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.JobEquipmentResponse"
                },
                "example": {
                  "equipmentIds": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "JobEquipment"
        ],
        "summary": "Attaches one or more equipment items to the specified job.\nReturns the updated list of all attached equipment IDs.",
        "operationId": "JobEquipment_Attach",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The attach request containing equipment IDs",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.AttachJobEquipmentRequest"
              },
              "example": {
                "equipmentIds": [
                  0
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.JobEquipmentResponse"
                },
                "example": {
                  "equipmentIds": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:w"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "JobEquipment"
        ],
        "summary": "Detaches one or more equipment items from the specified job.\nReturns 204 No Content on success.",
        "operationId": "JobEquipment_DetachBulk",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The detach request containing equipment IDs",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.DetachJobEquipmentRequest"
              },
              "example": {
                "equipmentIds": [
                  0
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "204": {
            "description": "The request has succeeded, no content to return"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/{id}/equipment/{equipmentId}": {
      "delete": {
        "tags": [
          "JobEquipment"
        ],
        "summary": "Detaches a single equipment item from the specified job.\nReturns 204 No Content on success; 404 if the equipment is not attached to the job.",
        "operationId": "JobEquipment_Detach",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "equipmentId",
            "in": "path",
            "description": "The equipment ID to detach",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "204": {
            "description": "The request has succeeded, no content to return"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/job-hold-reasons": {
      "get": {
        "tags": [
          "JobHoldReasons"
        ],
        "summary": "Gets a list of job hold reasons",
        "operationId": "JobHoldReasons_Get",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "What kind of items should be returned (active and inactive items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return items created before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Return items created on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Return items modified before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Return items modified on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by the specified field:\\\n\"?sort=+FieldName\" for ascending order,\\\n\"?sort=-FieldName\" for descending order.\\\n\\\nAvailable fields are: Id, ModifiedOn, CreatedOn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.JobHoldReasonResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "active": true,
                      "createdOn": "string",
                      "modifiedOn": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobholdreasons:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/{id}": {
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "Gets a job by ID",
        "operationId": "Jobs_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "externalDataApplicationGuid",
            "in": "query",
            "description": "If this guid is provided, external data corresponding to\nthis application guid will be returned.\n            ",
            "schema": {
              "type": "string",
              "format": "guid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.JobResponse"
                },
                "example": {
                  "id": 0,
                  "jobNumber": "string",
                  "projectId": 0,
                  "customerId": 0,
                  "locationId": 0,
                  "jobStatus": "string",
                  "completedOn": "string",
                  "businessUnitId": 0,
                  "jobTypeId": 0,
                  "priority": "string",
                  "campaignId": 0,
                  "appointmentCount": 0,
                  "firstAppointmentId": 0,
                  "lastAppointmentId": 0,
                  "recallForId": 0,
                  "warrantyId": 0,
                  "jobGeneratedLeadSource": {
                    "jobId": 0,
                    "employeeId": 0
                  },
                  "noCharge": true,
                  "notificationsEnabled": true,
                  "createdOn": "string",
                  "createdById": 0,
                  "modifiedOn": "string",
                  "tagTypeIds": [
                    0
                  ],
                  "leadCallId": 0,
                  "partnerLeadCallId": 0,
                  "bookingId": 0,
                  "soldById": 0,
                  "customerPo": "string",
                  "invoiceId": 0,
                  "membershipId": 0,
                  "total": 0,
                  "createdFromEstimateId": 0,
                  "estimateIds": [
                    0
                  ],
                  "equipmentIds": [
                    0
                  ],
                  "isAutoDispatched": true,
                  "summary": "string",
                  "customFields": [
                    {
                      "typeId": 0,
                      "name": "string",
                      "value": "string"
                    }
                  ],
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ],
                  "summaryOfWork": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:r"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Jobs"
        ],
        "summary": "Updates a job",
        "operationId": "Jobs_Update",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The update request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.UpdateJobRequest"
              },
              "example": {
                "customerId": 0,
                "locationId": 0,
                "businessUnitId": 0,
                "jobGeneratedLeadSource": {
                  "jobId": 0,
                  "employeeId": 0
                },
                "jobTypeId": 0,
                "priority": "string",
                "campaignId": 0,
                "summary": "string",
                "shouldUpdateInvoiceItems": true,
                "customFields": [
                  {
                    "typeId": 0,
                    "value": "string"
                  }
                ],
                "tagTypeIds": [
                  0
                ],
                "externalData": {
                  "patchMode": {},
                  "applicationGuid": "string",
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ]
                },
                "customerPo": "string",
                "soldById": 0,
                "isAutoDispatched": true,
                "summaryOfWork": "string",
                "noCharge": true,
                "recallForId": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.JobResponse"
                },
                "example": {
                  "id": 0,
                  "jobNumber": "string",
                  "projectId": 0,
                  "customerId": 0,
                  "locationId": 0,
                  "jobStatus": "string",
                  "completedOn": "string",
                  "businessUnitId": 0,
                  "jobTypeId": 0,
                  "priority": "string",
                  "campaignId": 0,
                  "appointmentCount": 0,
                  "firstAppointmentId": 0,
                  "lastAppointmentId": 0,
                  "recallForId": 0,
                  "warrantyId": 0,
                  "jobGeneratedLeadSource": {
                    "jobId": 0,
                    "employeeId": 0
                  },
                  "noCharge": true,
                  "notificationsEnabled": true,
                  "createdOn": "string",
                  "createdById": 0,
                  "modifiedOn": "string",
                  "tagTypeIds": [
                    0
                  ],
                  "leadCallId": 0,
                  "partnerLeadCallId": 0,
                  "bookingId": 0,
                  "soldById": 0,
                  "customerPo": "string",
                  "invoiceId": 0,
                  "membershipId": 0,
                  "total": 0,
                  "createdFromEstimateId": 0,
                  "estimateIds": [
                    0
                  ],
                  "equipmentIds": [
                    0
                  ],
                  "isAutoDispatched": true,
                  "summary": "string",
                  "customFields": [
                    {
                      "typeId": 0,
                      "name": "string",
                      "value": "string"
                    }
                  ],
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ],
                  "summaryOfWork": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs": {
      "post": {
        "tags": [
          "Jobs"
        ],
        "summary": "Creates a job",
        "operationId": "Jobs_Create",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The job creation request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.JobCreateRequest"
              },
              "example": {
                "customerId": 0,
                "locationId": 0,
                "projectId": 0,
                "businessUnitId": 0,
                "jobGeneratedLeadSource": {
                  "jobId": 0,
                  "employeeId": 0
                },
                "jobTypeId": 0,
                "priority": "string",
                "campaignId": 0,
                "appointments": [
                  {
                    "start": "string",
                    "end": "string",
                    "arrivalWindowStart": "string",
                    "arrivalWindowEnd": "string",
                    "technicianIds": [
                      0
                    ]
                  }
                ],
                "summary": "string",
                "customFields": [
                  {
                    "typeId": 0,
                    "value": "string"
                  }
                ],
                "tagTypeIds": [
                  0
                ],
                "externalData": {
                  "applicationGuid": "string",
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ]
                },
                "invoiceSignatureIsRequired": true,
                "customerPo": "string",
                "soldById": 0,
                "partnerLeadCallId": 0,
                "leadId": 0,
                "bookingId": 0,
                "serviceAgreementVisitId": 0,
                "noCharge": true,
                "recallForId": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.JobResponse"
                },
                "example": {
                  "id": 0,
                  "jobNumber": "string",
                  "projectId": 0,
                  "customerId": 0,
                  "locationId": 0,
                  "jobStatus": "string",
                  "completedOn": "string",
                  "businessUnitId": 0,
                  "jobTypeId": 0,
                  "priority": "string",
                  "campaignId": 0,
                  "appointmentCount": 0,
                  "firstAppointmentId": 0,
                  "lastAppointmentId": 0,
                  "recallForId": 0,
                  "warrantyId": 0,
                  "jobGeneratedLeadSource": {
                    "jobId": 0,
                    "employeeId": 0
                  },
                  "noCharge": true,
                  "notificationsEnabled": true,
                  "createdOn": "string",
                  "createdById": 0,
                  "modifiedOn": "string",
                  "tagTypeIds": [
                    0
                  ],
                  "leadCallId": 0,
                  "partnerLeadCallId": 0,
                  "bookingId": 0,
                  "soldById": 0,
                  "customerPo": "string",
                  "invoiceId": 0,
                  "membershipId": 0,
                  "total": 0,
                  "createdFromEstimateId": 0,
                  "estimateIds": [
                    0
                  ],
                  "equipmentIds": [
                    0
                  ],
                  "isAutoDispatched": true,
                  "summary": "string",
                  "customFields": [
                    {
                      "typeId": 0,
                      "name": "string",
                      "value": "string"
                    }
                  ],
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ],
                  "summaryOfWork": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:w"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "Gets a list of jobs",
        "operationId": "Jobs_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Perform lookup by multiple IDs (maximum 50)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "number",
            "in": "query",
            "description": "Filters by job number",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectId",
            "in": "query",
            "description": "Filters by project ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "bookingId",
            "in": "query",
            "description": "Filters by booking ID that resulted in this job",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "jobStatus",
            "in": "query",
            "description": "Filters by job status\n            \\\nValues: [Scheduled, Dispatched, InProgress, Hold, Completed, Canceled]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Jpm.V2.JobStatus"
                }
              ]
            }
          },
          {
            "name": "appointmentStatus",
            "in": "query",
            "description": "Filters by appointment status. Return a job if it has any appointment with the specified status.\n            \\\nValues: [Scheduled, Dispatched, Working, Hold, Done, Canceled]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Jpm.V2.JobAppointmentStatus"
                }
              ]
            }
          },
          {
            "name": "priority",
            "in": "query",
            "description": "Filters by priority. Supported priorities are \"Low\", \"Normal\", \"High\", \"Urgent\"\n            ",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "firstAppointmentStartsOnOrAfter",
            "in": "query",
            "description": "Return jobs whose first appointment starts on or after date/time (in UTC). Use with\n\"firstAppointmentStartsBefore\" to find jobs whose first appointment is within the specified date range.\n            ",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "firstAppointmentStartsBefore",
            "in": "query",
            "description": "Return jobs whose first appointment starts before date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "appointmentStartsOnOrAfter",
            "in": "query",
            "description": "Return jobs if any appointment starts after date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "appointmentStartsBefore",
            "in": "query",
            "description": "Return jobs if any appointment starts after date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "technicianId",
            "in": "query",
            "description": "Return jobs if technician is assigned to any appointment",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "Filters by job's customer ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "locationId",
            "in": "query",
            "description": "Filters by job's location ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "soldById",
            "in": "query",
            "description": "Filters by the technician who sold the job",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "jobTypeId",
            "in": "query",
            "description": "Filters by job type ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "campaignId",
            "in": "query",
            "description": "Filters by job's campaign ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "businessUnitId",
            "in": "query",
            "description": "Filters by job's business unit ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "invoiceId",
            "in": "query",
            "description": "Filters by job's invoice ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "createdFromEstimateId",
            "in": "query",
            "description": "Filters by the sold estimate ID from which the job was created",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "estimateIds",
            "in": "query",
            "description": "Filters by estimate IDs that are related to the job",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return items created before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Return items created on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Return items modified before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Return items modified on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "completedOnOrAfter",
            "in": "query",
            "description": "Return jobs that are completed after a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "completedBefore",
            "in": "query",
            "description": "Return jobs that are completed before a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "tagTypeIds",
            "in": "query",
            "description": "Return jobs that have at least one of provided Tag Type assigned",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "equipmentIds",
            "in": "query",
            "description": "Return jobs that have at least one of provided equipment items attached",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by the specified field:\\\n\"?sort=+FieldName\" for ascending order,\\\n\"?sort=-FieldName\" for descending order.\\\n\\\nAvailable fields are: Id, ModifiedOn, CreatedOn, Priority.\n            ",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "externalDataApplicationGuid",
            "in": "query",
            "description": "If this guid is provided, external data corresponding to\nthis application guid will be returned.\n            ",
            "schema": {
              "type": "string",
              "format": "guid"
            }
          },
          {
            "name": "externalDataKey",
            "in": "query",
            "description": "Performs lookup by external data key, 'externalDataValues' must also be provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "externalDataValues",
            "in": "query",
            "description": "Performs lookup by external data values (maximum 50), 'externalDataKey' must also be provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "hasUnusedAppointments",
            "in": "query",
            "description": "If set to true, return jobs that have unused appointments.\n            ",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.JobResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "jobNumber": "string",
                      "projectId": 0,
                      "customerId": 0,
                      "locationId": 0,
                      "jobStatus": "string",
                      "completedOn": "string",
                      "businessUnitId": 0,
                      "jobTypeId": 0,
                      "priority": "string",
                      "campaignId": 0,
                      "appointmentCount": 0,
                      "firstAppointmentId": 0,
                      "lastAppointmentId": 0,
                      "recallForId": 0,
                      "warrantyId": 0,
                      "jobGeneratedLeadSource": {
                        "jobId": 0,
                        "employeeId": 0
                      },
                      "noCharge": true,
                      "notificationsEnabled": true,
                      "createdOn": "string",
                      "createdById": 0,
                      "modifiedOn": "string",
                      "tagTypeIds": [
                        0
                      ],
                      "leadCallId": 0,
                      "partnerLeadCallId": 0,
                      "bookingId": 0,
                      "soldById": 0,
                      "customerPo": "string",
                      "invoiceId": 0,
                      "membershipId": 0,
                      "total": 0,
                      "createdFromEstimateId": 0,
                      "estimateIds": [
                        0
                      ],
                      "equipmentIds": [
                        0
                      ],
                      "isAutoDispatched": true,
                      "summary": "string",
                      "customFields": [
                        {
                          "typeId": 0,
                          "name": "string",
                          "value": "string"
                        }
                      ],
                      "externalData": [
                        {
                          "key": "string",
                          "value": "string"
                        }
                      ],
                      "summaryOfWork": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/{id}/cancel": {
      "put": {
        "tags": [
          "Jobs"
        ],
        "summary": "Cancels a job",
        "operationId": "Jobs_Cancel",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The cancel request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.CancelJobRequest"
              },
              "example": {
                "reasonId": 0,
                "memo": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/{id}/remove-cancellation": {
      "put": {
        "tags": [
          "Jobs"
        ],
        "summary": "Removes cancellation from a job",
        "operationId": "Jobs_RemoveCancellation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/{id}/notes": {
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "Gets a list of notes on the specified job",
        "operationId": "Jobs_GetNotes",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.NoteResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "text": "string",
                      "isPinned": true,
                      "createdById": 0,
                      "createdOn": "string",
                      "modifiedOn": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Jobs"
        ],
        "summary": "Creates a note on the specified job",
        "operationId": "Jobs_CreateNote",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The note creation request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.JobNoteCreateRequest"
              },
              "example": {
                "text": "string",
                "pinToTop": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.NoteResponse"
                },
                "example": {
                  "text": "string",
                  "isPinned": true,
                  "createdById": 0,
                  "createdOn": "string",
                  "modifiedOn": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/hold-reasons": {
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "Gets a list of hold reasons for specific jobs",
        "operationId": "Jobs_GetHoldReasons",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Perform lookup by multiple IDs (maximum 50)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.HoldReasonResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "jobId": 0,
                      "reasonId": 0,
                      "name": "string",
                      "text": "string",
                      "appointmentHoldReasons": [
                        {
                          "appointmentId": 0,
                          "reasonId": 0,
                          "name": "string",
                          "text": "string"
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/cancel-reasons": {
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "Gets a list of cancel reasons for specific jobs",
        "operationId": "Jobs_GetCancelReasons",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Perform lookup by multiple IDs (maximum 50)",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.CancelReasonResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "jobId": 0,
                      "reasonId": 0,
                      "name": "string",
                      "text": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/{id}/history": {
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "Gets a list of history entries for the specified job",
        "operationId": "Jobs_GetHistory",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.JobHistoryResponse"
                },
                "example": {
                  "history": [
                    {
                      "id": 0,
                      "employeeId": 0,
                      "eventType": "string",
                      "date": "string",
                      "usedSchedulingTool": {},
                      "memo": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/{id}/canceled-log": {
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "Get a list of cancelled logs for the specified job",
        "operationId": "Jobs_GetJobCanceledLogs",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.JobCanceledLogResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "jobId": 0,
                      "reasonId": 0,
                      "memo": "string",
                      "createdOn": "string",
                      "createdById": 0,
                      "active": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/{id}/booked-log": {
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "Get booked log for the specified job",
        "operationId": "Jobs_GetBookedLog",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.JobBookedLogResponse"
                },
                "example": {
                  "id": 0,
                  "jobId": 0,
                  "jobAppointmentId": 0,
                  "start": "string",
                  "arrivalWindowStart": "string",
                  "arrivalWindowEnd": "string",
                  "createdOn": "string",
                  "createdById": 0,
                  "active": true
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/custom-fields": {
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "Returns a list of custom field types available for projects",
        "operationId": "Jobs_GetCustomFieldTypes",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return items created before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Return items created on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Return items modified before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Return items modified on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by the specified field: Id, Name.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.CustomFieldTypeResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "dataType": {},
                      "dataTypeOptions": [
                        "string"
                      ],
                      "createdOn": "string",
                      "modifiedOn": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/job-types": {
      "get": {
        "tags": [
          "JobTypes"
        ],
        "summary": "Gets a list of job types",
        "operationId": "JobTypes_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "name",
            "in": "query",
            "description": "Filters by job type name",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "minDuration",
            "in": "query",
            "description": "Minimum length of time for this job type (in seconds)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "maxDuration",
            "in": "query",
            "description": "Maximum length of time for this job type (in seconds)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "priority",
            "in": "query",
            "description": "Level of urgency for this type of job",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Perform lookup by multiple IDs (maximum 50)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "What kind of items should be returned (only active items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Orders results by a field. Supported fields are \"id\", \"modifiedOn\", and \"createdOn\"",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "orderByDirection",
            "in": "query",
            "description": "Specifies order direction of results. Supported values are \"asc\"/\"ascending\" and \"desc\"/\"descending\"",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return items created before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Return items created on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Return items modified before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Return items modified on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "externalDataApplicationGuid",
            "in": "query",
            "description": "If this guid is provided, external data corresponding to\nthis application guid will be returned.",
            "schema": {
              "type": "string",
              "format": "guid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.JobTypeResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "businessUnitIds": [
                        0
                      ],
                      "skills": [
                        "string"
                      ],
                      "tagTypeIds": [
                        0
                      ],
                      "priority": "string",
                      "duration": 0,
                      "soldThreshold": 0,
                      "class": "string",
                      "summary": "string",
                      "noCharge": true,
                      "enforceRecurringServiceEventSelection": true,
                      "invoiceSignaturesRequired": true,
                      "modifiedOn": "string",
                      "createdOn": "string",
                      "externalData": [
                        {
                          "key": "string",
                          "value": "string"
                        }
                      ],
                      "active": true,
                      "isSmartDispatched": true,
                      "defaultEstimateSoldAction": "string",
                      "customFieldTypeIds": [
                        0
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobtypes:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "JobTypes"
        ],
        "summary": "Creates a job type",
        "operationId": "JobTypes_Create",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The job type creation request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.CreateJobTypeRequest"
              },
              "example": {
                "name": "string",
                "businessUnitIds": [
                  0
                ],
                "skills": [
                  "string"
                ],
                "tagTypeIds": [
                  0
                ],
                "priority": "string",
                "duration": 0,
                "soldThreshold": 0,
                "class": "string",
                "summary": "string",
                "noCharge": true,
                "enforceRecurringServiceEventSelection": true,
                "invoiceSignaturesRequired": true,
                "externalData": {
                  "applicationGuid": "string",
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ]
                },
                "defaultEstimateSoldAction": "string",
                "customFieldTypeIds": [
                  0
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.JobTypeResponse"
                },
                "example": {
                  "id": 0,
                  "name": "string",
                  "businessUnitIds": [
                    0
                  ],
                  "skills": [
                    "string"
                  ],
                  "tagTypeIds": [
                    0
                  ],
                  "priority": "string",
                  "duration": 0,
                  "soldThreshold": 0,
                  "class": "string",
                  "summary": "string",
                  "noCharge": true,
                  "enforceRecurringServiceEventSelection": true,
                  "invoiceSignaturesRequired": true,
                  "modifiedOn": "string",
                  "createdOn": "string",
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ],
                  "active": true,
                  "isSmartDispatched": true,
                  "defaultEstimateSoldAction": "string",
                  "customFieldTypeIds": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobtypes:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/job-types/{id}": {
      "get": {
        "tags": [
          "JobTypes"
        ],
        "summary": "Gets a job type by ID",
        "operationId": "JobTypes_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job type ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "externalDataApplicationGuid",
            "in": "query",
            "description": "If this guid is provided, external data corresponding to\nthis application guid will be returned.",
            "schema": {
              "type": "string",
              "format": "guid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.JobTypeResponse"
                },
                "example": {
                  "id": 0,
                  "name": "string",
                  "businessUnitIds": [
                    0
                  ],
                  "skills": [
                    "string"
                  ],
                  "tagTypeIds": [
                    0
                  ],
                  "priority": "string",
                  "duration": 0,
                  "soldThreshold": 0,
                  "class": "string",
                  "summary": "string",
                  "noCharge": true,
                  "enforceRecurringServiceEventSelection": true,
                  "invoiceSignaturesRequired": true,
                  "modifiedOn": "string",
                  "createdOn": "string",
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ],
                  "active": true,
                  "isSmartDispatched": true,
                  "defaultEstimateSoldAction": "string",
                  "customFieldTypeIds": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobtypes:r"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "JobTypes"
        ],
        "summary": "Update a job type",
        "operationId": "JobTypes_Update",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The job type ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The update request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.UpdateJobTypeRequest"
              },
              "example": {
                "name": "string",
                "businessUnitIds": [
                  0
                ],
                "skills": [
                  "string"
                ],
                "tagTypeIds": [
                  0
                ],
                "priority": "string",
                "duration": 0,
                "soldThreshold": 0,
                "class": "string",
                "summary": "string",
                "noCharge": true,
                "enforceRecurringServiceEventSelection": true,
                "invoiceSignaturesRequired": true,
                "externalData": {
                  "patchMode": {},
                  "applicationGuid": "string",
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ]
                },
                "defaultEstimateSoldAction": "string",
                "customFieldTypeIds": [
                  0
                ],
                "customFieldsUpdateMode": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.JobTypeResponse"
                },
                "example": {
                  "id": 0,
                  "name": "string",
                  "businessUnitIds": [
                    0
                  ],
                  "skills": [
                    "string"
                  ],
                  "tagTypeIds": [
                    0
                  ],
                  "priority": "string",
                  "duration": 0,
                  "soldThreshold": 0,
                  "class": "string",
                  "summary": "string",
                  "noCharge": true,
                  "enforceRecurringServiceEventSelection": true,
                  "invoiceSignaturesRequired": true,
                  "modifiedOn": "string",
                  "createdOn": "string",
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ],
                  "active": true,
                  "isSmartDispatched": true,
                  "defaultEstimateSoldAction": "string",
                  "customFieldTypeIds": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.jobtypes:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/projects/{id}": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "Gets a project by ID",
        "operationId": "Projects_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "externalDataApplicationGuid",
            "in": "query",
            "description": "If this guid is provided, external data corresponding to\nthis application guid will be returned.",
            "schema": {
              "type": "string",
              "format": "guid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.ProjectResponse"
                },
                "example": {
                  "id": 0,
                  "number": "string",
                  "name": "string",
                  "summary": "string",
                  "status": "string",
                  "statusId": 0,
                  "subStatus": "string",
                  "subStatusId": 0,
                  "customerId": 0,
                  "locationId": 0,
                  "projectTypeId": 0,
                  "projectManagerIds": [
                    0
                  ],
                  "businessUnitIds": [
                    0
                  ],
                  "startDate": "string",
                  "targetCompletionDate": "string",
                  "actualCompletionDate": "string",
                  "contractStartDate": "string",
                  "modifiedOn": "string",
                  "createdOn": "string",
                  "customFields": [
                    {
                      "typeId": 0,
                      "name": "string",
                      "value": "string"
                    }
                  ],
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ],
                  "jobIds": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:r"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Projects"
        ],
        "summary": "Update a project",
        "operationId": "Projects_Update",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The update request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.UpdateProjectRequest"
              },
              "example": {
                "projectManagerIds": [
                  0
                ],
                "jobIds": [
                  0
                ],
                "businessUnitIds": [
                  0
                ],
                "name": "string",
                "summary": "string",
                "statusId": 0,
                "subStatusId": 0,
                "projectTypeId": 0,
                "startDate": "string",
                "targetCompletionDate": "string",
                "actualCompletionDate": "string",
                "customFields": [
                  {
                    "typeId": 0,
                    "value": "string"
                  }
                ],
                "externalData": {
                  "patchMode": {},
                  "applicationGuid": "string",
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ]
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.ProjectResponse"
                },
                "example": {
                  "id": 0,
                  "number": "string",
                  "name": "string",
                  "summary": "string",
                  "status": "string",
                  "statusId": 0,
                  "subStatus": "string",
                  "subStatusId": 0,
                  "customerId": 0,
                  "locationId": 0,
                  "projectTypeId": 0,
                  "projectManagerIds": [
                    0
                  ],
                  "businessUnitIds": [
                    0
                  ],
                  "startDate": "string",
                  "targetCompletionDate": "string",
                  "actualCompletionDate": "string",
                  "contractStartDate": "string",
                  "modifiedOn": "string",
                  "createdOn": "string",
                  "customFields": [
                    {
                      "typeId": 0,
                      "name": "string",
                      "value": "string"
                    }
                  ],
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ],
                  "jobIds": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Customer not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/projects": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "Gets a list of projects",
        "operationId": "Projects_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Perform lookup by multiple IDs (maximum 50)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "number",
            "in": "query",
            "description": "Filters by project number",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "customerId",
            "in": "query",
            "description": "Filters by customer ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "locationId",
            "in": "query",
            "description": "Filters by location ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "projectTypeId",
            "in": "query",
            "description": "Return projects if it contains the specified project type",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "invoiceId",
            "in": "query",
            "description": "Return projects if it contains the specified invoice",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "technicianId",
            "in": "query",
            "description": "Return project if technician is assigned to any appointments on any job in the project",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "jobId",
            "in": "query",
            "description": "Return project if it contains the specified job",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "appointmentId",
            "in": "query",
            "description": "Return project if it contains the specified appointment in the project's jobs",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "projectManagerIds",
            "in": "query",
            "description": "Filters by id of managers for matching project",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "businessUnitIds",
            "in": "query",
            "description": "Returns projects which have at least one of the provided business units assigned ",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return items created before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Return items created on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "startsBefore",
            "in": "query",
            "description": "Return projects that start before date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "startsOnOrAfter",
            "in": "query",
            "description": "Return projects that start on or after date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "completedBefore",
            "in": "query",
            "description": "Return projects that are completed before date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "completedOnOrAfter",
            "in": "query",
            "description": "Return projects that are completed on or after date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "targetCompletionDateBefore",
            "in": "query",
            "description": "Return projects whose target completion date is before date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "targetCompletionDateOnOrAfter",
            "in": "query",
            "description": "Return projects whose target completion date is on or after date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "contractStartDateBefore",
            "in": "query",
            "description": "Return projects whose contract start date is before date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "contractStartDateOnOrAfter",
            "in": "query",
            "description": "Return projects whose contract start date is on or after date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Return projects whose last modification date is before date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Return projects whose last modification date is on or after date",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Returns projects which have one of the provided statuses.\n\"None\" could be passed as one of the values to include projects without a status in the resulting collection.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by the specified field:\\\n\"?sort=+FieldName\" for ascending order,\\\n\"?sort=-FieldName\" for descending order.\\\n\\\nAvailable fields are: Id, ModifiedOn, CreatedOn, Name, TargetCompletionDate.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "externalDataApplicationGuid",
            "in": "query",
            "description": "If this guid is provided, external data corresponding to\nthis application guid will be returned.",
            "schema": {
              "type": "string",
              "format": "guid"
            }
          },
          {
            "name": "externalDataKey",
            "in": "query",
            "description": "Performs lookup by external data key, 'externalDataValues' must also be provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "externalDataValues",
            "in": "query",
            "description": "Performs lookup by external data values (maximum 50), 'externalDataKey' must also be provided.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.ProjectResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "number": "string",
                      "name": "string",
                      "summary": "string",
                      "status": "string",
                      "statusId": 0,
                      "subStatus": "string",
                      "subStatusId": 0,
                      "customerId": 0,
                      "locationId": 0,
                      "projectTypeId": 0,
                      "projectManagerIds": [
                        0
                      ],
                      "businessUnitIds": [
                        0
                      ],
                      "startDate": "string",
                      "targetCompletionDate": "string",
                      "actualCompletionDate": "string",
                      "contractStartDate": "string",
                      "modifiedOn": "string",
                      "createdOn": "string",
                      "customFields": [
                        {
                          "typeId": 0,
                          "name": "string",
                          "value": "string"
                        }
                      ],
                      "externalData": [
                        {
                          "key": "string",
                          "value": "string"
                        }
                      ],
                      "jobIds": [
                        0
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Projects"
        ],
        "summary": "Creates a New Project",
        "operationId": "Projects_Create",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The project creation request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.CreateProjectRequest"
              },
              "example": {
                "locationId": 0,
                "customerId": 0,
                "projectTypeId": 0,
                "projectManagerIds": [
                  0
                ],
                "name": "string",
                "summary": "string",
                "statusId": 0,
                "subStatusId": 0,
                "startDate": "string",
                "targetCompletionDate": "string",
                "actualCompletionDate": "string",
                "customFields": [
                  {
                    "typeId": 0,
                    "value": "string"
                  }
                ],
                "externalData": {
                  "applicationGuid": "string",
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ]
                },
                "businessUnitIds": [
                  0
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.ProjectResponse"
                },
                "example": {
                  "id": 0,
                  "number": "string",
                  "name": "string",
                  "summary": "string",
                  "status": "string",
                  "statusId": 0,
                  "subStatus": "string",
                  "subStatusId": 0,
                  "customerId": 0,
                  "locationId": 0,
                  "projectTypeId": 0,
                  "projectManagerIds": [
                    0
                  ],
                  "businessUnitIds": [
                    0
                  ],
                  "startDate": "string",
                  "targetCompletionDate": "string",
                  "actualCompletionDate": "string",
                  "contractStartDate": "string",
                  "modifiedOn": "string",
                  "createdOn": "string",
                  "customFields": [
                    {
                      "typeId": 0,
                      "name": "string",
                      "value": "string"
                    }
                  ],
                  "externalData": [
                    {
                      "key": "string",
                      "value": "string"
                    }
                  ],
                  "jobIds": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/projects/{id}/notes": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "Gets a list of notes on the specified project",
        "operationId": "Projects_GetNotes",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.NoteResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "text": "string",
                      "isPinned": true,
                      "createdById": 0,
                      "createdOn": "string",
                      "modifiedOn": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Projects"
        ],
        "summary": "Creates a note on the specified project",
        "operationId": "Projects_CreateNote",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The note creation request details",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Jpm.V2.ProjectNoteCreateRequest"
              },
              "example": {
                "text": "string",
                "pinToTop": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.NoteResponse"
                },
                "example": {
                  "text": "string",
                  "isPinned": true,
                  "createdById": 0,
                  "createdOn": "string",
                  "modifiedOn": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/projects/{id}/attach-job/{jobId}": {
      "post": {
        "tags": [
          "Projects"
        ],
        "summary": "Attaches Job to the specified project",
        "operationId": "Projects_AttachJob",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The project ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID to attach",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/projects/detach-job/{jobId}": {
      "post": {
        "tags": [
          "Projects"
        ],
        "summary": "Detaches Job from the project",
        "operationId": "Projects_DetachJob",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "The job ID to detach",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/projects/custom-fields": {
      "get": {
        "tags": [
          "Projects"
        ],
        "summary": "Returns a list of custom field types available for projects",
        "operationId": "Projects_GetCustomFieldTypes",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return items created before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Return items created on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Return items modified before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Return items modified on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by the specified field: Id, Name.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.CustomFieldTypeResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "dataType": {},
                      "dataTypeOptions": [
                        "string"
                      ],
                      "createdOn": "string",
                      "modifiedOn": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projects:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/project-statuses": {
      "get": {
        "tags": [
          "ProjectStatuses"
        ],
        "summary": "Gets a list of project statuses",
        "operationId": "ProjectStatuses_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "name",
            "in": "query",
            "description": "Filters by project status name",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Perform lookup by multiple IDs (maximum 50)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by the specified field:\\\n\"?sort=+FieldName\" for ascending order,\\\n\"?sort=-FieldName\" for descending order.\\\n\\\nAvailable fields are: Id, Name, Order, ModifiedOn, CreatedOn.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return items created before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Return items created on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Return items modified before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Return items modified on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.ProjectStatusResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "order": 0,
                      "modifiedOn": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projectstatuses:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/project-statuses/{id}": {
      "get": {
        "tags": [
          "ProjectStatuses"
        ],
        "summary": "Gets a project status by ID",
        "operationId": "ProjectStatuses_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The project status ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.ProjectStatusResponse"
                },
                "example": {
                  "id": 0,
                  "name": "string",
                  "order": 0,
                  "modifiedOn": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projectstatuses:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/project-substatuses": {
      "get": {
        "tags": [
          "ProjectSubStatuses"
        ],
        "summary": "Gets a list of project sub statuses",
        "operationId": "ProjectSubStatuses_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "name",
            "in": "query",
            "description": "Filters by project sub status name",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "statusId",
            "in": "query",
            "description": "Filters by parent project status id",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Perform lookup by multiple IDs (maximum 50)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by the specified field:\\\n\"?sort=+FieldName\" for ascending order,\\\n\"?sort=-FieldName\" for descending order.\\\n\\\nAvailable fields are: Id, Name, Order, StatusId, ModifiedOn, CreatedOn.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return items created before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Return items created on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Return items modified before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Return items modified on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "What kind of items should be returned (active items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.ProjectSubStatusResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "statusId": 0,
                      "order": 0,
                      "modifiedOn": "string",
                      "active": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projectsubstatuses:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/project-substatuses/{id}": {
      "get": {
        "tags": [
          "ProjectSubStatuses"
        ],
        "summary": "Gets a project sub status by ID",
        "operationId": "ProjectSubStatuses_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The project sub status ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.ProjectSubStatusResponse"
                },
                "example": {
                  "id": 0,
                  "name": "string",
                  "statusId": 0,
                  "order": 0,
                  "modifiedOn": "string",
                  "active": true
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projectsubstatuses:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/project-types/{id}": {
      "get": {
        "tags": [
          "ProjectTypes"
        ],
        "summary": "Gets a project type by ID",
        "operationId": "ProjectTypes_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The project type ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Jpm.V2.ProjectTypeResponse"
                },
                "example": {
                  "id": 0,
                  "name": "string",
                  "description": "string",
                  "createdById": 0
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projecttypes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/project-types": {
      "get": {
        "tags": [
          "ProjectTypes"
        ],
        "summary": "Gets a list of project types",
        "operationId": "ProjectTypes_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Jpm.V2.ProjectTypeResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "description": "string",
                      "createdById": 0
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.jpm.projecttypes:r"
            ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "Jpm.V2.AppointmentResponse": {
        "required": [
          "id",
          "jobId",
          "start",
          "end",
          "status",
          "createdOn",
          "modifiedOn",
          "customerId",
          "unused",
          "createdById",
          "isConfirmed",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Appointment ID",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "ID of the job that the appointment was created for",
            "format": "int64"
          },
          "appointmentNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "Appointment number"
          },
          "start": {
            "type": "string",
            "description": "Appointment's start date/time (in UTC)",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "description": "Appointment's end date/time (in UTC)",
            "format": "date-time"
          },
          "arrivalWindowStart": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arrival window start date/time (in UTC), if configured",
            "format": "date-time"
          },
          "arrivalWindowEnd": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arrival window end date/time (in UTC), if configured",
            "format": "date-time"
          },
          "status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.Base.AppointmentStatus"
              }
            ],
            "description": "Appointment's status"
          },
          "specialInstructions": {
            "type": [
              "string",
              "null"
            ],
            "description": "Special instructions associated to the appointment",
            "format": "multiline"
          },
          "createdOn": {
            "type": "string",
            "description": "When the appointment was created (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "When the appointment was modified (in UTC)",
            "format": "date-time"
          },
          "customerId": {
            "type": "integer",
            "description": "Id of a customer that the appointment was created for",
            "format": "int64"
          },
          "unused": {
            "type": "boolean",
            "description": "Returns true if the appointment is unused"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of the user that created the appointment",
            "format": "int64"
          },
          "isConfirmed": {
            "type": "boolean",
            "description": "Returns true if the appointment is confirmed"
          },
          "active": {
            "type": "boolean",
            "description": "Whether this appointment is active"
          },
          "appointmentSummaries": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.AppointmentSummaryApiModel"
            },
            "description": "Work performed summaries for this appointment. Private preview: available for specific accounts only."
          }
        },
        "additionalProperties": false,
        "description": "Appointment response model"
      },
      "Jpm.V2.Base.AppointmentStatus": {
        "enum": [
          "Scheduled",
          "Dispatched",
          "Working",
          "Hold",
          "Done",
          "Canceled"
        ],
        "type": "string",
        "description": "Indicates the status of a Job Appointment.",
        "x-enumNames": [
          "Scheduled",
          "Dispatched",
          "Working",
          "Hold",
          "Done",
          "Canceled"
        ]
      },
      "Jpm.V2.AppointmentSummaryApiModel": {
        "required": [
          "createdOn",
          "jobAppointmentId",
          "jobId",
          "modifiedOn",
          "notes",
          "technicianId"
        ],
        "type": "object",
        "properties": {
          "createdOn": {
            "type": "string",
            "description": "When the summary was created (in UTC)",
            "format": "date-time"
          },
          "jobAppointmentId": {
            "type": "integer",
            "description": "ID of the appointment",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "ID of the job",
            "format": "int64"
          },
          "modifiedOn": {
            "type": "string",
            "description": "When the summary was last modified (in UTC)",
            "format": "date-time"
          },
          "notes": {
            "type": "string",
            "description": "Work performed notes",
            "format": "multiline"
          },
          "technicianId": {
            "type": "integer",
            "description": "ID of the technician",
            "format": "int64"
          }
        },
        "additionalProperties": false,
        "description": "Appointment summary (work performed log) response model\n            "
      },
      "ApiErrorResponse": {
        "required": [
          "type",
          "title",
          "status",
          "traceId",
          "errors",
          "data"
        ],
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "A URI reference that identifies the problem type"
          },
          "title": {
            "type": "string",
            "description": "A short, human-readable summary of the problem type"
          },
          "status": {
            "type": "integer",
            "description": "The HTTP status code generated by server",
            "format": "int32"
          },
          "traceId": {
            "type": "string",
            "description": "Internal trace ID for advanced diagnostics"
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Provides more details about errors occurred, which can potentially be used for visual display"
          },
          "data": {
            "type": "object",
            "additionalProperties": {},
            "description": "Provides additional data, intended for programmatical usage"
          }
        },
        "additionalProperties": false,
        "description": "Detailed error response, following RFC 7807 recommendations (https://tools.ietf.org/html/rfc7807)."
      },
      "PaginatedResponse_Of_Jpm.V2.AppointmentResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.AppointmentResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "ActiveRequestArg": {
        "enum": [
          "True",
          "Any",
          "False"
        ],
        "type": "string",
        "description": "Represents possible HTTP query argument values, when applying filters based on active status.",
        "x-enumNames": [
          "True",
          "Any",
          "False"
        ]
      },
      "Jpm.V2.AppointmentAddRequest": {
        "required": [
          "jobId",
          "start",
          "end"
        ],
        "type": "object",
        "properties": {
          "jobId": {
            "type": "integer",
            "description": "ID of job for new appointment",
            "format": "int64"
          },
          "start": {
            "type": "string",
            "description": "Start date/time (in UTC) of new appointment",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "description": "End date/time (in UTC) of new appointment",
            "format": "date-time"
          },
          "arrivalWindowStart": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arrival window start date/time (in UTC) for new appointment, if configured",
            "format": "date-time"
          },
          "arrivalWindowEnd": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arrival window end date/time (in UTC) for new appointment, if configured",
            "format": "date-time"
          },
          "technicianIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "List of IDs of technicians to assign to new appointment"
          },
          "specialInstructions": {
            "type": [
              "string",
              "null"
            ],
            "description": "Special instructions associated to the appointment",
            "format": "multiline"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.AppointmentRescheduleRequest": {
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "description": "New start date/time (in UTC) for appointment",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "description": "New end date/time (in UTC) for appointment",
            "format": "date-time"
          },
          "arrivalWindowStart": {
            "type": [
              "string",
              "null"
            ],
            "description": "New arrival window start date/time (in UTC) for appointment, if configured",
            "format": "date-time"
          },
          "arrivalWindowEnd": {
            "type": [
              "string",
              "null"
            ],
            "description": "New arrival window end date/time (in UTC) for appointment, if configured",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.HoldAppointmentRequest": {
        "required": [
          "reasonId",
          "memo"
        ],
        "type": "object",
        "properties": {
          "reasonId": {
            "type": "integer",
            "description": "ID of the hold reason",
            "format": "int64"
          },
          "memo": {
            "type": "string",
            "description": "Memo of why the appointment is going on hold",
            "format": "multiline"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.UpdateAppointmentSpecialInstructionsRequest": {
        "required": [
          "specialInstructions"
        ],
        "type": "object",
        "properties": {
          "specialInstructions": {
            "type": "string",
            "description": "New special instructions associated to the appointment",
            "format": "multiline"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.SetAppointmentSummaryRequest": {
        "required": [
          "notes",
          "technicianId"
        ],
        "type": "object",
        "properties": {
          "notes": {
            "type": "string",
            "description": "Work performed notes",
            "format": "multiline"
          },
          "technicianId": {
            "type": "integer",
            "description": "ID of the technician",
            "format": "int64"
          }
        },
        "additionalProperties": false,
        "description": "Request model for setting a single appointment summary\n            "
      },
      "Jpm.BudgetCodes.ListSegmentsResponse": {
        "required": [
          "data"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.BudgetCodes.SegmentModel"
            }
          }
        },
        "additionalProperties": false
      },
      "Jpm.BudgetCodes.SegmentModel": {
        "required": [
          "id",
          "name",
          "type",
          "structure",
          "isActive",
          "isRequired"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/Jpm.BudgetCodes.SegmentType"
          },
          "structure": {
            "$ref": "#/components/schemas/Jpm.BudgetCodes.SegmentStructure"
          },
          "isActive": {
            "type": "boolean"
          },
          "isRequired": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Jpm.BudgetCodes.SegmentType": {
        "enum": [
          "None",
          "CostCode",
          "CostType",
          "Custom"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "None",
          "CostCode",
          "CostType",
          "Custom"
        ]
      },
      "Jpm.BudgetCodes.SegmentStructure": {
        "enum": [
          "None",
          "Flat",
          "Hierarchal"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "None",
          "Flat",
          "Hierarchal"
        ]
      },
      "PaginatedResponse_Of_Jpm.BudgetCodes.SegmentItemModel": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.BudgetCodes.SegmentItemModel"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.BudgetCodes.SegmentItemModel": {
        "required": [
          "id",
          "code",
          "description",
          "path",
          "isActive"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "parentId": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "code": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "costCategory": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.BudgetCodes.SegmentItemCostCategory"
              },
              {
                "type": "null"
              }
            ]
          },
          "isActive": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Jpm.BudgetCodes.SegmentItemCostCategory": {
        "enum": [
          "None",
          "Material",
          "Labor",
          "Equipment",
          "Subcontract",
          "Overhead",
          "Other",
          "SystemUse"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "None",
          "Material",
          "Labor",
          "Equipment",
          "Subcontract",
          "Overhead",
          "Other",
          "SystemUse"
        ]
      },
      "PaginatedResponse_Of_Jpm.BudgetCodes.BudgetCodeModel": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.BudgetCodes.BudgetCodeModel"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.BudgetCodes.BudgetCodeModel": {
        "required": [
          "id",
          "code",
          "description",
          "segments"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "code": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "segments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.BudgetCodes.BudgetCodeSegmentModel"
            }
          }
        },
        "additionalProperties": false
      },
      "Jpm.BudgetCodes.BudgetCodeSegmentModel": {
        "required": [
          "segmentId"
        ],
        "type": "object",
        "properties": {
          "segmentId": {
            "type": "integer",
            "format": "int64"
          },
          "segmentItemId": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "code": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "path": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": false
      },
      "Jpm.BudgetCodes.MatchBudgetCodesResponse": {
        "required": [
          "matches"
        ],
        "type": "object",
        "properties": {
          "matches": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.BudgetCodes.BudgetCodeMatchResult"
            }
          }
        },
        "additionalProperties": false
      },
      "Jpm.BudgetCodes.BudgetCodeMatchResult": {
        "required": [
          "code",
          "isValid",
          "budgetCodes"
        ],
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "isValid": {
            "type": "boolean"
          },
          "budgetCodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.BudgetCodes.BudgetCodeModel"
            }
          }
        },
        "additionalProperties": false
      },
      "Jpm.BudgetCodes.CreateBudgetCodeResponse": {
        "required": [
          "code"
        ],
        "type": "object",
        "properties": {
          "code": {
            "$ref": "#/components/schemas/Jpm.BudgetCodes.BudgetCodeModel"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.CreateFullBudgetCodeArgs": {
        "required": [
          "segmentItemIds"
        ],
        "type": "object",
        "properties": {
          "segmentItemIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.CreatePartialBudgetCodeArgs": {
        "required": [
          "segments"
        ],
        "type": "object",
        "properties": {
          "segments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.BudgetCodeSegmentBindingArgs"
            }
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.BudgetCodeSegmentBindingArgs": {
        "required": [
          "segmentId"
        ],
        "type": "object",
        "properties": {
          "segmentId": {
            "type": "integer",
            "format": "int64"
          },
          "segmentItemId": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "Jpm.BudgetCodes.CreateBudgetCodeBatchResponse": {
        "required": [
          "codes"
        ],
        "type": "object",
        "properties": {
          "codes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.BudgetCodes.BudgetCodeModel"
            }
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.DailyLogResponse": {
        "required": [
          "id",
          "projectId",
          "date",
          "status",
          "inputs",
          "summaries",
          "attachments"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the daily log",
            "format": "int64"
          },
          "projectId": {
            "type": "integer",
            "description": "ID of the project this daily log belongs to",
            "format": "int64"
          },
          "date": {
            "type": "string",
            "description": "Date of the daily log",
            "format": "date"
          },
          "health": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.DailyLogHealthStatus"
              },
              {
                "type": "null"
              }
            ],
            "description": "Overall health status of the project as of this daily log"
          },
          "status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.DailyLogStatus"
              }
            ],
            "description": "Status of the daily log"
          },
          "inputs": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.DailyLogSectionContents"
              }
            ],
            "description": "Raw section content entered by the user"
          },
          "summaries": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.DailyLogSectionContents"
              }
            ],
            "description": "Generated/AI-summarized version of each section"
          },
          "overallSummary": {
            "type": [
              "string",
              "null"
            ],
            "description": "Generated executive summary of the daily log. Read-only."
          },
          "attachments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.DailyLogAttachmentResponse"
            },
            "description": "Files attached to the daily log (photos, audio, video, documents)"
          },
          "modifiedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date/time (in UTC) the daily log was last modified",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.DailyLogHealthStatus": {
        "enum": [
          "None",
          "OnTrack",
          "AtRisk",
          "OffTrack"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "None",
          "OnTrack",
          "AtRisk",
          "OffTrack"
        ]
      },
      "Jpm.V2.DailyLogStatus": {
        "enum": [
          "None",
          "Incomplete",
          "Draft",
          "Approved"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "None",
          "Incomplete",
          "Draft",
          "Approved"
        ]
      },
      "Jpm.V2.DailyLogSectionContents": {
        "type": "object",
        "properties": {
          "equipment": {
            "type": [
              "string",
              "null"
            ],
            "description": "Equipment notes section"
          },
          "issues": {
            "type": [
              "string",
              "null"
            ],
            "description": "Issues notes section"
          },
          "materials": {
            "type": [
              "string",
              "null"
            ],
            "description": "Materials notes section"
          },
          "notes": {
            "type": [
              "string",
              "null"
            ],
            "description": "General notes section"
          },
          "safety": {
            "type": [
              "string",
              "null"
            ],
            "description": "Safety notes section"
          },
          "weather": {
            "type": [
              "string",
              "null"
            ],
            "description": "Weather notes section (free text; not structured weather measurements)"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.DailyLogAttachmentResponse": {
        "required": [
          "id",
          "kind",
          "timestamp"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the attachment. Fetch its content via GET on this project/daily log's attachments/{id} route.",
            "format": "int64"
          },
          "fileName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the file as originally uploaded"
          },
          "kind": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.DailyLogAttachmentKind"
              }
            ],
            "description": "Kind of file this attachment is (photo, audio, video, document)"
          },
          "timestamp": {
            "type": "string",
            "description": "Date/time (in UTC) the attachment was added",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.DailyLogAttachmentKind": {
        "enum": [
          "None",
          "Photo",
          "Audio",
          "Video",
          "Document"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "None",
          "Photo",
          "Audio",
          "Video",
          "Document"
        ]
      },
      "PaginatedResponse_Of_Jpm.V2.DailyLogSummaryResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.DailyLogSummaryResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.DailyLogSummaryResponse": {
        "required": [
          "id",
          "projectId",
          "date",
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the daily log",
            "format": "int64"
          },
          "projectId": {
            "type": "integer",
            "description": "ID of the project this daily log belongs to",
            "format": "int64"
          },
          "date": {
            "type": "string",
            "description": "Date of the daily log",
            "format": "date"
          },
          "health": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.DailyLogHealthStatus"
              },
              {
                "type": "null"
              }
            ],
            "description": "Overall health status of the project as of this daily log"
          },
          "status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.DailyLogStatus"
              }
            ],
            "description": "Status of the daily log"
          },
          "modifiedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date/time (in UTC) the daily log was last modified",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.DailyLogPatchRequest": {
        "type": "object",
        "properties": {
          "health": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.DailyLogHealthStatus"
              },
              {
                "type": "null"
              }
            ],
            "description": "Overall health status of the project as of this daily log"
          },
          "inputs": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.DailyLogSectionPatch"
              },
              {
                "type": "null"
              }
            ],
            "description": "Raw section content entered by the user. Omit entirely to leave every section untouched;\nomit an individual property within to leave just that section untouched."
          },
          "summaries": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.DailyLogSectionPatch"
              },
              {
                "type": "null"
              }
            ],
            "description": "Generated/AI-summarized version of each section, independently overwritable from the raw\ncontent in Inputs. Omit entirely to leave every section's summary untouched."
          },
          "overallSummary": {
            "type": "string",
            "description": "Generated executive summary of the whole daily log. Unlike the sections in\nSummaries, there's no corresponding raw-content field for this -- it's\noverwritable directly."
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.DailyLogSectionPatch": {
        "required": [
          "equipment",
          "issues",
          "materials",
          "notes",
          "safety",
          "weather"
        ],
        "type": "object",
        "properties": {
          "equipment": {
            "type": "string",
            "description": "Equipment notes section"
          },
          "issues": {
            "type": "string",
            "description": "Issues notes section"
          },
          "materials": {
            "type": "string",
            "description": "Materials notes section"
          },
          "notes": {
            "type": "string",
            "description": "General notes section"
          },
          "safety": {
            "type": "string",
            "description": "Safety notes section"
          },
          "weather": {
            "type": "string",
            "description": "Weather notes section (free text; not structured weather measurements)"
          }
        },
        "additionalProperties": false
      },
      "ExportResponse_Of_Jpm.V2.ExportJobsResponse": {
        "required": [
          "hasMore",
          "continueFrom",
          "data"
        ],
        "type": "object",
        "properties": {
          "hasMore": {
            "type": "boolean",
            "description": "Indicates whether the export feed has reached its logical \"end\", or if there is more to export.\nTrue means the consumer can invoke another request right away using new continuation token value.\nFalse means there is now new data for the export, and the consumer should wait for some time (5-10 minutes)\nbefore making another request."
          },
          "continueFrom": {
            "type": "string",
            "description": "Continuation token used to resume the export operation. The value should be used in \"from\" query parameter of the following request."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExportJobsResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Jpm.V2.ExportJobsResponse": {
        "required": [
          "jobNumber",
          "jobStatus",
          "priority",
          "tagTypeIds",
          "customerPo",
          "estimateIds",
          "customFields",
          "externalData",
          "id",
          "customerId",
          "locationId",
          "businessUnitId",
          "jobTypeId",
          "campaignId",
          "appointmentCount",
          "firstAppointmentId",
          "lastAppointmentId",
          "noCharge",
          "notificationsEnabled",
          "createdOn",
          "createdById",
          "modifiedOn",
          "invoiceId",
          "equipmentIds",
          "active"
        ],
        "type": "object",
        "properties": {
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "description": "Job summary",
            "format": "html"
          },
          "customFields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomFieldApiModel"
            },
            "description": "Custom fields on the job"
          },
          "externalData": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExternalDataModel"
            },
            "description": "List of external data attached to this job,\nthat corresponds to the application guid provided in the request.\n            "
          },
          "summaryOfWork": {
            "type": [
              "string",
              "null"
            ],
            "description": "Summary of work completed on the job. Private preview: available for specific accounts only."
          },
          "id": {
            "type": "integer",
            "description": "ID of the job",
            "format": "int64"
          },
          "jobNumber": {
            "type": "string",
            "description": "Job number"
          },
          "projectId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the job's project",
            "format": "int64"
          },
          "customerId": {
            "type": "integer",
            "description": "ID of the job's customer",
            "format": "int64"
          },
          "locationId": {
            "type": "integer",
            "description": "ID of the job's location",
            "format": "int64"
          },
          "jobStatus": {
            "type": "string",
            "description": "Status of the job"
          },
          "completedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date/time (in UTC) when the job was completed",
            "format": "date-time"
          },
          "businessUnitId": {
            "type": "integer",
            "description": "ID of the job's business unit",
            "format": "int64"
          },
          "jobTypeId": {
            "type": "integer",
            "description": "ID of job type",
            "format": "int64"
          },
          "priority": {
            "type": "string",
            "description": "Priority of the job"
          },
          "campaignId": {
            "type": "integer",
            "description": "ID of the job's campaign",
            "format": "int64"
          },
          "appointmentCount": {
            "type": "integer",
            "description": "Number of appointments on the job",
            "format": "int64"
          },
          "firstAppointmentId": {
            "type": "integer",
            "description": "ID of the first appointment on the job",
            "format": "int64"
          },
          "lastAppointmentId": {
            "type": "integer",
            "description": "ID of the last appointment on the job",
            "format": "int64"
          },
          "recallForId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the job for which this job is a recall",
            "format": "int64"
          },
          "warrantyId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the job for which this job is a warranty",
            "format": "int64"
          },
          "jobGeneratedLeadSource": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.Base.JobGeneratedLeadSource"
              },
              {
                "type": "null"
              }
            ],
            "description": "Object that contains:\nJobId: ID of the job from which this job was generated\nEmployeeId: ID of the office user or technician\n            "
          },
          "noCharge": {
            "type": "boolean",
            "description": "Whether the job is a no-charge job"
          },
          "notificationsEnabled": {
            "type": "boolean",
            "description": "Whether notifications will be sent to customers"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) when the job was created",
            "format": "date-time"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of the user who created the job",
            "format": "int64"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (in UTC) when job was last modified",
            "format": "date-time"
          },
          "tagTypeIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Tags on the job"
          },
          "leadCallId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Call that resulted in this job",
            "format": "int64"
          },
          "partnerLeadCallId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Call that 3rd-party agents are enabled to set.",
            "format": "int64"
          },
          "bookingId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Booking that resulted in this job",
            "format": "int64"
          },
          "soldById": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Technician that sold this job",
            "format": "int64"
          },
          "customerPo": {
            "type": "string",
            "description": "Customer PO"
          },
          "invoiceId": {
            "type": "integer",
            "description": "ID of the invoice associated with this job.",
            "format": "int64"
          },
          "membershipId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Membership associated with this job.",
            "format": "int64"
          },
          "total": {
            "type": [
              "number",
              "null"
            ],
            "description": "Total amount of the job",
            "format": "decimal"
          },
          "createdFromEstimateId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the sold estimate from which this job was created",
            "format": "int64"
          },
          "estimateIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of estimates that are related to this job"
          },
          "equipmentIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of equipment items attached to this job"
          },
          "isAutoDispatched": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Indicates whether Dispatch Pro is enabled for this job"
          },
          "active": {
            "type": "boolean",
            "description": "Whether this job is active, or not anymore."
          }
        },
        "additionalProperties": false
      },
      "CustomFieldApiModel": {
        "required": [
          "typeId",
          "name",
          "value"
        ],
        "type": "object",
        "properties": {
          "typeId": {
            "type": "integer",
            "description": "Custom Field Type Id",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Custom Field Name"
          },
          "value": {
            "type": "string",
            "description": "Custom Field Value"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.ExternalDataModel": {
        "required": [
          "key",
          "value"
        ],
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "External data key."
          },
          "value": {
            "type": "string",
            "description": "External data value."
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.Base.JobGeneratedLeadSource": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the job",
            "format": "int64"
          },
          "employeeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the employee",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "ExportResponse_Of_Jpm.V2.ExportProjectsResponse": {
        "required": [
          "hasMore",
          "continueFrom",
          "data"
        ],
        "type": "object",
        "properties": {
          "hasMore": {
            "type": "boolean",
            "description": "Indicates whether the export feed has reached its logical \"end\", or if there is more to export.\nTrue means the consumer can invoke another request right away using new continuation token value.\nFalse means there is now new data for the export, and the consumer should wait for some time (5-10 minutes)\nbefore making another request."
          },
          "continueFrom": {
            "type": "string",
            "description": "Continuation token used to resume the export operation. The value should be used in \"from\" query parameter of the following request."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExportProjectsResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Jpm.V2.ExportProjectsResponse": {
        "required": [
          "id",
          "number",
          "customerId",
          "locationId",
          "projectManagerIds",
          "businessUnitIds",
          "createdOn",
          "customFields",
          "externalData",
          "jobIds",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the project",
            "format": "int64"
          },
          "number": {
            "type": "string",
            "description": "Project number"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Project name"
          },
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "description": "Project summary",
            "format": "html"
          },
          "status": {
            "type": [
              "string",
              "null"
            ],
            "description": "Project status"
          },
          "statusId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Project status id",
            "format": "int64"
          },
          "subStatus": {
            "type": [
              "string",
              "null"
            ],
            "description": "Project substatus"
          },
          "subStatusId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Project substatus id",
            "format": "int64"
          },
          "customerId": {
            "type": "integer",
            "description": "ID of the project's customer",
            "format": "int64"
          },
          "locationId": {
            "type": "integer",
            "description": "ID of the project's location",
            "format": "int64"
          },
          "projectTypeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the project's type",
            "format": "int64"
          },
          "projectManagerIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of project managers for the project."
          },
          "businessUnitIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of business units for the project."
          },
          "startDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Start date of the project",
            "format": "date-time"
          },
          "targetCompletionDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Target completion date of the project",
            "format": "date-time"
          },
          "actualCompletionDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Actual completion date of the project",
            "format": "date-time"
          },
          "contractStartDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date the project's contract starts",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "Projects last modification date",
            "format": "date-time"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) when the project was created",
            "format": "date-time"
          },
          "customFields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomFieldApiModel"
            },
            "description": "Custom fields on the project"
          },
          "externalData": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExternalDataModel"
            },
            "description": "List of external data attached to this project,\nthat corresponds to the application guid provided in the request."
          },
          "jobIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "List of jobs associated with this project."
          },
          "active": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ExportResponse_Of_Jpm.V2.ExportAppointmentsResponse": {
        "required": [
          "hasMore",
          "continueFrom",
          "data"
        ],
        "type": "object",
        "properties": {
          "hasMore": {
            "type": "boolean",
            "description": "Indicates whether the export feed has reached its logical \"end\", or if there is more to export.\nTrue means the consumer can invoke another request right away using new continuation token value.\nFalse means there is now new data for the export, and the consumer should wait for some time (5-10 minutes)\nbefore making another request."
          },
          "continueFrom": {
            "type": "string",
            "description": "Continuation token used to resume the export operation. The value should be used in \"from\" query parameter of the following request."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExportAppointmentsResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Jpm.V2.ExportAppointmentsResponse": {
        "required": [
          "id",
          "jobId",
          "start",
          "end",
          "status",
          "createdOn",
          "modifiedOn",
          "customerId",
          "unused",
          "createdById",
          "isConfirmed",
          "active"
        ],
        "type": "object",
        "properties": {
          "appointmentSummaries": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.AppointmentSummaryApiModel"
            },
            "description": "Work performed summaries for this appointment. Private preview: available for specific accounts only."
          },
          "id": {
            "type": "integer",
            "description": "Appointment ID",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "ID of the job that the appointment was created for",
            "format": "int64"
          },
          "appointmentNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "Appointment number"
          },
          "start": {
            "type": "string",
            "description": "Appointment's start date/time (in UTC)",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "description": "Appointment's end date/time (in UTC)",
            "format": "date-time"
          },
          "arrivalWindowStart": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arrival window start date/time (in UTC), if configured",
            "format": "date-time"
          },
          "arrivalWindowEnd": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arrival window end date/time (in UTC), if configured",
            "format": "date-time"
          },
          "status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.Base.AppointmentStatus"
              }
            ],
            "description": "Appointment's status"
          },
          "specialInstructions": {
            "type": [
              "string",
              "null"
            ],
            "description": "Special instructions associated to the appointment",
            "format": "multiline"
          },
          "createdOn": {
            "type": "string",
            "description": "When the appointment was created (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "When the appointment was modified (in UTC)",
            "format": "date-time"
          },
          "customerId": {
            "type": "integer",
            "description": "Id of a customer that the appointment was created for",
            "format": "int64"
          },
          "unused": {
            "type": "boolean",
            "description": "Returns true if the appointment is unused"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of the user that created the appointment",
            "format": "int64"
          },
          "isConfirmed": {
            "type": "boolean",
            "description": "Returns true if the appointment is confirmed"
          },
          "active": {
            "type": "boolean",
            "description": "Whether this appointment is active"
          }
        },
        "additionalProperties": false
      },
      "ExportResponse_Of_Jpm.V2.ExportJobCanceledLogResponse": {
        "required": [
          "hasMore",
          "continueFrom",
          "data"
        ],
        "type": "object",
        "properties": {
          "hasMore": {
            "type": "boolean",
            "description": "Indicates whether the export feed has reached its logical \"end\", or if there is more to export.\nTrue means the consumer can invoke another request right away using new continuation token value.\nFalse means there is now new data for the export, and the consumer should wait for some time (5-10 minutes)\nbefore making another request."
          },
          "continueFrom": {
            "type": "string",
            "description": "Continuation token used to resume the export operation. The value should be used in \"from\" query parameter of the following request."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExportJobCanceledLogResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Jpm.V2.ExportJobCanceledLogResponse": {
        "required": [
          "id",
          "jobId",
          "reasonId",
          "createdOn",
          "createdById",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the job canceled log",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "ID of the job that has been canceled",
            "format": "int64"
          },
          "reasonId": {
            "type": "integer",
            "description": "ID of the job cancel reason",
            "format": "int64"
          },
          "memo": {
            "type": [
              "string",
              "null"
            ],
            "description": "Job canceled log additional comments"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) when the job canceled log was created",
            "format": "date-time"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of user who canceled the job",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the job canceled log is active"
          }
        },
        "additionalProperties": false
      },
      "ExportResponse_Of_Jpm.V2.ExportJobNotesResponse": {
        "required": [
          "hasMore",
          "continueFrom",
          "data"
        ],
        "type": "object",
        "properties": {
          "hasMore": {
            "type": "boolean",
            "description": "Indicates whether the export feed has reached its logical \"end\", or if there is more to export.\nTrue means the consumer can invoke another request right away using new continuation token value.\nFalse means there is now new data for the export, and the consumer should wait for some time (5-10 minutes)\nbefore making another request."
          },
          "continueFrom": {
            "type": "string",
            "description": "Continuation token used to resume the export operation. The value should be used in \"from\" query parameter of the following request."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExportJobNotesResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Jpm.V2.ExportJobNotesResponse": {
        "required": [
          "id",
          "active",
          "text",
          "isPinned",
          "createdById",
          "createdOn",
          "modifiedOn",
          "jobId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Note Id.",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Whether this note is active, or not anymore."
          },
          "text": {
            "type": "string",
            "description": "Text content of a note"
          },
          "isPinned": {
            "type": "boolean",
            "description": "Whether the note is pinned to the top"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of user who created this note",
            "format": "int64"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) the note was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (in UTC) the note was modified",
            "format": "date-time"
          },
          "jobId": {
            "type": "integer",
            "description": "Notes Job Id.",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "ExportResponse_Of_Jpm.V2.ExportProjectNotesResponse": {
        "required": [
          "hasMore",
          "continueFrom",
          "data"
        ],
        "type": "object",
        "properties": {
          "hasMore": {
            "type": "boolean",
            "description": "Indicates whether the export feed has reached its logical \"end\", or if there is more to export.\nTrue means the consumer can invoke another request right away using new continuation token value.\nFalse means there is now new data for the export, and the consumer should wait for some time (5-10 minutes)\nbefore making another request."
          },
          "continueFrom": {
            "type": "string",
            "description": "Continuation token used to resume the export operation. The value should be used in \"from\" query parameter of the following request."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExportProjectNotesResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Jpm.V2.ExportProjectNotesResponse": {
        "required": [
          "id",
          "active",
          "text",
          "isPinned",
          "createdById",
          "createdOn",
          "modifiedOn",
          "projectId"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Note Id.",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Whether this note is active, or not anymore."
          },
          "text": {
            "type": "string",
            "description": "Text content of a note"
          },
          "isPinned": {
            "type": "boolean",
            "description": "Whether the note is pinned to the top"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of user who created this note",
            "format": "int64"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) the note was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (in UTC) the note was modified",
            "format": "date-time"
          },
          "projectId": {
            "type": "integer",
            "description": "Notes Project Id.",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "ExportResponse_Of_Jpm.V2.ExportJobHistoryResponse": {
        "required": [
          "hasMore",
          "continueFrom",
          "data"
        ],
        "type": "object",
        "properties": {
          "hasMore": {
            "type": "boolean",
            "description": "Indicates whether the export feed has reached its logical \"end\", or if there is more to export.\nTrue means the consumer can invoke another request right away using new continuation token value.\nFalse means there is now new data for the export, and the consumer should wait for some time (5-10 minutes)\nbefore making another request."
          },
          "continueFrom": {
            "type": "string",
            "description": "Continuation token used to resume the export operation. The value should be used in \"from\" query parameter of the following request."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExportJobHistoryResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Jpm.V2.ExportJobHistoryResponse": {
        "required": [
          "jobId",
          "history"
        ],
        "type": "object",
        "properties": {
          "jobId": {
            "type": "integer",
            "description": "ID of the job ",
            "format": "int64"
          },
          "history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExportJobHistoryEntry"
            },
            "description": "Job history entries "
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.ExportJobHistoryEntry": {
        "required": [
          "id",
          "eventType",
          "date",
          "usedSchedulingTool"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the log ",
            "format": "int64"
          },
          "employeeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the employee ",
            "format": "int64"
          },
          "eventType": {
            "type": "string",
            "description": "Type of the job status "
          },
          "date": {
            "type": "string",
            "description": "Date of the log ",
            "format": "date-time"
          },
          "usedSchedulingTool": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.JobSchedulingTool"
              }
            ],
            "description": "Scheduling tool used "
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.JobSchedulingTool": {
        "enum": [
          "Manual",
          "SmartSchedule",
          "SmartDispatch",
          "TechnicianRouteOptimization",
          "AdaptiveCapacity",
          "Routing"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Manual",
          "SmartSchedule",
          "SmartDispatch",
          "TechnicianRouteOptimization",
          "AdaptiveCapacity",
          "Routing"
        ]
      },
      "PaginatedResponse_Of_Jpm.V2.JobCancelReasonResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.JobCancelReasonResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.JobCancelReasonResponse": {
        "required": [
          "id",
          "name",
          "active",
          "createdOn",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the job cancel reason",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the job cancel reason"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the job cancel reason is active"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) when the job was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (in UTC) when job was last modified",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.JobEquipmentResponse": {
        "required": [
          "equipmentIds"
        ],
        "type": "object",
        "properties": {
          "equipmentIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of the equipment items attached to the job"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.AttachJobEquipmentRequest": {
        "required": [
          "equipmentIds"
        ],
        "type": "object",
        "properties": {
          "equipmentIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of the equipment items to attach to the job"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.DetachJobEquipmentRequest": {
        "required": [
          "equipmentIds"
        ],
        "type": "object",
        "properties": {
          "equipmentIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of the equipment items to detach from the job"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Jpm.V2.JobHoldReasonResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.JobHoldReasonResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.JobHoldReasonResponse": {
        "required": [
          "id",
          "name",
          "active",
          "createdOn",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Job Hold Reason Id",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Job Hold Reason Name"
          },
          "active": {
            "type": "boolean",
            "description": "Job Hold Reason Active Status"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) when the job was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (in UTC) when job was last modified",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.JobResponse": {
        "required": [
          "jobNumber",
          "jobStatus",
          "priority",
          "tagTypeIds",
          "customerPo",
          "estimateIds",
          "id",
          "customerId",
          "locationId",
          "businessUnitId",
          "jobTypeId",
          "campaignId",
          "appointmentCount",
          "firstAppointmentId",
          "lastAppointmentId",
          "noCharge",
          "notificationsEnabled",
          "createdOn",
          "createdById",
          "modifiedOn",
          "invoiceId",
          "equipmentIds",
          "customFields",
          "externalData"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the job",
            "format": "int64"
          },
          "jobNumber": {
            "type": "string",
            "description": "Job number"
          },
          "projectId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the job's project",
            "format": "int64"
          },
          "customerId": {
            "type": "integer",
            "description": "ID of the job's customer",
            "format": "int64"
          },
          "locationId": {
            "type": "integer",
            "description": "ID of the job's location",
            "format": "int64"
          },
          "jobStatus": {
            "type": "string",
            "description": "Status of the job"
          },
          "completedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date/time (in UTC) when the job was completed",
            "format": "date-time"
          },
          "businessUnitId": {
            "type": "integer",
            "description": "ID of the job's business unit",
            "format": "int64"
          },
          "jobTypeId": {
            "type": "integer",
            "description": "ID of job type",
            "format": "int64"
          },
          "priority": {
            "type": "string",
            "description": "Priority of the job"
          },
          "campaignId": {
            "type": "integer",
            "description": "ID of the job's campaign",
            "format": "int64"
          },
          "appointmentCount": {
            "type": "integer",
            "description": "Number of appointments on the job",
            "format": "int64"
          },
          "firstAppointmentId": {
            "type": "integer",
            "description": "ID of the first appointment on the job",
            "format": "int64"
          },
          "lastAppointmentId": {
            "type": "integer",
            "description": "ID of the last appointment on the job",
            "format": "int64"
          },
          "recallForId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the job for which this job is a recall",
            "format": "int64"
          },
          "warrantyId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the job for which this job is a warranty",
            "format": "int64"
          },
          "jobGeneratedLeadSource": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.Base.JobGeneratedLeadSource"
              },
              {
                "type": "null"
              }
            ],
            "description": "Object that contains:\nJobId: ID of the job from which this job was generated\nEmployeeId: ID of the office user or technician\n            "
          },
          "noCharge": {
            "type": "boolean",
            "description": "Whether the job is a no-charge job"
          },
          "notificationsEnabled": {
            "type": "boolean",
            "description": "Whether notifications will be sent to customers"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) when the job was created",
            "format": "date-time"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of the user who created the job",
            "format": "int64"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (in UTC) when job was last modified",
            "format": "date-time"
          },
          "tagTypeIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Tags on the job"
          },
          "leadCallId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Call that resulted in this job",
            "format": "int64"
          },
          "partnerLeadCallId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Call that 3rd-party agents are enabled to set.",
            "format": "int64"
          },
          "bookingId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Booking that resulted in this job",
            "format": "int64"
          },
          "soldById": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Technician that sold this job",
            "format": "int64"
          },
          "customerPo": {
            "type": "string",
            "description": "Customer PO"
          },
          "invoiceId": {
            "type": "integer",
            "description": "ID of the invoice associated with this job.",
            "format": "int64"
          },
          "membershipId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Membership associated with this job.",
            "format": "int64"
          },
          "total": {
            "type": [
              "number",
              "null"
            ],
            "description": "Total amount of the job",
            "format": "decimal"
          },
          "createdFromEstimateId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the sold estimate from which this job was created",
            "format": "int64"
          },
          "estimateIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of estimates that are related to this job"
          },
          "equipmentIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of equipment items attached to this job"
          },
          "isAutoDispatched": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Indicates whether Dispatch Pro is enabled for this job"
          },
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "description": "Job summary",
            "format": "html"
          },
          "customFields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomFieldApiModel"
            },
            "description": "Custom fields on the job"
          },
          "externalData": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExternalDataModel"
            },
            "description": "List of external data attached to this job,\nthat corresponds to the application guid provided in the request.\n            "
          },
          "summaryOfWork": {
            "type": [
              "string",
              "null"
            ],
            "description": "Summary of work completed on the job. Private preview: available for specific accounts only."
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.JobCreateRequest": {
        "required": [
          "customerId",
          "locationId",
          "businessUnitId",
          "jobTypeId",
          "priority",
          "campaignId",
          "appointments"
        ],
        "type": "object",
        "properties": {
          "customerId": {
            "type": "integer",
            "description": "ID of the job's customer",
            "format": "int64"
          },
          "locationId": {
            "type": "integer",
            "description": "ID of the job's location",
            "format": "int64"
          },
          "projectId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the job's project",
            "format": "int64"
          },
          "businessUnitId": {
            "type": "integer",
            "description": "ID of the job's business unit",
            "format": "int64"
          },
          "jobGeneratedLeadSource": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.Base.JobGeneratedLeadSource"
              },
              {
                "type": "null"
              }
            ],
            "description": "Object that contains:\nJobId: ID of the job from which this job was generated\nEmployeeId: ID of the office user or technician\n            "
          },
          "jobTypeId": {
            "type": "integer",
            "description": "ID of job type",
            "format": "int64"
          },
          "priority": {
            "type": "string",
            "description": "Priority of the job"
          },
          "campaignId": {
            "type": "integer",
            "description": "ID of the job's campaign",
            "format": "int64"
          },
          "appointments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.AppointmentInformation"
            },
            "description": "List of appointment information"
          },
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "description": "Job summary",
            "format": "html"
          },
          "customFields": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.CustomFieldModel"
            },
            "description": "Custom fields on the job"
          },
          "tagTypeIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "List of IDs of tags on the job"
          },
          "externalData": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.ExternalDataCreateRequest"
              },
              {
                "type": "null"
              }
            ],
            "description": "Optional model that contains a list of external data items\nthat should be attached to this job.\n            "
          },
          "invoiceSignatureIsRequired": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Optional model that informs if invoice should requires a signature or not\nif not informed will follow the rules for location and job type\n            "
          },
          "customerPo": {
            "type": [
              "string",
              "null"
            ],
            "description": "Customer PO"
          },
          "soldById": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Technician who sold the job",
            "format": "int64"
          },
          "partnerLeadCallId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Call that 3rd-party agents are enabled to set.",
            "format": "int64"
          },
          "leadId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Lead associated with this job",
            "format": "int64"
          },
          "bookingId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Booking that resulted in this job",
            "format": "int64"
          },
          "serviceAgreementVisitId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Service Agreement visit that this job fulfills. When provided, the booked job is\nlinked to the specified SA visit\n            ",
            "format": "int64"
          },
          "noCharge": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether the job is a no-charge job."
          },
          "recallForId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the job that this job is a recall for",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.AppointmentInformation": {
        "required": [
          "start",
          "end"
        ],
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "description": "Start date/time (in UTC) for the appointment",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "description": "End date/time (in UTC) for the appointment",
            "format": "date-time"
          },
          "arrivalWindowStart": {
            "type": [
              "string",
              "null"
            ],
            "description": "Start date/time (in UTC) for the arrival window of the appointment",
            "format": "date-time"
          },
          "arrivalWindowEnd": {
            "type": [
              "string",
              "null"
            ],
            "description": "End date/time (in UTC) for the arrival window of the appointment",
            "format": "date-time"
          },
          "technicianIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "List of IDs of technicians who will be assigned on the appointment"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.CustomFieldModel": {
        "required": [
          "typeId"
        ],
        "type": "object",
        "properties": {
          "typeId": {
            "type": "integer",
            "description": "ID of the custom field",
            "format": "int64"
          },
          "value": {
            "type": [
              "string",
              "null"
            ],
            "description": "Value of the custom field"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.ExternalDataCreateRequest": {
        "required": [
          "applicationGuid",
          "externalData"
        ],
        "type": "object",
        "properties": {
          "applicationGuid": {
            "type": "string",
            "description": "Items that are created with a specific guid, could be fetched/updated/removed\nonly when the same application guid is provided.",
            "format": "guid"
          },
          "externalData": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExternalDataModel"
            },
            "description": "External data list."
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.CancelJobRequest": {
        "required": [
          "reasonId",
          "memo"
        ],
        "type": "object",
        "properties": {
          "reasonId": {
            "type": "integer",
            "description": "ID of job cancel reason",
            "format": "int64"
          },
          "memo": {
            "type": "string",
            "description": "Memo of job cancel reason",
            "format": "multiline"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.UpdateJobRequest": {
        "type": "object",
        "properties": {
          "customerId": {
            "type": "integer",
            "description": "ID of the job's customer",
            "format": "int64"
          },
          "locationId": {
            "type": "integer",
            "description": "ID of the job's location",
            "format": "int64"
          },
          "businessUnitId": {
            "type": "integer",
            "description": "ID of the job's business unit",
            "format": "int64"
          },
          "jobGeneratedLeadSource": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.Base.JobGeneratedLeadSource"
              },
              {
                "type": "null"
              }
            ],
            "description": "Object that contains:\nJobId: ID of the job from which this job was generated\nEmployeeId: ID of the office user or technician\n            "
          },
          "jobTypeId": {
            "type": "integer",
            "description": "ID of job type",
            "format": "int64"
          },
          "priority": {
            "type": "string",
            "description": "Priority of the job"
          },
          "campaignId": {
            "type": "integer",
            "description": "ID of the job's campaign",
            "format": "int64"
          },
          "summary": {
            "type": "string",
            "description": "Job summary",
            "format": "html"
          },
          "shouldUpdateInvoiceItems": {
            "type": "boolean",
            "description": "If set to true, update the business unit of invoice items on job's invoice"
          },
          "customFields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.CustomFieldModel"
            },
            "description": "List of custom fields and their values. This list must describe the full list of custom fields on the job.\nIf job A has values for custom fields X and Y and this field only contains a model for custom field X, then\nthe value for custom field Y on job A will be removed.\n            "
          },
          "tagTypeIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "List of tag types. This list must describe the full list of tags on the job. If job A has tags X and Y and\nthis field only contains a ID for tag X, then tag Y on job A will be removed.\n            "
          },
          "externalData": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.ExternalDataUpdateRequest"
              }
            ],
            "description": "External data update model.\n            "
          },
          "customerPo": {
            "type": "string",
            "description": "Customer PO"
          },
          "soldById": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the Technician who sold the job.\n            ",
            "format": "int64"
          },
          "isAutoDispatched": {
            "type": "boolean",
            "description": "Indicates whether Dispatch Pro is enabled for this job"
          },
          "summaryOfWork": {
            "type": "string",
            "description": "Summary of work completed on the job. Private preview: available for specific accounts only."
          },
          "noCharge": {
            "type": "boolean",
            "description": "Whether the job is a no-charge job."
          },
          "recallForId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the job that this job is a recall for. Set to null to clear.",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.ExternalDataUpdateRequest": {
        "required": [
          "applicationGuid",
          "externalData"
        ],
        "type": "object",
        "properties": {
          "patchMode": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.ExternalDataPatchMode"
              },
              {
                "type": "null"
              }
            ],
            "description": "External data patch mode.\\\n\"Replace\" (default) replaces all existing keys with new values. If job A has custom data with keys X and Y and this field only contains an item\nwith a key X, then custom data with a key Y on job A will be removed.\\\n\"Merge\" will only replace key X in the example above. Keys with null value will be deleted."
          },
          "applicationGuid": {
            "type": "string",
            "description": "Items that are created with a specific guid, could be fetched/updated/removed\nonly when the same application guid is provided.",
            "format": "guid"
          },
          "externalData": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExternalDataUpdateModel"
            },
            "description": "External data list."
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.ExternalDataPatchMode": {
        "enum": [
          "Replace",
          "Merge"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Replace",
          "Merge"
        ]
      },
      "Jpm.V2.ExternalDataUpdateModel": {
        "required": [
          "key"
        ],
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "External data key."
          },
          "value": {
            "type": [
              "string",
              "null"
            ],
            "description": "External data value.",
            "format": "multiline"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Jpm.V2.JobResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.JobResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.JobStatus": {
        "enum": [
          "Scheduled",
          "Dispatched",
          "InProgress",
          "Hold",
          "Completed",
          "Canceled"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Scheduled",
          "Dispatched",
          "InProgress",
          "Hold",
          "Completed",
          "Canceled"
        ]
      },
      "Jpm.V2.JobAppointmentStatus": {
        "enum": [
          "Scheduled",
          "Dispatched",
          "Working",
          "Hold",
          "Done",
          "Canceled"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Scheduled",
          "Dispatched",
          "Working",
          "Hold",
          "Done",
          "Canceled"
        ]
      },
      "PaginatedResponse_Of_Jpm.V2.NoteResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.NoteResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.NoteResponse": {
        "required": [
          "text",
          "isPinned",
          "createdById",
          "createdOn",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text content of a note"
          },
          "isPinned": {
            "type": "boolean",
            "description": "Whether the note is pinned to the top"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of user who created this note",
            "format": "int64"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) the note was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (in UTC) the note was modified",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.JobNoteCreateRequest": {
        "required": [
          "text"
        ],
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "Text content of job note"
          },
          "pinToTop": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether to pin job note to the top"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Jpm.V2.HoldReasonResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.HoldReasonResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.HoldReasonResponse": {
        "required": [
          "jobId",
          "reasonId",
          "name",
          "text",
          "appointmentHoldReasons"
        ],
        "type": "object",
        "properties": {
          "jobId": {
            "type": "integer",
            "description": "Job ID",
            "format": "int64"
          },
          "reasonId": {
            "type": "integer",
            "description": "ID of the reason",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the reason"
          },
          "text": {
            "type": "string",
            "description": "Text of the reason"
          },
          "appointmentHoldReasons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.AppointmentHoldReason"
            }
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.AppointmentHoldReason": {
        "required": [
          "name",
          "text",
          "appointmentId",
          "reasonId"
        ],
        "type": "object",
        "properties": {
          "appointmentId": {
            "type": "integer",
            "description": "Appointment ID",
            "format": "int64"
          },
          "reasonId": {
            "type": "integer",
            "description": "ID of the hold reason",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the hold reason"
          },
          "text": {
            "type": "string",
            "description": "Additional details about why the appointment was placed on hold"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Jpm.V2.CancelReasonResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.CancelReasonResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.CancelReasonResponse": {
        "required": [
          "jobId",
          "reasonId",
          "name",
          "text"
        ],
        "type": "object",
        "properties": {
          "jobId": {
            "type": "integer",
            "description": "Job ID",
            "format": "int64"
          },
          "reasonId": {
            "type": "integer",
            "description": "ID of the reason",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the reason"
          },
          "text": {
            "type": "string",
            "description": "Text of the reason"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.JobHistoryResponse": {
        "type": "object",
        "properties": {
          "history": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Jpm.Jobs.JobHistoryItemModel"
            },
            "description": "List of logs for the job"
          }
        },
        "additionalProperties": false
      },
      "Jpm.Jobs.JobHistoryItemModel": {
        "required": [
          "id",
          "eventType",
          "date",
          "usedSchedulingTool",
          "memo"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the log",
            "format": "int64"
          },
          "employeeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the employee",
            "format": "int64"
          },
          "eventType": {
            "type": "string",
            "description": "Type of the job status"
          },
          "date": {
            "type": "string",
            "description": "Date of the log",
            "format": "date-time"
          },
          "usedSchedulingTool": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.Jobs.JobSchedulingTool"
              }
            ],
            "description": "Scheduling tool used"
          },
          "memo": {
            "type": "string",
            "description": "Memo associated with the log"
          }
        },
        "additionalProperties": false
      },
      "Jpm.Jobs.JobSchedulingTool": {
        "enum": [
          "Manual",
          "SmartSchedule",
          "SmartDispatch",
          "TechnicianRouteOptimization",
          "AdaptiveCapacity",
          "Routing"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Manual",
          "SmartSchedule",
          "SmartDispatch",
          "TechnicianRouteOptimization",
          "AdaptiveCapacity",
          "Routing"
        ]
      },
      "PaginatedResponse_Of_Jpm.V2.JobCanceledLogResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.JobCanceledLogResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.JobCanceledLogResponse": {
        "required": [
          "id",
          "jobId",
          "reasonId",
          "createdOn",
          "createdById",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the job canceled log",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "ID of the job that has been canceled",
            "format": "int64"
          },
          "reasonId": {
            "type": "integer",
            "description": "ID of the job cancel reason",
            "format": "int64"
          },
          "memo": {
            "type": [
              "string",
              "null"
            ],
            "description": "Job canceled log additional comments"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) when the job canceled log was created",
            "format": "date-time"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of user who canceled the job",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the job canceled log is active"
          }
        },
        "additionalProperties": false,
        "description": "JobCanceledLog response model"
      },
      "Jpm.V2.JobBookedLogResponse": {
        "required": [
          "id",
          "jobId",
          "jobAppointmentId",
          "start",
          "createdOn",
          "createdById",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the job booked log",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "ID of the job that has been booked",
            "format": "int64"
          },
          "jobAppointmentId": {
            "type": "integer",
            "description": "ID of the job that has been booked",
            "format": "int64"
          },
          "start": {
            "type": "string",
            "description": "Start date/time (in UTC) of the job",
            "format": "date-time"
          },
          "arrivalWindowStart": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arrival window start date/time (in UTC) of the job",
            "format": "date-time"
          },
          "arrivalWindowEnd": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arrival window end date/time (in UTC) of the job",
            "format": "date-time"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) when the job booked log was created",
            "format": "date-time"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of user who booked the job",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the job booked log is active"
          }
        },
        "additionalProperties": false,
        "description": "JobBookedLog response model"
      },
      "PaginatedResponse_Of_Jpm.V2.CustomFieldTypeResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.CustomFieldTypeResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.CustomFieldTypeResponse": {
        "required": [
          "id",
          "name",
          "dataType",
          "createdOn",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The ID of the custom field type.",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "The name of the custom field type."
          },
          "dataType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.CustomFieldDataType"
              }
            ],
            "description": "Indicates the data type of the custom field."
          },
          "dataTypeOptions": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "Indicates the dropdown options if the custom field is a dropdown data type."
          },
          "createdOn": {
            "type": "string",
            "description": "The date and time when the custom field type was created.",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "The date and time when the custom field type was last modified.",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.CustomFieldDataType": {
        "enum": [
          "Text",
          "Dropdown",
          "Numeric"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Text",
          "Dropdown",
          "Numeric"
        ]
      },
      "PaginatedResponse_Of_Jpm.V2.JobTypeResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.JobTypeResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.JobTypeResponse": {
        "required": [
          "id",
          "name",
          "businessUnitIds",
          "skills",
          "tagTypeIds",
          "priority",
          "duration",
          "class",
          "summary",
          "noCharge",
          "invoiceSignaturesRequired",
          "modifiedOn",
          "createdOn",
          "externalData",
          "active",
          "isSmartDispatched",
          "defaultEstimateSoldAction",
          "customFieldTypeIds"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the job type",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the job type"
          },
          "businessUnitIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Business Unit Ids associated with job type"
          },
          "skills": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of skills required to complete this job"
          },
          "tagTypeIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Tags here will automatically be applied to jobs booked"
          },
          "priority": {
            "type": "string",
            "description": "Level of urgency for this type of job"
          },
          "duration": {
            "type": "integer",
            "description": "Avg length of time for this job type",
            "format": "int64"
          },
          "soldThreshold": {
            "type": [
              "number",
              "null"
            ],
            "description": "A job is considered as converted if subtotal meets or exceeds this threshold",
            "format": "decimal"
          },
          "class": {
            "type": "string",
            "description": "Let’s you group other job types by class"
          },
          "summary": {
            "type": "string",
            "description": "Text that is automatically added to job summary when booked",
            "format": "multiline"
          },
          "noCharge": {
            "type": "boolean",
            "description": "When true, all jobs are considered no charge"
          },
          "enforceRecurringServiceEventSelection": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "When true enforce recurring service event"
          },
          "invoiceSignaturesRequired": {
            "type": "boolean",
            "description": "When true signature is required"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (in UTC) when job type was last modified",
            "format": "date-time"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) when job type was created",
            "format": "date-time"
          },
          "externalData": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExternalDataModel"
            },
            "description": "List of external data attached to this job type,\nthat corresponds to the application guid provided in the request."
          },
          "active": {
            "type": "boolean",
            "description": "When true, job type is active"
          },
          "isSmartDispatched": {
            "type": "boolean",
            "description": "When true, job type is enabled for dispatch pro"
          },
          "defaultEstimateSoldAction": {
            "type": "string",
            "description": "Default action when an estimate is sold for this job type"
          },
          "customFieldTypeIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Custom field type IDs assigned to this job type"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.CreateJobTypeRequest": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the job type"
          },
          "businessUnitIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Business Unit Ids associated with job type"
          },
          "skills": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "List of skills required to complete this job"
          },
          "tagTypeIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Tags here will automatically be applied to jobs booked"
          },
          "priority": {
            "type": [
              "string",
              "null"
            ],
            "description": "Level of urgency for this type of job"
          },
          "duration": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Avg length of time for this job type",
            "format": "int32"
          },
          "soldThreshold": {
            "type": [
              "number",
              "null"
            ],
            "description": "A job is considered as converted if subtotal meets or exceeds this threshold",
            "format": "decimal"
          },
          "class": {
            "type": [
              "string",
              "null"
            ],
            "description": "Let’s you group other job types by class"
          },
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "description": "Text that is automatically added to job summary when booked",
            "format": "multiline"
          },
          "noCharge": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "When true, all jobs are considered no charge"
          },
          "enforceRecurringServiceEventSelection": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "When true enforce recurring service event"
          },
          "invoiceSignaturesRequired": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "When true signature is required"
          },
          "externalData": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.ExternalDataCreateRequest"
              },
              {
                "type": "null"
              }
            ],
            "description": "Optional model that contains a list of external data items\nthat should be attached to this job type."
          },
          "defaultEstimateSoldAction": {
            "type": [
              "string",
              "null"
            ],
            "description": "Default action when an estimate is sold for this job type"
          },
          "customFieldTypeIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Custom field type IDs to assign to this job type. Order determines display order."
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.UpdateJobTypeRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the job type"
          },
          "businessUnitIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Business Unit Ids associated with job type"
          },
          "skills": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of skills required to complete this job"
          },
          "tagTypeIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Tags here will automatically be applied to jobs booked"
          },
          "priority": {
            "type": "string",
            "description": "Level of urgency for this type of job"
          },
          "duration": {
            "type": "integer",
            "description": "Avg length of time for this job type",
            "format": "int32"
          },
          "soldThreshold": {
            "type": [
              "number",
              "null"
            ],
            "description": "A job is considered as converted if subtotal meets or exceeds this threshold",
            "format": "decimal"
          },
          "class": {
            "type": "string",
            "description": "Let’s you group other job types by class"
          },
          "summary": {
            "type": "string",
            "description": "Text that is automatically added to job summary when booked"
          },
          "noCharge": {
            "type": "boolean",
            "description": "When true, all jobs are considered no charge"
          },
          "enforceRecurringServiceEventSelection": {
            "type": "boolean",
            "description": "When true enforce recurring service event"
          },
          "invoiceSignaturesRequired": {
            "type": "boolean",
            "description": "When true signature is required"
          },
          "externalData": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.ExternalDataUpdateRequest"
              }
            ],
            "description": "External data update model "
          },
          "defaultEstimateSoldAction": {
            "type": "string",
            "description": "Default action when an estimate is sold for this job type"
          },
          "customFieldTypeIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Custom field type IDs to assign to this job type. Order determines display order."
          },
          "customFieldsUpdateMode": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.CustomFieldsUpdateMode"
              },
              {
                "type": "null"
              }
            ],
            "description": "Custom fields update mode.\\\n\"Replace\" (default) replaces all existing custom field type assignments with the provided list.\nIf the job type has custom fields X and Y and only X is provided, Y will be removed.\\\n\"Merge\" preserves existing custom field type assignments and appends any new IDs from the provided list."
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.CustomFieldsUpdateMode": {
        "enum": [
          "Replace",
          "Merge"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Replace",
          "Merge"
        ]
      },
      "Jpm.V2.ProjectResponse": {
        "required": [
          "id",
          "number",
          "customerId",
          "locationId",
          "projectManagerIds",
          "businessUnitIds",
          "createdOn",
          "customFields",
          "externalData",
          "jobIds"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the project",
            "format": "int64"
          },
          "number": {
            "type": "string",
            "description": "Project number"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Project name"
          },
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "description": "Project summary",
            "format": "html"
          },
          "status": {
            "type": [
              "string",
              "null"
            ],
            "description": "Project status"
          },
          "statusId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Project status id",
            "format": "int64"
          },
          "subStatus": {
            "type": [
              "string",
              "null"
            ],
            "description": "Project substatus"
          },
          "subStatusId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Project substatus id",
            "format": "int64"
          },
          "customerId": {
            "type": "integer",
            "description": "ID of the project's customer",
            "format": "int64"
          },
          "locationId": {
            "type": "integer",
            "description": "ID of the project's location",
            "format": "int64"
          },
          "projectTypeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the project's type",
            "format": "int64"
          },
          "projectManagerIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of project managers for the project."
          },
          "businessUnitIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of business units for the project."
          },
          "startDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Start date of the project",
            "format": "date-time"
          },
          "targetCompletionDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Target completion date of the project",
            "format": "date-time"
          },
          "actualCompletionDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Actual completion date of the project",
            "format": "date-time"
          },
          "contractStartDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date the project's contract starts",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "Projects last modification date",
            "format": "date-time"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) when the project was created",
            "format": "date-time"
          },
          "customFields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomFieldApiModel"
            },
            "description": "Custom fields on the project"
          },
          "externalData": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ExternalDataModel"
            },
            "description": "List of external data attached to this project,\nthat corresponds to the application guid provided in the request."
          },
          "jobIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "List of jobs associated with this project."
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Jpm.V2.ProjectResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ProjectResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.CreateProjectRequest": {
        "required": [
          "locationId"
        ],
        "type": "object",
        "properties": {
          "locationId": {
            "type": "integer",
            "description": "ID of the project's location",
            "format": "int64"
          },
          "customerId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the project's customer",
            "format": "int64"
          },
          "projectTypeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the project's type",
            "format": "int64"
          },
          "projectManagerIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of the project's managers"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Project name"
          },
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "description": "Project summary",
            "format": "html"
          },
          "statusId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Project status id",
            "format": "int64"
          },
          "subStatusId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Project sub status id",
            "format": "int64"
          },
          "startDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Start date of the project",
            "format": "date-time"
          },
          "targetCompletionDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Target completion date of the project",
            "format": "date-time"
          },
          "actualCompletionDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Actual completion date of the project",
            "format": "date-time"
          },
          "customFields": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.CustomFieldCreateOrUpdateModel"
            },
            "description": "Project record’s custom fields"
          },
          "externalData": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.ExternalDataCreateRequest"
              },
              {
                "type": "null"
              }
            ],
            "description": "Optional model that contains a list of external data items\nthat should be attached to this project."
          },
          "businessUnitIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of business units for the project."
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.CustomFieldCreateOrUpdateModel": {
        "required": [
          "typeId",
          "value"
        ],
        "type": "object",
        "properties": {
          "typeId": {
            "type": "integer",
            "description": "ID of the custom field",
            "format": "int64"
          },
          "value": {
            "type": "string",
            "description": "Value of the custom field"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.UpdateProjectRequest": {
        "type": "object",
        "properties": {
          "projectManagerIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of the project's managers"
          },
          "jobIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of the project's jobs"
          },
          "businessUnitIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "IDs of business units for the project. "
          },
          "name": {
            "type": "string",
            "description": "Project name"
          },
          "summary": {
            "type": "string",
            "description": "Project summary",
            "format": "html"
          },
          "statusId": {
            "type": "integer",
            "description": "Project status id",
            "format": "int64"
          },
          "subStatusId": {
            "type": "integer",
            "description": "Project sub status id",
            "format": "int64"
          },
          "projectTypeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Project type id",
            "format": "int64"
          },
          "startDate": {
            "type": "string",
            "description": "Start date of the project",
            "format": "date-time"
          },
          "targetCompletionDate": {
            "type": "string",
            "description": "Target completion date of the project",
            "format": "date-time"
          },
          "actualCompletionDate": {
            "type": "string",
            "description": "Actual completion date of the project",
            "format": "date-time"
          },
          "customFields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.CustomFieldCreateOrUpdateModel"
            },
            "description": "Project record’s custom fields"
          },
          "externalData": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Jpm.V2.ExternalDataUpdateRequest"
              }
            ],
            "description": "External data update model."
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.ProjectNoteCreateRequest": {
        "required": [
          "text"
        ],
        "type": "object",
        "properties": {
          "text": {
            "minLength": 1,
            "type": "string",
            "description": "Text content of job note"
          },
          "pinToTop": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether to pin job note to the top"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Jpm.V2.ProjectStatusResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ProjectStatusResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.ProjectStatusResponse": {
        "required": [
          "id",
          "name",
          "order",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the project status",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the project status"
          },
          "order": {
            "type": "integer",
            "description": "Order of the project status",
            "format": "int32"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (in UTC) when project status was last modified",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Jpm.V2.ProjectSubStatusResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ProjectSubStatusResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Jpm.V2.ProjectSubStatusResponse": {
        "required": [
          "id",
          "name",
          "statusId",
          "order",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the project sub status",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the project sub status"
          },
          "statusId": {
            "type": "integer",
            "description": "Id of the parent status",
            "format": "int64"
          },
          "order": {
            "type": "integer",
            "description": "Order of the project status",
            "format": "int32"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (in UTC) when project sub status was last modified",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "When true, project sub status is active"
          }
        },
        "additionalProperties": false
      },
      "Jpm.V2.ProjectTypeResponse": {
        "required": [
          "id",
          "name",
          "description"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The unique identifier of the project type.",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "The name of the project type."
          },
          "description": {
            "type": "string",
            "description": "The description of the project type."
          },
          "createdById": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The ID of the user who created this project type.",
            "format": "int64"
          }
        },
        "additionalProperties": false,
        "description": "Represents a project type."
      },
      "PaginatedResponse_Of_Jpm.V2.ProjectTypeResponse": {
        "required": [
          "page",
          "pageSize",
          "hasMore",
          "data"
        ],
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "From which page this output has started",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size for this query (i.e. how many records were requested to return)",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "True if there are more records in the query than returned in this result"
          },
          "totalCount": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total count of records for this query (can optionally be populated)",
            "format": "int32"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Jpm.V2.ProjectTypeResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      }
    },
    "securitySchemes": {
      "apiKeyHeader": {
        "type": "apiKey",
        "name": "ST-App-Key",
        "in": "header",
        "description": "ServiceTitan App Key Header"
      },
      "oauth": {
        "type": "oauth2",
        "description": "OAuth 2.0 Client Credentials Flow",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://auth.servicetitan.io/connect/token",
            "scopes": {
              "tn.jpm.appointments:r": "Job Planning and Management → Appointments (Read)",
              "tn.jpm.appointments:w": "Job Planning and Management → Appointments (Write)",
              "tn.jpm.segments:r": "Job Planning and Management → Budget Code Segments (Read)",
              "tn.jpm.budgetcodes:r": "Job Planning and Management → Budget Codes (Read)",
              "tn.jpm.budgetcodes:w": "Job Planning and Management → Budget Codes (Write)",
              "tn.jpm.projects:r": "Job Planning and Management → Projects (Read)",
              "tn.jpm.projects:w": "Job Planning and Management → Projects (Write)",
              "tn.jpm.jobs:r": "Job Planning and Management → Jobs (Read)",
              "tn.jpm.jobcanceledlogs:r": "Job Planning and Management → Job Canceled Logs (Read)",
              "tn.jpm.jobnotes:r": "Job Planning and Management → Job Notes (Read)",
              "tn.jpm.projectnotes:r": "Job Planning and Management → Project Notes (Read)",
              "tn.jpm.jobhistory:r": "Job Planning and Management → Job History (Read)",
              "tn.jpm.jobcancelreasons:r": "Job Planning and Management → Job Cancel Reasons (Read)",
              "tn.jpm.jobs:w": "Job Planning and Management → Jobs (Write)",
              "tn.jpm.jobholdreasons:r": "Job Planning and Management → Job Hold Reasons (Read)",
              "tn.jpm.jobtypes:r": "Job Planning and Management → Job Types (Read)",
              "tn.jpm.jobtypes:w": "Job Planning and Management → Job Types (Write)",
              "tn.jpm.projectstatuses:r": "Job Planning and Management → Project Statuses (Read)",
              "tn.jpm.projectsubstatuses:r": "Job Planning and Management → Project Sub-Statuses (Read)",
              "tn.jpm.projecttypes:r": "Job Planning and Management → Project Types (Read)"
            }
          }
        }
      }
    }
  }
}