{
  "openapi": "3.1.0",
  "info": {
    "title": "Payroll",
    "description": "Activity codes, employee payrolls, gross pay items, non-job timesheets, payrolls, payroll adjustments, payroll jobs, payroll locations, payroll settings, technician payrolls, timesheet codes",
    "version": "1.0"
  },
  "servers": [
    {
      "url": "https://api.servicetitan.io/payroll/v2",
      "description": "Production"
    },
    {
      "url": "https://api-integration.servicetitan.io/payroll/v2",
      "description": "Integration"
    }
  ],
  "paths": {
    "/tenant/{tenant}/export/jobs/splits": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for job splits",
        "operationId": "Export_JobSplits",
        "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_Payroll.V2.JobSplits.JobSplitExportResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "id": 0,
                      "jobId": 0,
                      "technicianId": 0,
                      "split": 0,
                      "createdOn": "string",
                      "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.prl.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/payroll-adjustments": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for payroll adjustments",
        "operationId": "Export_PayrollAdjustments",
        "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_Payroll.V2.PayrollAdjustments.PayrollAdjustmentExportResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "id": 0,
                      "employeeType": {},
                      "employeeId": 0,
                      "postedOn": "string",
                      "amount": 0,
                      "memo": "string",
                      "activityCodeId": 0,
                      "invoiceId": 0,
                      "businessUnitId": 0,
                      "hours": 0,
                      "rate": 0,
                      "quantity": 0,
                      "type": {},
                      "createdOn": "string",
                      "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.prl.payrolladjustments:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/jobs/timesheets": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for job timesheets",
        "operationId": "Export_Timesheets",
        "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_Payroll.V2.Timesheets.JobTimesheetExportResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "id": 0,
                      "jobId": 0,
                      "appointmentId": 0,
                      "technicianId": 0,
                      "dispatchedOn": "string",
                      "arrivedOn": "string",
                      "canceledOn": "string",
                      "doneOn": "string",
                      "createdOn": "string",
                      "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.prl.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/activity-codes": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for activity codes",
        "operationId": "Export_ActivityCodes",
        "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_Payroll.V2.PayrollActivityCodes.PayrollActivityCodeExportResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "code": "string",
                      "earningCategory": {},
                      "createdOn": "string",
                      "modifiedOn": "string",
                      "isDiscretionary": 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.prl.activitycodes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/timesheet-codes": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for timesheet codes",
        "operationId": "Export_TimesheetCodes",
        "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_Payroll.V2.TimesheetCodes.TimesheetCodeExportResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "id": 0,
                      "code": "string",
                      "description": "string",
                      "type": {},
                      "applicableEmployeeType": {},
                      "rateInfo": {
                        "hourlyRate": {},
                        "customHourlyRate": 0,
                        "rateMultiplier": 0
                      },
                      "createdOn": "string",
                      "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.prl.timesheetcodes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/gross-pay-items": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for gross pay items",
        "operationId": "Export_GrossPayItems",
        "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_Payroll.V2.GrossPayItems.GrossPayItemExportResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "id": 0,
                      "employeeId": 0,
                      "employeeType": {},
                      "businessUnitName": "string",
                      "payrollId": 0,
                      "employeePayrollId": "string",
                      "date": "string",
                      "activity": "string",
                      "activityCodeId": 0,
                      "activityCode": "string",
                      "amount": 0,
                      "amountAdjustment": 0,
                      "payoutBusinessUnitName": "string",
                      "grossPayItemType": {},
                      "startedOn": "string",
                      "endedOn": "string",
                      "paidDurationHours": 0,
                      "paidTimeType": {},
                      "sourceEntityId": 0,
                      "jobId": 0,
                      "jobNumber": "string",
                      "jobTypeName": "string",
                      "projectNumber": "string",
                      "projectId": 0,
                      "invoiceId": 0,
                      "invoiceNumber": "string",
                      "invoiceItemId": 0,
                      "customerId": 0,
                      "customerName": "string",
                      "locationId": 0,
                      "locationName": "string",
                      "locationAddress": "string",
                      "locationZip": "string",
                      "zoneName": "string",
                      "taxZoneName": "string",
                      "laborTypeId": 0,
                      "laborTypeCode": "string",
                      "budgetCodeId": 0,
                      "isPrevailingWageJob": true,
                      "memo": "string",
                      "createdOn": "string",
                      "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.prl.grosspayitems:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/payroll-settings": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for payroll settings",
        "operationId": "Export_PayrollSettings",
        "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_Payroll.V2.PayrollSettings.PayrollSettingsExportResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "employeeId": 0,
                      "employeeType": {},
                      "externalPayrollId": "string",
                      "hourlyRate": 0,
                      "managerId": 0,
                      "payrollBusinessUnitId": 0,
                      "isIncludedInPayroll": true,
                      "hireDate": "string",
                      "createdOn": "string",
                      "modifiedOn": "string",
                      "active": true,
                      "payType": {},
                      "customFields": [
                        {
                          "typeId": 0,
                          "name": "string",
                          "value": "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.prl.payrollsettings:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/gross-pay-items": {
      "post": {
        "tags": [
          "GrossPayItems"
        ],
        "summary": "Creates new gross pay item",
        "operationId": "GrossPayItems_Create",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The gross pay item model to create",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Payroll.V2.GrossPayItems.GrossPayItemCreateRequest"
              },
              "example": {
                "payrollId": 0,
                "amount": 0,
                "activityCodeId": 0,
                "date": "string",
                "invoiceId": 0,
                "budgetCodeId": 0,
                "businessUnitId": 0,
                "memo": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModificationResponse"
                },
                "example": {
                  "id": 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.prl.grosspayitems:w"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "GrossPayItems"
        ],
        "summary": "Gets a list of gross pay items",
        "operationId": "GrossPayItems_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": "employeeType",
            "in": "query",
            "description": "The type of employee\\\nValues: [Technician, Employee]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
                }
              ]
            }
          },
          {
            "name": "employeeId",
            "in": "query",
            "description": "The Employee ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "payrollIds",
            "in": "query",
            "description": "The payroll ID",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dateOnOrAfter",
            "in": "query",
            "description": "Return items having date after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "dateOnOrBefore",
            "in": "query",
            "description": "Return items having date 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": "createdBefore",
            "in": "query",
            "description": "Return items created 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": "modifiedOnOrBefore",
            "in": "query",
            "description": "Return items modified on or before 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": "sort",
            "in": "query",
            "description": "Applies sorting by specified fields",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Payroll.V2.GrossPayItems.GrossPayItemResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "employeeId": 0,
                      "employeeType": {},
                      "businessUnitName": "string",
                      "payrollId": 0,
                      "employeePayrollId": "string",
                      "date": "string",
                      "activity": "string",
                      "activityCodeId": 0,
                      "activityCode": "string",
                      "amount": 0,
                      "amountAdjustment": 0,
                      "payoutBusinessUnitName": "string",
                      "grossPayItemType": {},
                      "startedOn": "string",
                      "endedOn": "string",
                      "paidDurationHours": 0,
                      "paidTimeType": {},
                      "sourceEntityId": 0,
                      "jobId": 0,
                      "jobNumber": "string",
                      "jobTypeName": "string",
                      "projectNumber": "string",
                      "projectId": 0,
                      "invoiceId": 0,
                      "invoiceNumber": "string",
                      "invoiceItemId": 0,
                      "customerId": 0,
                      "customerName": "string",
                      "locationId": 0,
                      "locationName": "string",
                      "locationAddress": "string",
                      "locationZip": "string",
                      "zoneName": "string",
                      "taxZoneName": "string",
                      "laborTypeId": 0,
                      "laborTypeCode": "string",
                      "budgetCodeId": 0,
                      "isPrevailingWageJob": true,
                      "memo": "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.prl.grosspayitems:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/gross-pay-items/{id}": {
      "put": {
        "tags": [
          "GrossPayItems"
        ],
        "summary": "Update specified gross pay item",
        "operationId": "GrossPayItems_Update",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The gross pay item 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 gross pay item model to update",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Payroll.V2.GrossPayItems.GrossPayItemUpdateRequest"
              },
              "example": {
                "payrollId": 0,
                "amount": 0,
                "activityCodeId": 0,
                "date": "string",
                "invoiceId": 0,
                "budgetCodeId": 0,
                "businessUnitId": 0,
                "memo": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModificationResponse"
                },
                "example": {
                  "id": 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.prl.grosspayitems:w"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "GrossPayItems"
        ],
        "summary": "Delete specified gross pay item",
        "operationId": "GrossPayItems_Delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The gross pay item 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.prl.grosspayitems:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/{job}/splits": {
      "get": {
        "tags": [
          "JobSplits"
        ],
        "summary": "Gets a list of job splits",
        "operationId": "JobSplits_GetList",
        "parameters": [
          {
            "name": "job",
            "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",
            "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": "createdOnOrAfter",
            "in": "query",
            "description": "Returns job split created on or after a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return job splits created before a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Returns job split modified on or after a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Returns job split modified before a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "Returns job split by active status\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "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_Payroll.V2.JobSplits.JobSplitResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "jobId": 0,
                      "technicianId": 0,
                      "split": 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": {}
                }
              }
            }
          },
          "409": {
            "description": "Unknown job ID was specified",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.prl.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/splits": {
      "get": {
        "tags": [
          "JobSplits"
        ],
        "summary": "Gets a list of job splits by multiple jobs",
        "operationId": "JobSplits_GetListByJobs",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "jobIds",
            "in": "query",
            "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": "createdOnOrAfter",
            "in": "query",
            "description": "Returns job split created on or after a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return job splits created before a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Returns job split modified on or after a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Returns job split modified before a certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "Returns job split by active status\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "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_Payroll.V2.JobSplits.JobSplitResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "jobId": 0,
                      "technicianId": 0,
                      "split": 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": {}
                }
              }
            }
          },
          "409": {
            "description": "Unknown job ID was specified",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.prl.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/labor-types": {
      "get": {
        "tags": [
          "LaborTypes"
        ],
        "summary": "Gets a list of payroll labor types",
        "operationId": "LaborTypes_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": "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 (only active items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by specified fields",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Payroll.V2.LaborTypes.LaborTypeResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "code": "string",
                      "serviceCodeId": 0,
                      "active": true,
                      "createdOn": "string",
                      "modifiedOn": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Payroll Labor Types are not enabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.prl.labortypes:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "LaborTypes"
        ],
        "summary": "Creates a payroll labor type",
        "operationId": "LaborTypes_Create",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The labor type fields to create",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Payroll.V2.LaborTypes.LaborTypeCreateRequest"
              },
              "example": {
                "name": "string",
                "code": "string",
                "serviceCodeId": 0,
                "active": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModificationResponse"
                },
                "example": {
                  "id": 0
                }
              }
            }
          },
          "400": {
            "description": "Payroll Labor Types are not enabled, or a required field (name, code) is missing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "409": {
            "description": "The code or name is already in use, or serviceCodeId does not reference a valid labor service",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.prl.labortypes:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/labor-types/{id}": {
      "get": {
        "tags": [
          "LaborTypes"
        ],
        "summary": "Gets payroll labor type specified by ID",
        "operationId": "LaborTypes_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the payroll labor type",
            "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/Payroll.V2.LaborTypes.LaborTypeResponse"
                },
                "example": {
                  "id": 0,
                  "name": "string",
                  "code": "string",
                  "serviceCodeId": 0,
                  "active": true,
                  "createdOn": "string",
                  "modifiedOn": "string"
                }
              }
            }
          },
          "400": {
            "description": "Payroll Labor Types are not enabled",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Payroll labor type 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.prl.labortypes:r"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "LaborTypes"
        ],
        "summary": "Replaces the payroll labor type specified by ID. This is a full update: the request body must carry\nthe complete desired state. All fields are required except serviceCodeId, which is the only field\nyou may omit — omitting it clears the labor type's service code.",
        "operationId": "LaborTypes_Update",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the payroll labor type",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The labor type fields to apply",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Payroll.V2.LaborTypes.LaborTypeUpdateRequest"
              },
              "example": {
                "name": "string",
                "code": "string",
                "serviceCodeId": 0,
                "active": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModificationResponse"
                },
                "example": {
                  "id": 0
                }
              }
            }
          },
          "400": {
            "description": "Payroll Labor Types are not enabled, or a required field (name, code, active) is missing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "Payroll labor type was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "409": {
            "description": "The code or name is already in use, serviceCodeId does not reference a valid labor service, or the labor type is an active technician's default and cannot be deactivated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.prl.labortypes:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/locations/rates": {
      "get": {
        "tags": [
          "LocationLaborType"
        ],
        "summary": "Gets a list of location hourly rates by multiple locations",
        "operationId": "LocationLaborType_GetListByLocations",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "locationIds",
            "in": "query",
            "description": "Returns location rates for the specified location IDs",
            "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": "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": "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: Location (sorts by locations Id), CreatedOn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Payroll.V2.LocationLaborTypes.LocationLaborTypeResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "locationId": 0,
                      "hourlyRate": 0,
                      "laborTypeName": "string",
                      "laborTypeCode": "string",
                      "createdOn": "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": {}
                }
              }
            }
          },
          "409": {
            "description": "Unknown location ID was specified",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.prl.locations:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/activity-codes": {
      "get": {
        "tags": [
          "ActivityCodes"
        ],
        "summary": "Gets a list of payroll activity codes",
        "operationId": "ActivityCodes_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": "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 (only active items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by specified fields",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Payroll.V2.PayrollActivityCodes.PayrollActivityCodeResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "name": "string",
                      "code": "string",
                      "earningCategory": {},
                      "createdOn": "string",
                      "modifiedOn": "string",
                      "isDiscretionary": 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.prl.activitycodes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/activity-codes/{id}": {
      "get": {
        "tags": [
          "ActivityCodes"
        ],
        "summary": "Gets payroll activity code specified by ID",
        "operationId": "ActivityCodes_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID of the payroll activity code",
            "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/Payroll.V2.PayrollActivityCodes.PayrollActivityCodeResponse"
                },
                "example": {
                  "id": 0,
                  "name": "string",
                  "code": "string",
                  "earningCategory": {},
                  "createdOn": "string",
                  "modifiedOn": "string",
                  "isDiscretionary": 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": {}
                }
              }
            }
          },
          "404": {
            "description": "Payroll activity code 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.prl.activitycodes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/payroll-adjustments": {
      "post": {
        "tags": [
          "PayrollAdjustments"
        ],
        "summary": "Creates new payroll adjustment",
        "operationId": "PayrollAdjustments_Create",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The payroll adjustment model to create",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Payroll.V2.PayrollAdjustments.PayrollAdjustmentCreateRequest"
              },
              "example": {
                "employeeType": {},
                "employeeId": 0,
                "postedOn": "string",
                "amount": 0,
                "memo": "string",
                "activityCodeId": 0,
                "invoiceId": 0,
                "businessUnitId": 0,
                "hours": 0,
                "rate": 0,
                "quantity": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModificationResponse"
                },
                "example": {
                  "id": 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.prl.payrolladjustments:w"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "PayrollAdjustments"
        ],
        "summary": "Gets a list of payroll adjustments",
        "operationId": "PayrollAdjustments_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": "employeeIds",
            "in": "query",
            "description": "The comma separated list of employee IDs",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "postedOnOrAfter",
            "in": "query",
            "description": "Return payroll adjustments posted on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "postedOnOrBefore",
            "in": "query",
            "description": "Return payroll adjustments posted on or before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "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": "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 specified fields",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Payroll.V2.PayrollAdjustments.PayrollAdjustmentResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "employeeType": {},
                      "employeeId": 0,
                      "postedOn": "string",
                      "amount": 0,
                      "memo": "string",
                      "activityCodeId": 0,
                      "invoiceId": 0,
                      "businessUnitId": 0,
                      "hours": 0,
                      "rate": 0,
                      "quantity": 0,
                      "type": {},
                      "createdOn": "string",
                      "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.prl.payrolladjustments:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/payroll-adjustments/{id}": {
      "get": {
        "tags": [
          "PayrollAdjustments"
        ],
        "summary": "Gets payroll adjustment specified by ID",
        "operationId": "PayrollAdjustments_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of payroll adjustment",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "employeeType",
            "in": "query",
            "description": "The employee type\\\nValues: [Technician, Employee]",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Payroll.V2.PayrollAdjustments.PayrollAdjustmentResponse"
                },
                "example": {
                  "id": 0,
                  "employeeType": {},
                  "employeeId": 0,
                  "postedOn": "string",
                  "amount": 0,
                  "memo": "string",
                  "activityCodeId": 0,
                  "invoiceId": 0,
                  "businessUnitId": 0,
                  "hours": 0,
                  "rate": 0,
                  "quantity": 0,
                  "type": {},
                  "createdOn": "string",
                  "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": "Payroll adjustment 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.prl.payrolladjustments:r"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "PayrollAdjustments"
        ],
        "summary": "Updates payroll adjustment specified by ID",
        "operationId": "PayrollAdjustments_Update",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of payroll adjustment",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "employeeType",
            "in": "query",
            "description": "The employee type\\\nValues: [Technician, Employee]",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
            }
          }
        ],
        "requestBody": {
          "description": "The payroll adjustment model to update",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Payroll.V2.PayrollAdjustments.PayrollAdjustmentUpdateRequest"
              },
              "example": {
                "employeeId": 0,
                "postedOn": "string",
                "amount": 0,
                "memo": "string",
                "activityCodeId": 0,
                "invoiceId": 0,
                "businessUnitId": 0,
                "hours": 0,
                "rate": 0,
                "quantity": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModificationResponse"
                },
                "example": {
                  "id": 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": "Payroll adjustment 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.prl.payrolladjustments:w"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "PayrollAdjustments"
        ],
        "summary": "Deletes payroll adjustment specified by ID",
        "operationId": "PayrollAdjustments_Delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of payroll adjustment",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "employeeType",
            "in": "query",
            "description": "The employee type\\\nValues: [Technician, Employee]",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
            }
          }
        ],
        "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": "Payroll adjustment 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.prl.payrolladjustments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/payrolls": {
      "get": {
        "tags": [
          "Payrolls"
        ],
        "summary": "Gets a list of payrolls",
        "operationId": "Payrolls_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "employeeType",
            "in": "query",
            "description": "The type of employee\\\nValues: [Technician, Employee]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
                }
              ]
            }
          },
          {
            "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": "startedOnOrAfter",
            "in": "query",
            "description": "Return items having start date after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endedOnOrBefore",
            "in": "query",
            "description": "Return items having end date before 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": "approvedOnOrAfter",
            "in": "query",
            "description": "Return items approved on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Return items of the specified payroll status\\\nValues: [Pending, Expired, Approved, Paid, Locked]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Payroll.V2.PayrollStatus"
                }
              ]
            }
          },
          {
            "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": "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": "sort",
            "in": "query",
            "description": "Applies sorting by specified fields",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Payroll.V2.Payrolls.PayrollResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "startedOn": "string",
                      "endedOn": "string",
                      "employeeId": 0,
                      "employeeType": {},
                      "status": {},
                      "burdenRate": 0,
                      "managerApprovedOn": "string",
                      "createdOn": "string",
                      "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": {}
                }
              }
            }
          },
          "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.prl.payrolls:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/technicians/{technician}/payrolls": {
      "get": {
        "tags": [
          "Payrolls"
        ],
        "summary": "Gets a list of technician payrolls",
        "operationId": "Payrolls_GetTechnicianPayrolls",
        "parameters": [
          {
            "name": "technician",
            "in": "path",
            "description": "The technician 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"
            }
          },
          {
            "name": "startedOnOrAfter",
            "in": "query",
            "description": "Return items having start date after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endedOnOrBefore",
            "in": "query",
            "description": "Return items having end date before 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": "approvedOnOrAfter",
            "in": "query",
            "description": "Return items approved on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Return items of the specified payroll status\\\nValues: [Pending, Expired, Approved, Paid, Locked]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Payroll.V2.PayrollStatus"
                }
              ]
            }
          },
          {
            "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": "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": "sort",
            "in": "query",
            "description": "Applies sorting by specified fields",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Payroll.V2.Payrolls.PayrollResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "startedOn": "string",
                      "endedOn": "string",
                      "employeeId": 0,
                      "employeeType": {},
                      "status": {},
                      "burdenRate": 0,
                      "managerApprovedOn": "string",
                      "createdOn": "string",
                      "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": {}
                }
              }
            }
          },
          "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.prl.technicians:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/employees/{employee}/payrolls": {
      "get": {
        "tags": [
          "Payrolls"
        ],
        "summary": "Gets a list of employee payrolls",
        "operationId": "Payrolls_GetEmployeePayrolls",
        "parameters": [
          {
            "name": "employee",
            "in": "path",
            "description": "The employee 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"
            }
          },
          {
            "name": "startedOnOrAfter",
            "in": "query",
            "description": "Return items having start date after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endedOnOrBefore",
            "in": "query",
            "description": "Return items having end date before 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": "approvedOnOrAfter",
            "in": "query",
            "description": "Return items approved on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Return items of the specified payroll status\\\nValues: [Pending, Expired, Approved, Paid, Locked]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Payroll.V2.PayrollStatus"
                }
              ]
            }
          },
          {
            "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": "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": "sort",
            "in": "query",
            "description": "Applies sorting by specified fields",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Payroll.V2.Payrolls.PayrollResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "startedOn": "string",
                      "endedOn": "string",
                      "employeeId": 0,
                      "employeeType": {},
                      "status": {},
                      "burdenRate": 0,
                      "managerApprovedOn": "string",
                      "createdOn": "string",
                      "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": {}
                }
              }
            }
          },
          "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.prl.employees:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/payroll-settings": {
      "get": {
        "tags": [
          "PayrollSettings"
        ],
        "summary": "Gets the payroll settings list",
        "operationId": "PayrollSettings_GetPayrollSettingsList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "employeeType",
            "in": "query",
            "description": "The type of employee\\\nValues: [Technician, Employee]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
                }
              ]
            }
          },
          {
            "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": "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"
                }
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Payroll.V2.PayrollSettings.PayrollSettingsListResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "employeeId": 0,
                      "employeeType": {},
                      "externalPayrollId": "string",
                      "hourlyRate": 0,
                      "managerId": 0,
                      "payrollBusinessUnitId": 0,
                      "isIncludedInPayroll": true,
                      "hireDate": "string",
                      "createdOn": "string",
                      "modifiedOn": "string",
                      "active": true,
                      "payType": {},
                      "customFields": [
                        {
                          "typeId": 0,
                          "name": "string",
                          "value": "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": {}
                }
              }
            }
          },
          "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.prl.payrollsettings:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/employees/{employee}/payroll-settings": {
      "get": {
        "tags": [
          "PayrollSettings"
        ],
        "summary": "Gets the employee payroll settings",
        "operationId": "PayrollSettings_GetEmployeePayrollSettings",
        "parameters": [
          {
            "name": "employee",
            "in": "path",
            "description": "The employee 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/Payroll.V2.PayrollSettings.PayrollSettingsResponse"
                },
                "example": {
                  "employeeId": 0,
                  "employeeType": {},
                  "externalPayrollId": "string",
                  "hourlyRate": 0,
                  "managerId": 0,
                  "payrollBusinessUnitId": 0,
                  "isIncludedInPayroll": true,
                  "hireDate": "string",
                  "createdOn": "string",
                  "modifiedOn": "string",
                  "active": true,
                  "payType": {},
                  "customFields": [
                    {
                      "typeId": 0,
                      "name": "string",
                      "value": "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": {}
                }
              }
            }
          },
          "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.prl.payrollsettings:r"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "PayrollSettings"
        ],
        "summary": "Updates the employee payroll settings",
        "operationId": "PayrollSettings_UpdateEmployeePayrollSettings",
        "parameters": [
          {
            "name": "employee",
            "in": "path",
            "description": "The employee 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 request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Payroll.V2.PayrollSettings.PayrollSettingsUpdateRequest"
              },
              "example": {
                "externalPayrollId": "string",
                "hourlyRate": 0,
                "managerId": 0,
                "payrollBusinessUnitId": 0,
                "hireDate": "string",
                "isIncludedInPayroll": true,
                "payType": {},
                "customFields": [
                  {
                    "typeId": 0,
                    "value": "string"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Payroll.V2.PayrollSettings.PayrollSettingsUpdateResponse"
                },
                "example": {
                  "employeeId": 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.prl.payrollsettings:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/technicians/{technician}/payroll-settings": {
      "get": {
        "tags": [
          "PayrollSettings"
        ],
        "summary": "Gets the technician payroll settings",
        "operationId": "PayrollSettings_GetTechnicianPayrollSettings",
        "parameters": [
          {
            "name": "technician",
            "in": "path",
            "description": "The technician 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/Payroll.V2.PayrollSettings.PayrollSettingsResponse"
                },
                "example": {
                  "employeeId": 0,
                  "employeeType": {},
                  "externalPayrollId": "string",
                  "hourlyRate": 0,
                  "managerId": 0,
                  "payrollBusinessUnitId": 0,
                  "isIncludedInPayroll": true,
                  "hireDate": "string",
                  "createdOn": "string",
                  "modifiedOn": "string",
                  "active": true,
                  "payType": {},
                  "customFields": [
                    {
                      "typeId": 0,
                      "name": "string",
                      "value": "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": {}
                }
              }
            }
          },
          "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.prl.payrollsettings:r"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "PayrollSettings"
        ],
        "summary": "Updates the technician payroll settings",
        "operationId": "PayrollSettings_UpdateTechnicianPayrollSettings",
        "parameters": [
          {
            "name": "technician",
            "in": "path",
            "description": "The technician 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 request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Payroll.V2.PayrollSettings.PayrollSettingsUpdateRequest"
              },
              "example": {
                "externalPayrollId": "string",
                "hourlyRate": 0,
                "managerId": 0,
                "payrollBusinessUnitId": 0,
                "hireDate": "string",
                "isIncludedInPayroll": true,
                "payType": {},
                "customFields": [
                  {
                    "typeId": 0,
                    "value": "string"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Payroll.V2.PayrollSettings.PayrollSettingsUpdateResponse"
                },
                "example": {
                  "employeeId": 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.prl.payrollsettings:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/timesheet-codes": {
      "get": {
        "tags": [
          "TimesheetCodes"
        ],
        "summary": "Gets a list of timesheet codes",
        "operationId": "TimesheetCodes_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "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": "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": "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_Payroll.V2.TimesheetCodes.TimesheetCodeResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "code": "string",
                      "description": "string",
                      "type": {},
                      "applicableEmployeeType": {},
                      "rateInfo": {
                        "hourlyRate": {},
                        "customHourlyRate": 0,
                        "rateMultiplier": 0
                      },
                      "createdOn": "string",
                      "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.prl.timesheetcodes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/timesheet-codes/{id}": {
      "get": {
        "tags": [
          "TimesheetCodes"
        ],
        "summary": "Gets timesheet code specified by ID",
        "operationId": "TimesheetCodes_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The timesheet code 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/Payroll.V2.TimesheetCodes.TimesheetCodeResponse"
                },
                "example": {
                  "id": 0,
                  "code": "string",
                  "description": "string",
                  "type": {},
                  "applicableEmployeeType": {},
                  "rateInfo": {
                    "hourlyRate": {},
                    "customHourlyRate": 0,
                    "rateMultiplier": 0
                  },
                  "createdOn": "string",
                  "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": "Timesheet code 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.prl.timesheetcodes:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/{job}/timesheets": {
      "get": {
        "tags": [
          "Timesheets"
        ],
        "summary": "Gets a list of job timesheets",
        "operationId": "Timesheets_GetJobTimesheets",
        "parameters": [
          {
            "name": "job",
            "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",
            "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": "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": "technicianId",
            "in": "query",
            "description": "The technician ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "startedOn",
            "in": "query",
            "description": "Return items having dispatch, arrive, cancel or done dates after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endedOn",
            "in": "query",
            "description": "Return items having dispatch, arrive, cancel or done dates before 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_Payroll.V2.Timesheets.JobTimesheetResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "jobId": 0,
                      "appointmentId": 0,
                      "technicianId": 0,
                      "dispatchedOn": "string",
                      "arrivedOn": "string",
                      "canceledOn": "string",
                      "doneOn": "string",
                      "createdOn": "string",
                      "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.prl.jobs:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/non-job-timesheets": {
      "get": {
        "tags": [
          "Timesheets"
        ],
        "summary": "Gets a list of non job timesheets for employee",
        "operationId": "Timesheets_GetNonJobTimesheets",
        "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": "employeeId",
            "in": "query",
            "description": "The employee ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "employeeType",
            "in": "query",
            "description": "The employee type\\\nValues: [Technician, Employee]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
                }
              ]
            }
          },
          {
            "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": "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_Payroll.V2.Timesheets.NonJobTimesheetResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "employeeId": 0,
                      "employeeType": {},
                      "timesheetCodeId": 0,
                      "startedOn": "string",
                      "endedOn": "string",
                      "createdOn": "string",
                      "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.prl.nonjobtimesheets:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/jobs/timesheets": {
      "get": {
        "tags": [
          "Timesheets"
        ],
        "summary": "Gets a list of job timesheets by multiple jobs",
        "operationId": "Timesheets_GetJobTimesheetsByJobs",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "jobIds",
            "in": "query",
            "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": "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 (only active items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "name": "technicianId",
            "in": "query",
            "description": "The technician ID",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "startedOn",
            "in": "query",
            "description": "Return items having dispatch, arrive, cancel or done dates after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endedOn",
            "in": "query",
            "description": "Return items having dispatch, arrive, cancel or done dates before 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_Payroll.V2.Timesheets.JobTimesheetResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "jobId": 0,
                      "appointmentId": 0,
                      "technicianId": 0,
                      "dispatchedOn": "string",
                      "arrivedOn": "string",
                      "canceledOn": "string",
                      "doneOn": "string",
                      "createdOn": "string",
                      "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.prl.jobs:r"
            ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "ExportResponse_Of_Payroll.V2.JobSplits.JobSplitExportResponse": {
        "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/Payroll.V2.JobSplits.JobSplitExportResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Payroll.V2.JobSplits.JobSplitExportResponse": {
        "required": [
          "id",
          "jobId",
          "technicianId",
          "split",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The job split ID",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "Job ID",
            "format": "int64"
          },
          "technicianId": {
            "type": "integer",
            "description": "Technician ID",
            "format": "int64"
          },
          "split": {
            "type": "number",
            "description": "The split",
            "format": "decimal"
          },
          "createdOn": {
            "type": "string",
            "description": "The job split creation date/time (on UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the job split was modified",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Whether job split is active"
          }
        },
        "additionalProperties": false
      },
      "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)."
      },
      "ExportResponse_Of_Payroll.V2.PayrollAdjustments.PayrollAdjustmentExportResponse": {
        "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/Payroll.V2.PayrollAdjustments.PayrollAdjustmentExportResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Payroll.V2.PayrollAdjustments.PayrollAdjustmentExportResponse": {
        "required": [
          "id",
          "employeeType",
          "employeeId",
          "postedOn",
          "amount",
          "type",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the payroll adjustment",
            "format": "int64"
          },
          "employeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
              }
            ],
            "description": "Employee type of the payroll adjustment"
          },
          "employeeId": {
            "type": "integer",
            "description": "Employee ID of the payroll adjustment",
            "format": "int64"
          },
          "postedOn": {
            "type": "string",
            "description": "Posted date/time (UTC) of the payroll adjustment",
            "format": "date-time"
          },
          "amount": {
            "type": "number",
            "description": "Amount of the payroll adjustment",
            "format": "decimal"
          },
          "memo": {
            "type": [
              "string",
              "null"
            ],
            "description": "Memo of the payroll adjustment"
          },
          "activityCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Activity code ID of the payroll adjustment",
            "format": "int64"
          },
          "invoiceId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the payroll adjustment invoice",
            "format": "int64"
          },
          "businessUnitId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the payroll adjustment business unit",
            "format": "int64"
          },
          "hours": {
            "type": [
              "number",
              "null"
            ],
            "description": "Hours of the payroll adjustment",
            "format": "decimal"
          },
          "rate": {
            "type": [
              "number",
              "null"
            ],
            "description": "Rate of the payroll adjustment",
            "format": "decimal"
          },
          "quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Quantity of the payroll adjustment",
            "format": "decimal"
          },
          "type": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.PayrollAdjustmentType"
              }
            ],
            "description": "Type of the payroll adjustment"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll adjustment was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll adjustment was modified",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Whether payroll adjustment is active"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.EmployeeType": {
        "enum": [
          "Technician",
          "Employee"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Technician",
          "Employee"
        ]
      },
      "Payroll.V2.PayrollAdjustmentType": {
        "enum": [
          "Direct",
          "CommissionBased",
          "Labor",
          "Advance",
          "SoldAdvance",
          "Scheduled",
          "AddOn",
          "MonthlyBonus",
          "BonusWOT"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Direct",
          "CommissionBased",
          "Labor",
          "Advance",
          "SoldAdvance",
          "Scheduled",
          "AddOn",
          "MonthlyBonus",
          "BonusWOT"
        ]
      },
      "ExportResponse_Of_Payroll.V2.Timesheets.JobTimesheetExportResponse": {
        "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/Payroll.V2.Timesheets.JobTimesheetExportResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Payroll.V2.Timesheets.JobTimesheetExportResponse": {
        "required": [
          "id",
          "jobId",
          "appointmentId",
          "technicianId",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The timesheet ID",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "The job ID",
            "format": "int64"
          },
          "appointmentId": {
            "type": "integer",
            "description": "The appointment ID",
            "format": "int64"
          },
          "technicianId": {
            "type": "integer",
            "description": "The technician ID",
            "format": "int64"
          },
          "dispatchedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "the dispatch date/time (in UTC)",
            "format": "date-time"
          },
          "arrivedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "The arrive date/time (in UTC)",
            "format": "date-time"
          },
          "canceledOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "The cancel date/time (in UTC)",
            "format": "date-time"
          },
          "doneOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "The done date/time (in UTC)",
            "format": "date-time"
          },
          "createdOn": {
            "type": "string",
            "description": "The created date/time (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "The modified date/time (in UTC)",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Whether job timesheet is active"
          }
        },
        "additionalProperties": false
      },
      "ExportResponse_Of_Payroll.V2.PayrollActivityCodes.PayrollActivityCodeExportResponse": {
        "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/Payroll.V2.PayrollActivityCodes.PayrollActivityCodeExportResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Payroll.V2.PayrollActivityCodes.PayrollActivityCodeExportResponse": {
        "required": [
          "id",
          "name",
          "code",
          "earningCategory",
          "createdOn",
          "modifiedOn",
          "isDiscretionary",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the payroll activity code",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the payroll activity code"
          },
          "code": {
            "type": "string",
            "description": "Code of the payroll activity code"
          },
          "earningCategory": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.PayrollEarningCategory"
              }
            ],
            "description": "Earning category of the payroll activity code"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll activity code was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll activity code was modified",
            "format": "date-time"
          },
          "isDiscretionary": {
            "type": "boolean",
            "description": "Indicates whether the earnings code is discretionary (excluded from regular rate of pay calculations)"
          },
          "active": {
            "type": "boolean",
            "description": "Indicates whether the payroll activity code is active"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.PayrollEarningCategory": {
        "enum": [
          "Timesheet",
          "Commission",
          "Reimbursement"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Timesheet",
          "Commission",
          "Reimbursement"
        ]
      },
      "ExportResponse_Of_Payroll.V2.TimesheetCodes.TimesheetCodeExportResponse": {
        "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/Payroll.V2.TimesheetCodes.TimesheetCodeExportResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Payroll.V2.TimesheetCodes.TimesheetCodeExportResponse": {
        "required": [
          "id",
          "code",
          "type",
          "applicableEmployeeType",
          "rateInfo",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the timesheet code",
            "format": "int64"
          },
          "code": {
            "type": "string",
            "description": "Code of the timesheet code"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Description of the timesheet code"
          },
          "type": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.TimesheetCodeType"
              }
            ],
            "description": "Type of the timesheet code"
          },
          "applicableEmployeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.TimesheetCodeEmployeeType"
              }
            ],
            "description": "Application employee type of the timesheet code"
          },
          "rateInfo": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.TimesheetCodes.TimesheetCodeRateInfoResponse"
              }
            ],
            "description": "Rate info of the timesheet code"
          },
          "createdOn": {
            "type": "string",
            "description": "The date when the timesheet code was created (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "The last date when the timesheet code was modified (in UTC)",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Indicates whether the timesheet code is active or not"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.TimesheetCodeType": {
        "enum": [
          "Unpaid",
          "Paid",
          "ClockInOut",
          "PaidTimeOff"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Unpaid",
          "Paid",
          "ClockInOut",
          "PaidTimeOff"
        ]
      },
      "Payroll.V2.TimesheetCodeEmployeeType": {
        "enum": [
          "Technician",
          "Employee",
          "All"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Technician",
          "Employee",
          "All"
        ]
      },
      "Payroll.V2.TimesheetCodes.TimesheetCodeRateInfoResponse": {
        "required": [
          "hourlyRate",
          "rateMultiplier"
        ],
        "type": "object",
        "properties": {
          "hourlyRate": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.TimesheetHourlyRateType"
              }
            ],
            "description": "The hourly rate"
          },
          "customHourlyRate": {
            "type": [
              "number",
              "null"
            ],
            "description": "The custom hourly rate",
            "format": "decimal"
          },
          "rateMultiplier": {
            "type": "number",
            "description": "The rate multiplier",
            "format": "decimal"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.TimesheetHourlyRateType": {
        "enum": [
          "EmployeeHourlyRate",
          "CustomHourlyRate"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "EmployeeHourlyRate",
          "CustomHourlyRate"
        ]
      },
      "ExportResponse_Of_Payroll.V2.GrossPayItems.GrossPayItemExportResponse": {
        "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/Payroll.V2.GrossPayItems.GrossPayItemExportResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Payroll.V2.GrossPayItems.GrossPayItemExportResponse": {
        "required": [
          "payrollId",
          "date",
          "amount",
          "grossPayItemType",
          "jobId",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The gross pay item ID",
            "format": "int64"
          },
          "employeeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The employee/technician ID",
            "format": "int64"
          },
          "employeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
              },
              {
                "type": "null"
              }
            ],
            "description": "The employee type"
          },
          "businessUnitName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The business unit name"
          },
          "payrollId": {
            "type": "integer",
            "description": "The payroll ID",
            "format": "int64"
          },
          "employeePayrollId": {
            "type": [
              "string",
              "null"
            ],
            "description": "Employee/Technician payroll ID"
          },
          "date": {
            "type": "string",
            "description": "The date (UTC) of the gross pay item",
            "format": "date-time"
          },
          "activity": {
            "type": [
              "string",
              "null"
            ],
            "description": "The activity"
          },
          "activityCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The payroll activity code ID",
            "format": "int64"
          },
          "activityCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "The payroll activity code name"
          },
          "amount": {
            "type": "number",
            "description": "The amount",
            "format": "decimal"
          },
          "amountAdjustment": {
            "type": [
              "number",
              "null"
            ],
            "description": "The amount adjustment",
            "format": "decimal"
          },
          "payoutBusinessUnitName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The payout business unit name"
          },
          "grossPayItemType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.GrossPayItemType"
              }
            ],
            "description": "Type of the gross pay item"
          },
          "startedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "The start time (UTC)",
            "format": "date-time"
          },
          "endedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "The end time (UTC)",
            "format": "date-time"
          },
          "paidDurationHours": {
            "type": [
              "number",
              "null"
            ],
            "description": "The paid duration in hours",
            "format": "decimal"
          },
          "paidTimeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.PaidTimeType"
              },
              {
                "type": "null"
              }
            ],
            "description": "Type of the paid time"
          },
          "sourceEntityId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The source entity ID.\nWhen the GrossPayItemType is TimesheetTime, this is the Timesheet Activity ID.",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "The job ID",
            "format": "int64"
          },
          "jobNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "The job number"
          },
          "jobTypeName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the job type"
          },
          "projectNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "The project number"
          },
          "projectId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The project ID",
            "format": "int64"
          },
          "invoiceId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The invoice ID",
            "format": "int64"
          },
          "invoiceNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "The invoice number"
          },
          "invoiceItemId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The invoice item ID",
            "format": "int64"
          },
          "customerId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The customer ID",
            "format": "int64"
          },
          "customerName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The customer name"
          },
          "locationId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The location ID",
            "format": "int64"
          },
          "locationName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The location name"
          },
          "locationAddress": {
            "type": [
              "string",
              "null"
            ],
            "description": "The location address"
          },
          "locationZip": {
            "type": [
              "string",
              "null"
            ],
            "description": "The location zip"
          },
          "zoneName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The zone name"
          },
          "taxZoneName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The tax zone name"
          },
          "laborTypeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the labor type",
            "format": "int64"
          },
          "laborTypeCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "Code of the labor type"
          },
          "budgetCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The budget code ID",
            "format": "int64"
          },
          "isPrevailingWageJob": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Defines whether it's a prevailing wage job"
          },
          "memo": {
            "type": [
              "string",
              "null"
            ],
            "description": "The short message"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the gross pay item was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the gross pay item was modified",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Whether gross pay item is active"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.GrossPayItemType": {
        "enum": [
          "InvoiceRelatedBonus",
          "TimesheetTime",
          "CustomBonus",
          "Salary",
          "Reimbursement"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "InvoiceRelatedBonus",
          "TimesheetTime",
          "CustomBonus",
          "Salary",
          "Reimbursement"
        ]
      },
      "Payroll.V2.PaidTimeType": {
        "enum": [
          "Regular",
          "Overtime",
          "DoubleOvertime",
          "PaidTimeOff"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Regular",
          "Overtime",
          "DoubleOvertime",
          "PaidTimeOff"
        ]
      },
      "ExportResponse_Of_Payroll.V2.PayrollSettings.PayrollSettingsExportResponse": {
        "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/Payroll.V2.PayrollSettings.PayrollSettingsExportResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Payroll.V2.PayrollSettings.PayrollSettingsExportResponse": {
        "required": [
          "employeeId",
          "employeeType",
          "hourlyRate",
          "isIncludedInPayroll",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "employeeId": {
            "type": "integer",
            "description": "The employee ID",
            "format": "int64"
          },
          "employeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
              }
            ],
            "description": "The type of employee"
          },
          "externalPayrollId": {
            "type": [
              "string",
              "null"
            ],
            "description": "The external payroll ID"
          },
          "hourlyRate": {
            "type": "number",
            "description": "The hourly rate",
            "format": "decimal"
          },
          "managerId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The ID of the manager",
            "format": "int64"
          },
          "payrollBusinessUnitId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The ID of the payroll business unit (employee only)",
            "format": "int64"
          },
          "isIncludedInPayroll": {
            "type": "boolean",
            "description": "Indicates if the employee should be included in payroll processing"
          },
          "hireDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "The hire date",
            "format": "date-time"
          },
          "createdOn": {
            "type": "string",
            "description": "The date the record was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "The date the record was last modified",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "The active status of the record"
          },
          "payType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.TechnicianPayTypeModel"
              },
              {
                "type": "null"
              }
            ],
            "description": "The pay type (technician only)."
          },
          "customFields": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Payroll.V2.PayrollSettings.PayrollCustomFieldResponse"
            },
            "description": "Custom payroll fields and their values (technician only)"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.TechnicianPayTypeModel": {
        "enum": [
          "Both",
          "Commission",
          "Timesheet"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Both",
          "Commission",
          "Timesheet"
        ]
      },
      "Payroll.V2.PayrollSettings.PayrollCustomFieldResponse": {
        "required": [
          "typeId"
        ],
        "type": "object",
        "properties": {
          "typeId": {
            "type": "integer",
            "description": "The custom field type ID (definition ID)",
            "format": "int64"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "The custom field name (human-readable label)"
          },
          "value": {
            "type": [
              "string",
              "null"
            ],
            "description": "The custom field value"
          }
        },
        "additionalProperties": false
      },
      "ModificationResponse": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The ID of created/updated object",
            "format": "int64"
          }
        },
        "additionalProperties": false,
        "description": "Default response when creating object with a new ID, or updating object by specified ID."
      },
      "Payroll.V2.GrossPayItems.GrossPayItemCreateRequest": {
        "required": [
          "payrollId",
          "amount",
          "activityCodeId",
          "date"
        ],
        "type": "object",
        "properties": {
          "payrollId": {
            "type": "integer",
            "description": "The payroll ID",
            "format": "int64"
          },
          "amount": {
            "type": "number",
            "description": "Amount of the gross pay item",
            "format": "decimal"
          },
          "activityCodeId": {
            "type": "integer",
            "description": "The ID of the activity code",
            "format": "int64"
          },
          "date": {
            "type": "string",
            "description": "Date of the gross pay item",
            "format": "date-time"
          },
          "invoiceId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The invoice ID",
            "format": "int64"
          },
          "budgetCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The budget code ID",
            "format": "int64"
          },
          "businessUnitId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The business unit ID to use as the payout business unit. If not provided, existing default\nbehavior applies (employee/technician business unit if no invoice; invoice business unit if an invoice is set).",
            "format": "int64"
          },
          "memo": {
            "type": [
              "string",
              "null"
            ],
            "description": "The memo if gross pay item"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.GrossPayItems.GrossPayItemUpdateRequest": {
        "required": [
          "payrollId",
          "amount",
          "activityCodeId",
          "date"
        ],
        "type": "object",
        "properties": {
          "payrollId": {
            "type": "integer",
            "description": "The payroll ID",
            "format": "int64"
          },
          "amount": {
            "type": "number",
            "description": "Amount of the gross pay item",
            "format": "decimal"
          },
          "activityCodeId": {
            "type": "integer",
            "description": "The ID of the activity code",
            "format": "int64"
          },
          "date": {
            "type": "string",
            "description": "Date of the gross pay item",
            "format": "date-time"
          },
          "invoiceId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The invoice ID",
            "format": "int64"
          },
          "budgetCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The budget code ID",
            "format": "int64"
          },
          "businessUnitId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The business unit ID to use as the payout business unit. If not provided, existing default\nbehavior applies (employee/technician business unit if no invoice; invoice business unit if an invoice is set).",
            "format": "int64"
          },
          "memo": {
            "type": [
              "string",
              "null"
            ],
            "description": "The memo if gross pay item"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Payroll.V2.GrossPayItems.GrossPayItemResponse": {
        "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/Payroll.V2.GrossPayItems.GrossPayItemResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Payroll.V2.GrossPayItems.GrossPayItemResponse": {
        "required": [
          "payrollId",
          "date",
          "amount",
          "grossPayItemType",
          "jobId",
          "createdOn",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The gross pay item ID",
            "format": "int64"
          },
          "employeeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The employee/technician ID",
            "format": "int64"
          },
          "employeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
              },
              {
                "type": "null"
              }
            ],
            "description": "The employee type"
          },
          "businessUnitName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The business unit name"
          },
          "payrollId": {
            "type": "integer",
            "description": "The payroll ID",
            "format": "int64"
          },
          "employeePayrollId": {
            "type": [
              "string",
              "null"
            ],
            "description": "Employee/Technician payroll ID"
          },
          "date": {
            "type": "string",
            "description": "The date (UTC) of the gross pay item",
            "format": "date-time"
          },
          "activity": {
            "type": [
              "string",
              "null"
            ],
            "description": "The activity"
          },
          "activityCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The payroll activity code ID",
            "format": "int64"
          },
          "activityCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "The payroll activity code name"
          },
          "amount": {
            "type": "number",
            "description": "The amount",
            "format": "decimal"
          },
          "amountAdjustment": {
            "type": [
              "number",
              "null"
            ],
            "description": "The amount adjustment",
            "format": "decimal"
          },
          "payoutBusinessUnitName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The payout business unit name"
          },
          "grossPayItemType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.GrossPayItemType"
              }
            ],
            "description": "Type of the gross pay item"
          },
          "startedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "The start time (UTC)",
            "format": "date-time"
          },
          "endedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "The end time (UTC)",
            "format": "date-time"
          },
          "paidDurationHours": {
            "type": [
              "number",
              "null"
            ],
            "description": "The paid duration in hours",
            "format": "decimal"
          },
          "paidTimeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.PaidTimeType"
              },
              {
                "type": "null"
              }
            ],
            "description": "Type of the paid time"
          },
          "sourceEntityId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The source entity ID.\nWhen the GrossPayItemType is TimesheetTime, this is the Timesheet Activity ID.",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "The job ID",
            "format": "int64"
          },
          "jobNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "The job number"
          },
          "jobTypeName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the job type"
          },
          "projectNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "The project number"
          },
          "projectId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The project ID",
            "format": "int64"
          },
          "invoiceId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The invoice ID",
            "format": "int64"
          },
          "invoiceNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "The invoice number"
          },
          "invoiceItemId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The invoice item ID",
            "format": "int64"
          },
          "customerId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The customer ID",
            "format": "int64"
          },
          "customerName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The customer name"
          },
          "locationId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The location ID",
            "format": "int64"
          },
          "locationName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The location name"
          },
          "locationAddress": {
            "type": [
              "string",
              "null"
            ],
            "description": "The location address"
          },
          "locationZip": {
            "type": [
              "string",
              "null"
            ],
            "description": "The location zip"
          },
          "zoneName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The zone name"
          },
          "taxZoneName": {
            "type": [
              "string",
              "null"
            ],
            "description": "The tax zone name"
          },
          "laborTypeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the labor type",
            "format": "int64"
          },
          "laborTypeCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "Code of the labor type"
          },
          "budgetCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The budget code ID",
            "format": "int64"
          },
          "isPrevailingWageJob": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Defines whether it's a prevailing wage job"
          },
          "memo": {
            "type": [
              "string",
              "null"
            ],
            "description": "The short message"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the gross pay item was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the gross pay item was modified",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Payroll.V2.JobSplits.JobSplitResponse": {
        "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/Payroll.V2.JobSplits.JobSplitResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Payroll.V2.JobSplits.JobSplitResponse": {
        "required": [
          "id",
          "jobId",
          "technicianId",
          "split",
          "createdOn",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The job split ID",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "Job ID",
            "format": "int64"
          },
          "technicianId": {
            "type": "integer",
            "description": "Technician ID",
            "format": "int64"
          },
          "split": {
            "type": "number",
            "description": "The split",
            "format": "decimal"
          },
          "createdOn": {
            "type": "string",
            "description": "The job split creation date/time (on UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the job split was modified",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "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"
        ]
      },
      "PaginatedResponse_Of_Payroll.V2.LaborTypes.LaborTypeResponse": {
        "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/Payroll.V2.LaborTypes.LaborTypeResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Payroll.V2.LaborTypes.LaborTypeResponse": {
        "required": [
          "id",
          "active",
          "createdOn",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the payroll labor type",
            "format": "int64"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the payroll labor type"
          },
          "code": {
            "type": [
              "string",
              "null"
            ],
            "description": "Code for the payroll labor type"
          },
          "serviceCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the labor SKU (Service) this labor type maps to; null if none",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Indicates whether the payroll labor type is active"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll labor type was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll labor type was last modified",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.LaborTypes.LaborTypeCreateRequest": {
        "required": [
          "name",
          "code",
          "active"
        ],
        "type": "object",
        "properties": {
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Name of the payroll labor type"
          },
          "code": {
            "minLength": 1,
            "type": "string",
            "description": "Code for the payroll labor type"
          },
          "serviceCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the labor SKU (Service) to map this labor type to; optional",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the payroll labor type is active (defaults to true)"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.LaborTypes.LaborTypeUpdateRequest": {
        "required": [
          "name",
          "code",
          "active"
        ],
        "type": "object",
        "properties": {
          "name": {
            "minLength": 1,
            "type": "string",
            "description": "Name of the payroll labor type"
          },
          "code": {
            "minLength": 1,
            "type": "string",
            "description": "Code for the payroll labor type"
          },
          "serviceCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the labor SKU (Service) to map this labor type to; null clears it.\nThis is the only optional field — every other field is required (full replacement).",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the payroll labor type is active. Required — omitting it would otherwise reset the labor type to inactive."
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Payroll.V2.LocationLaborTypes.LocationLaborTypeResponse": {
        "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/Payroll.V2.LocationLaborTypes.LocationLaborTypeResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Payroll.V2.LocationLaborTypes.LocationLaborTypeResponse": {
        "required": [
          "locationId",
          "hourlyRate",
          "laborTypeName",
          "laborTypeCode",
          "createdOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "locationId": {
            "type": "integer",
            "description": "Location ID",
            "format": "int64"
          },
          "hourlyRate": {
            "type": "number",
            "description": "The hourly rate of the location",
            "format": "decimal"
          },
          "laborTypeName": {
            "type": "string",
            "description": "The labor type name of the location"
          },
          "laborTypeCode": {
            "type": "string",
            "description": "The labor type code of the location"
          },
          "createdOn": {
            "type": "string",
            "description": "The location rate creation date/time (on UTC)",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the location rate is active"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Payroll.V2.PayrollActivityCodes.PayrollActivityCodeResponse": {
        "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/Payroll.V2.PayrollActivityCodes.PayrollActivityCodeResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Payroll.V2.PayrollActivityCodes.PayrollActivityCodeResponse": {
        "required": [
          "id",
          "name",
          "code",
          "earningCategory",
          "createdOn",
          "modifiedOn",
          "isDiscretionary",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the payroll activity code",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the payroll activity code"
          },
          "code": {
            "type": "string",
            "description": "Code of the payroll activity code"
          },
          "earningCategory": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.PayrollEarningCategory"
              }
            ],
            "description": "Earning category of the payroll activity code"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll activity code was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll activity code was modified",
            "format": "date-time"
          },
          "isDiscretionary": {
            "type": "boolean",
            "description": "Indicates whether the earnings code is discretionary (excluded from regular rate of pay calculations)"
          },
          "active": {
            "type": "boolean",
            "description": "Indicates whether the payroll activity code is active"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.PayrollAdjustments.PayrollAdjustmentCreateRequest": {
        "required": [
          "employeeType",
          "employeeId",
          "postedOn"
        ],
        "type": "object",
        "properties": {
          "employeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
              }
            ],
            "description": "The employee type"
          },
          "employeeId": {
            "type": "integer",
            "description": "ID of the employee",
            "format": "int64"
          },
          "postedOn": {
            "type": "string",
            "description": "The posted on date/time (in UTC)",
            "format": "date-time"
          },
          "amount": {
            "type": [
              "number",
              "null"
            ],
            "description": "The payroll adjustment amount",
            "format": "decimal"
          },
          "memo": {
            "type": [
              "string",
              "null"
            ],
            "description": "Memo of the payroll adjustment"
          },
          "activityCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the payroll adjustment activity code",
            "format": "int64"
          },
          "invoiceId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the payroll adjustment invoice",
            "format": "int64"
          },
          "businessUnitId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the payroll adjustment business unit",
            "format": "int64"
          },
          "hours": {
            "type": [
              "number",
              "null"
            ],
            "description": "Hours of the payroll adjustment",
            "format": "decimal"
          },
          "rate": {
            "type": [
              "number",
              "null"
            ],
            "description": "Rate of the payroll adjustment",
            "format": "decimal"
          },
          "quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Quantity of the payroll adjustment",
            "format": "decimal"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Payroll.V2.PayrollAdjustments.PayrollAdjustmentResponse": {
        "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/Payroll.V2.PayrollAdjustments.PayrollAdjustmentResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Payroll.V2.PayrollAdjustments.PayrollAdjustmentResponse": {
        "required": [
          "id",
          "employeeType",
          "employeeId",
          "postedOn",
          "amount",
          "type",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the payroll adjustment",
            "format": "int64"
          },
          "employeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
              }
            ],
            "description": "Employee type of the payroll adjustment"
          },
          "employeeId": {
            "type": "integer",
            "description": "Employee ID of the payroll adjustment",
            "format": "int64"
          },
          "postedOn": {
            "type": "string",
            "description": "Posted date/time (UTC) of the payroll adjustment",
            "format": "date-time"
          },
          "amount": {
            "type": "number",
            "description": "Amount of the payroll adjustment",
            "format": "decimal"
          },
          "memo": {
            "type": [
              "string",
              "null"
            ],
            "description": "Memo of the payroll adjustment"
          },
          "activityCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Activity code ID of the payroll adjustment",
            "format": "int64"
          },
          "invoiceId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the payroll adjustment invoice",
            "format": "int64"
          },
          "businessUnitId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the payroll adjustment business unit",
            "format": "int64"
          },
          "hours": {
            "type": [
              "number",
              "null"
            ],
            "description": "Hours of the payroll adjustment",
            "format": "decimal"
          },
          "rate": {
            "type": [
              "number",
              "null"
            ],
            "description": "Rate of the payroll adjustment",
            "format": "decimal"
          },
          "quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Quantity of the payroll adjustment",
            "format": "decimal"
          },
          "type": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.PayrollAdjustmentType"
              }
            ],
            "description": "Type of the payroll adjustment"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll adjustment was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll adjustment was modified",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Whether payroll adjustment is active"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.PayrollAdjustments.PayrollAdjustmentUpdateRequest": {
        "required": [
          "employeeId",
          "postedOn"
        ],
        "type": "object",
        "properties": {
          "employeeId": {
            "type": "integer",
            "description": "ID of the employee",
            "format": "int64"
          },
          "postedOn": {
            "type": "string",
            "description": "The posted on date/time (in UTC)",
            "format": "date-time"
          },
          "amount": {
            "type": [
              "number",
              "null"
            ],
            "description": "The payroll adjustment amount",
            "format": "decimal"
          },
          "memo": {
            "type": [
              "string",
              "null"
            ],
            "description": "Memo of the payroll adjustment"
          },
          "activityCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the payroll adjustment activity code",
            "format": "int64"
          },
          "invoiceId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the payroll adjustment invoice",
            "format": "int64"
          },
          "businessUnitId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "ID of the payroll adjustment business unit",
            "format": "int64"
          },
          "hours": {
            "type": [
              "number",
              "null"
            ],
            "description": "Hours of the payroll adjustment",
            "format": "decimal"
          },
          "rate": {
            "type": [
              "number",
              "null"
            ],
            "description": "Rate of the payroll adjustment",
            "format": "decimal"
          },
          "quantity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Quantity of the payroll adjustment",
            "format": "decimal"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Payroll.V2.Payrolls.PayrollResponse": {
        "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/Payroll.V2.Payrolls.PayrollResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Payroll.V2.Payrolls.PayrollResponse": {
        "required": [
          "id",
          "startedOn",
          "endedOn",
          "employeeId",
          "employeeType",
          "status",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the payroll",
            "format": "int64"
          },
          "startedOn": {
            "type": "string",
            "description": "Started on date (UTC) of the payroll",
            "format": "date-time"
          },
          "endedOn": {
            "type": "string",
            "description": "Ended on date (UTC) of the payroll",
            "format": "date-time"
          },
          "employeeId": {
            "type": "integer",
            "description": "Employee ID of the payroll",
            "format": "int64"
          },
          "employeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
              }
            ],
            "description": "Employee type of the payroll"
          },
          "status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.PayrollStatus"
              }
            ],
            "description": "Status of the payroll"
          },
          "burdenRate": {
            "type": [
              "number",
              "null"
            ],
            "description": "Burden rate of employee",
            "format": "decimal"
          },
          "managerApprovedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date/time (on UTC) when the payroll was approved",
            "format": "date-time"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll adjustment was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (on UTC) when the payroll adjustment was modified",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Whether payroll adjustment is active"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.PayrollStatus": {
        "enum": [
          "Pending",
          "Expired",
          "Approved",
          "Paid",
          "Locked"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Pending",
          "Expired",
          "Approved",
          "Paid",
          "Locked"
        ]
      },
      "PaginatedResponse_Of_Payroll.V2.PayrollSettings.PayrollSettingsListResponse": {
        "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/Payroll.V2.PayrollSettings.PayrollSettingsListResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Payroll.V2.PayrollSettings.PayrollSettingsListResponse": {
        "required": [
          "employeeId",
          "employeeType",
          "hourlyRate",
          "isIncludedInPayroll",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "employeeId": {
            "type": "integer",
            "description": "The employee ID",
            "format": "int64"
          },
          "employeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
              }
            ],
            "description": "The type of employee"
          },
          "externalPayrollId": {
            "type": [
              "string",
              "null"
            ],
            "description": "The external payroll ID"
          },
          "hourlyRate": {
            "type": "number",
            "description": "The hourly rate",
            "format": "decimal"
          },
          "managerId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The ID of the manager",
            "format": "int64"
          },
          "payrollBusinessUnitId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The ID of the payroll business unit (employee only)",
            "format": "int64"
          },
          "isIncludedInPayroll": {
            "type": "boolean",
            "description": "Indicates if the employee should be included in payroll processing"
          },
          "hireDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "The hire date",
            "format": "date-time"
          },
          "createdOn": {
            "type": "string",
            "description": "The date the record was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "The date the record was last modified",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "The active status of the record"
          },
          "payType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.TechnicianPayTypeModel"
              },
              {
                "type": "null"
              }
            ],
            "description": "The pay type (technician only)."
          },
          "customFields": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Payroll.V2.PayrollSettings.PayrollCustomFieldResponse"
            },
            "description": "Custom payroll fields and their values (technician only)"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.PayrollSettings.PayrollSettingsResponse": {
        "required": [
          "employeeId",
          "employeeType",
          "hourlyRate",
          "isIncludedInPayroll",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "employeeId": {
            "type": "integer",
            "description": "The employee ID",
            "format": "int64"
          },
          "employeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
              }
            ],
            "description": "The type of employee"
          },
          "externalPayrollId": {
            "type": [
              "string",
              "null"
            ],
            "description": "The external payroll ID"
          },
          "hourlyRate": {
            "type": "number",
            "description": "The hourly rate",
            "format": "decimal"
          },
          "managerId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The ID of the manager",
            "format": "int64"
          },
          "payrollBusinessUnitId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The ID of the payroll business unit (employee only)",
            "format": "int64"
          },
          "isIncludedInPayroll": {
            "type": "boolean",
            "description": "Indicates if the employee should be included in payroll processing"
          },
          "hireDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "The hire date",
            "format": "date-time"
          },
          "createdOn": {
            "type": "string",
            "description": "The date the record was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "The date the record was last modified",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "The active status of the record"
          },
          "payType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.TechnicianPayTypeModel"
              },
              {
                "type": "null"
              }
            ],
            "description": "The pay type (technician only)."
          },
          "customFields": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Payroll.V2.PayrollSettings.PayrollCustomFieldResponse"
            },
            "description": "Custom payroll fields and their values (technician only)"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.PayrollSettings.PayrollSettingsUpdateResponse": {
        "required": [
          "employeeId"
        ],
        "type": "object",
        "properties": {
          "employeeId": {
            "type": "integer",
            "description": "The employee ID",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.PayrollSettings.PayrollSettingsUpdateRequest": {
        "required": [
          "hourlyRate"
        ],
        "type": "object",
        "properties": {
          "externalPayrollId": {
            "type": [
              "string",
              "null"
            ],
            "description": "The external payroll ID"
          },
          "hourlyRate": {
            "type": "number",
            "description": "The hourly rate",
            "format": "decimal"
          },
          "managerId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The ID of the manager",
            "format": "int64"
          },
          "payrollBusinessUnitId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "The ID of the payroll business unit (employee only)",
            "format": "int64"
          },
          "hireDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "The hire date",
            "format": "date-time"
          },
          "isIncludedInPayroll": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Indicates if the employee should be included in payroll processing"
          },
          "payType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.TechnicianPayTypeModel"
              },
              {
                "type": "null"
              }
            ],
            "description": "The pay type (technician only). Omit to leave the current value unchanged."
          },
          "customFields": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Payroll.V2.PayrollSettings.PayrollCustomFieldUpdateRequest"
            },
            "description": "Custom payroll fields to update (technician only)"
          }
        },
        "additionalProperties": false
      },
      "Payroll.V2.PayrollSettings.PayrollCustomFieldUpdateRequest": {
        "required": [
          "typeId"
        ],
        "type": "object",
        "properties": {
          "typeId": {
            "type": "integer",
            "description": "The custom field type ID (definition ID)",
            "format": "int64"
          },
          "value": {
            "type": [
              "string",
              "null"
            ],
            "description": "The custom field value"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Payroll.V2.TimesheetCodes.TimesheetCodeResponse": {
        "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/Payroll.V2.TimesheetCodes.TimesheetCodeResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Payroll.V2.TimesheetCodes.TimesheetCodeResponse": {
        "required": [
          "id",
          "code",
          "type",
          "applicableEmployeeType",
          "rateInfo",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the timesheet code",
            "format": "int64"
          },
          "code": {
            "type": "string",
            "description": "Code of the timesheet code"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Description of the timesheet code"
          },
          "type": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.TimesheetCodeType"
              }
            ],
            "description": "Type of the timesheet code"
          },
          "applicableEmployeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.TimesheetCodeEmployeeType"
              }
            ],
            "description": "Application employee type of the timesheet code"
          },
          "rateInfo": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.TimesheetCodes.TimesheetCodeRateInfoResponse"
              }
            ],
            "description": "Rate info of the timesheet code"
          },
          "createdOn": {
            "type": "string",
            "description": "The date when the timesheet code was created (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "The last date when the timesheet code was modified (in UTC)",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Indicates whether the timesheet code is active or not"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Payroll.V2.Timesheets.JobTimesheetResponse": {
        "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/Payroll.V2.Timesheets.JobTimesheetResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Payroll.V2.Timesheets.JobTimesheetResponse": {
        "required": [
          "id",
          "jobId",
          "appointmentId",
          "technicianId",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The timesheet ID",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "The job ID",
            "format": "int64"
          },
          "appointmentId": {
            "type": "integer",
            "description": "The appointment ID",
            "format": "int64"
          },
          "technicianId": {
            "type": "integer",
            "description": "The technician ID",
            "format": "int64"
          },
          "dispatchedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "the dispatch date/time (in UTC)",
            "format": "date-time"
          },
          "arrivedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "The arrive date/time (in UTC)",
            "format": "date-time"
          },
          "canceledOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "The cancel date/time (in UTC)",
            "format": "date-time"
          },
          "doneOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "The done date/time (in UTC)",
            "format": "date-time"
          },
          "createdOn": {
            "type": "string",
            "description": "The created date/time (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "The modified date/time (in UTC)",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Whether job timesheet is active"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Payroll.V2.Timesheets.NonJobTimesheetResponse": {
        "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/Payroll.V2.Timesheets.NonJobTimesheetResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Payroll.V2.Timesheets.NonJobTimesheetResponse": {
        "required": [
          "id",
          "employeeId",
          "employeeType",
          "timesheetCodeId",
          "startedOn",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The timesheet ID",
            "format": "int64"
          },
          "employeeId": {
            "type": "integer",
            "description": "The employee/technician ID",
            "format": "int64"
          },
          "employeeType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Payroll.V2.EmployeeType"
              }
            ],
            "description": "The type of the employee"
          },
          "timesheetCodeId": {
            "type": "integer",
            "description": "The timesheet code ID",
            "format": "int64"
          },
          "startedOn": {
            "type": "string",
            "description": "The start time of the timesheet (in UTC)",
            "format": "date-time"
          },
          "endedOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "The end time of the timesheet (in UTC)",
            "format": "date-time"
          },
          "createdOn": {
            "type": "string",
            "description": "The created date/time (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "The modified date/time (in UTC)",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Indicates whether the timesheet is active or not"
          }
        },
        "additionalProperties": false
      }
    },
    "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.prl.jobs:r": "Payroll → Payroll Jobs (Read)",
              "tn.prl.payrolladjustments:r": "Payroll → Payroll Adjustments (Read)",
              "tn.prl.activitycodes:r": "Payroll → Activity Codes (Read)",
              "tn.prl.timesheetcodes:r": "Payroll → Timesheet Codes (Read)",
              "tn.prl.grosspayitems:r": "Payroll → Gross Pay Items (Read)",
              "tn.prl.payrollsettings:r": "Payroll → Payroll Settings (Read)",
              "tn.prl.grosspayitems:w": "Payroll → Gross Pay Items (Write)",
              "tn.prl.labortypes:r": "Payroll → Labor Types (Read)",
              "tn.prl.labortypes:w": "Payroll → Labor Types (Write)",
              "tn.prl.locations:r": "Payroll → Payroll Locations (Read)",
              "tn.prl.payrolladjustments:w": "Payroll → Payroll Adjustments (Write)",
              "tn.prl.payrolls:r": "Payroll → Payrolls (Read)",
              "tn.prl.technicians:r": "Payroll → Technician Payrolls (Read)",
              "tn.prl.employees:r": "Payroll → Employee Payrolls (Read)",
              "tn.prl.payrollsettings:w": "Payroll → Payroll Settings (Write)",
              "tn.prl.nonjobtimesheets:r": "Payroll → Non Job Timesheets (Read)"
            }
          }
        }
      }
    }
  }
}