{
  "openapi": "3.1.0",
  "info": {
    "title": "Dispatch",
    "description": "Appointment assignments, arrival windows, business hours, capacity, non-job appointments, teams, technician shifts, technician skills, technician tracking, zones",
    "version": "1.0"
  },
  "servers": [
    {
      "url": "https://api.servicetitan.io/dispatch/v2",
      "description": "Production"
    },
    {
      "url": "https://api-integration.servicetitan.io/dispatch/v2",
      "description": "Integration"
    }
  ],
  "paths": {
    "/tenant/{tenant}/gps-provider/{gps_provider}/gps-pings": {
      "post": {
        "tags": [
          "Gps"
        ],
        "summary": "Creates new gps ping.",
        "operationId": "Gps_Create",
        "parameters": [
          {
            "name": "gps_provider",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Dispatch.V2.GpsPingCreateRequest"
                }
              },
              "example": [
                {
                  "unitId": "string",
                  "unitName": "string",
                  "eventTime": "string",
                  "latitude": 0,
                  "longitude": 0,
                  "speed": 0,
                  "street": "string",
                  "city": "string",
                  "region": "string",
                  "postalCode": "string",
                  "message": "string",
                  "externalId": "string",
                  "isNew": true,
                  "statusMessage": "string"
                }
              ]
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Dispatch.V2.GpsPingResponse"
                  }
                },
                "example": [
                  {
                    "externalId": "string",
                    "status": {},
                    "message": "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.dis.gpspings:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/appointment-assignments": {
      "get": {
        "tags": [
          "AppointmentAssignments"
        ],
        "summary": "Gets a list of appointment assignments",
        "operationId": "AppointmentAssignments_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Perform lookup by multiple IDs (maximum 50)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "appointmentIds",
            "in": "query",
            "description": "Return appointment assignments for one or more appointments",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "jobId",
            "in": "query",
            "description": "Return appointment assignments for a single job",
            "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": "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, CreatedOn, ModifiedOn.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "What kind of items should be returned (only active items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Dispatch.V2.AppointmentAssignmentResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "technicianId": 0,
                      "technicianName": "string",
                      "assignedById": 0,
                      "assignedOn": "string",
                      "status": {},
                      "isPaused": true,
                      "jobId": 0,
                      "appointmentId": 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.dis.appointmentassignments:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/appointment-assignments/assign-technicians": {
      "post": {
        "tags": [
          "AppointmentAssignments"
        ],
        "summary": "Assigns the list of technicians to the appointment",
        "operationId": "AppointmentAssignments_AssignTechnicians",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.AssignTechniciansRequest"
              },
              "example": {
                "jobAppointmentId": 0,
                "technicianIds": [
                  0
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.AppointmentResponse"
                },
                "example": {
                  "id": 0,
                  "jobId": 0,
                  "appointmentNumber": "string",
                  "start": "string",
                  "end": "string",
                  "arrivalWindowStart": "string",
                  "arrivalWindowEnd": "string",
                  "status": {},
                  "specialInstructions": "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": {}
                }
              }
            }
          },
          "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.dis.appointmentassignments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/appointment-assignments/unassign-technicians": {
      "post": {
        "tags": [
          "AppointmentAssignments"
        ],
        "summary": "Unassigns the list of technicians from the appointment",
        "operationId": "AppointmentAssignments_UnassignTechnicians",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.UnassignTechniciansRequest"
              },
              "example": {
                "jobAppointmentId": 0,
                "technicianIds": [
                  0
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.AppointmentResponse"
                },
                "example": {
                  "id": 0,
                  "jobId": 0,
                  "appointmentNumber": "string",
                  "start": "string",
                  "end": "string",
                  "arrivalWindowStart": "string",
                  "arrivalWindowEnd": "string",
                  "status": {},
                  "specialInstructions": "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.dis.appointmentassignments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/arrival-windows": {
      "get": {
        "tags": [
          "ArrivalWindows"
        ],
        "operationId": "ArrivalWindows_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": "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_Dispatch.V2.ArrivalWindowResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "start": "string",
                      "duration": "string",
                      "businessUnitIds": [
                        0
                      ],
                      "active": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.arrivalwindows:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "ArrivalWindows"
        ],
        "operationId": "ArrivalWindows_Create",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.CreateArrivalWindowRequest"
              },
              "example": {
                "start": "string",
                "duration": "string",
                "businessUnitIds": [
                  0
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.ArrivalWindowResponse"
                },
                "example": {
                  "id": 0,
                  "start": "string",
                  "duration": "string",
                  "businessUnitIds": [
                    0
                  ],
                  "active": true
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.arrivalwindows:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/arrival-windows/{id}": {
      "get": {
        "tags": [
          "ArrivalWindows"
        ],
        "operationId": "ArrivalWindows_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "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/Dispatch.V2.ArrivalWindowResponse"
                },
                "example": {
                  "id": 0,
                  "start": "string",
                  "duration": "string",
                  "businessUnitIds": [
                    0
                  ],
                  "active": true
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.arrivalwindows:r"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "ArrivalWindows"
        ],
        "operationId": "ArrivalWindows_Update",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.UpdateArrivalWindowRequest"
              },
              "example": {
                "start": "string",
                "duration": "string",
                "businessUnitIds": [
                  0
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.ArrivalWindowResponse"
                },
                "example": {
                  "id": 0,
                  "start": "string",
                  "duration": "string",
                  "businessUnitIds": [
                    0
                  ],
                  "active": true
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.arrivalwindows:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/arrival-windows/{id}/activated": {
      "put": {
        "tags": [
          "ArrivalWindows"
        ],
        "operationId": "ArrivalWindows_Activated",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.SetArrivalWindowStatusRequest"
              },
              "example": {
                "isActive": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.arrivalwindows:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/arrival-windows/configuration": {
      "get": {
        "tags": [
          "ArrivalWindows"
        ],
        "operationId": "ArrivalWindows_GetConfiguration",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.ArrivalWindowConfigurationResponse"
                },
                "example": {
                  "configuration": "StartTimeOfArrivalWindow"
                }
              }
            }
          },
          "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.dis.arrivalwindows:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "ArrivalWindows"
        ],
        "operationId": "ArrivalWindows_UpdatedConfiguration",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.UpdateArrivalWindowConfigurationRequest"
              },
              "example": {
                "configuration": "StartTimeOfArrivalWindow"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.ArrivalWindowConfigurationResponse"
                },
                "example": {
                  "configuration": "StartTimeOfArrivalWindow"
                }
              }
            }
          },
          "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.dis.arrivalwindows:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/business-hours": {
      "get": {
        "tags": [
          "BusinessHour"
        ],
        "summary": "Gets the business hours.",
        "operationId": "BusinessHour_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A list with the business hours",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.BusinessHourModel"
                },
                "example": {
                  "weekdays": [
                    {
                      "fromHour": 0,
                      "toHour": 0
                    }
                  ],
                  "saturday": [
                    {
                      "fromHour": 0,
                      "toHour": 0
                    }
                  ],
                  "sunday": [
                    {
                      "fromHour": 0,
                      "toHour": 0
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.businesshours:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "BusinessHour"
        ],
        "operationId": "BusinessHour_Create",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.CreateBusinessHourRequest"
              },
              "example": {
                "weekdays": [
                  {
                    "fromHour": 0,
                    "toHour": 0
                  }
                ],
                "saturday": [
                  {
                    "fromHour": 0,
                    "toHour": 0
                  }
                ],
                "sunday": [
                  {
                    "fromHour": 0,
                    "toHour": 0
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.CreateBusinessHourResponse"
                },
                "example": {
                  "weekdays": [
                    {
                      "fromHour": 0,
                      "toHour": 0
                    }
                  ],
                  "saturday": [
                    {
                      "fromHour": 0,
                      "toHour": 0
                    }
                  ],
                  "sunday": [
                    {
                      "fromHour": 0,
                      "toHour": 0
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.businesshours:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/capacity": {
      "post": {
        "tags": [
          "Capacity"
        ],
        "operationId": "Capacity_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.CapacityRequestArgs"
              },
              "example": {
                "startsOnOrAfter": "string",
                "endsOnOrBefore": "string",
                "businessUnitIds": [
                  0
                ],
                "jobTypeId": 0,
                "skillBasedAvailability": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.CapacityResponse"
                },
                "example": {
                  "timeStamp": "string",
                  "availabilities": [
                    {
                      "start": "string",
                      "end": "string",
                      "startUtc": "string",
                      "endUtc": "string",
                      "businessUnitIds": [
                        0
                      ],
                      "totalAvailability": 0,
                      "openAvailability": 0,
                      "technicians": [
                        {
                          "id": 0,
                          "name": "string",
                          "status": {},
                          "hasRequiredSkills": true
                        }
                      ],
                      "isAvailable": true,
                      "isExceedingIdealBookingPercentage": 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.dis.capacity:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/export/appointment-assignments": {
      "get": {
        "tags": [
          "Export"
        ],
        "summary": "Provides export feed for appointment assignments",
        "operationId": "Export_AppointmentAssignments",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "What kind of items should be returned (only active items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "name": "from",
            "in": "query",
            "description": "Continuation token received from previous export request in \"continueFrom\" field.\nWhen not specified, the export process starts from the beginning.\\\nUse custom date strings, e.g. \"2020-01-01\" to start the export process from the certain point in time.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeRecentChanges",
            "in": "query",
            "description": "Use \"true\" to start receiving the most recent changes quicker.\nNote this may cause the same results appearing multiple times on consecutive requests.",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportResponse_Of_Dispatch.V2.ExportAppointmentAssignmentsResponse"
                },
                "example": {
                  "hasMore": true,
                  "continueFrom": "string",
                  "data": [
                    {
                      "id": 0,
                      "technicianId": 0,
                      "technicianName": "string",
                      "assignedById": 0,
                      "assignedOn": "string",
                      "status": {},
                      "isPaused": true,
                      "jobId": 0,
                      "appointmentId": 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.dis.appointmentassignments:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/non-job-appointments/{id}": {
      "get": {
        "tags": [
          "NonJobAppointments"
        ],
        "operationId": "NonJobAppointments_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "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/Dispatch.V2.GetNonJobAppointmentResponse"
                },
                "example": {
                  "id": 0,
                  "technicianId": 0,
                  "start": "string",
                  "name": "string",
                  "duration": "string",
                  "timesheetCodeId": 0,
                  "summary": "string",
                  "clearDispatchBoard": true,
                  "clearTechnicianView": true,
                  "removeTechnicianFromCapacityPlanning": true,
                  "allDay": true,
                  "showOnTechnicianSchedule": true,
                  "active": true,
                  "createdOn": "string",
                  "createdById": 0
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.nonjobappointments:r"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "NonJobAppointments"
        ],
        "summary": "Update an existing non-job appointment",
        "operationId": "NonJobAppointments_Update",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.NonJobAppointmentUpdateRequest"
              },
              "example": {
                "technicianId": 0,
                "start": "string",
                "duration": "string",
                "name": "string",
                "timesheetCodeId": 0,
                "summary": "string",
                "clearDispatchBoard": true,
                "clearTechnicianView": true,
                "showOnTechnicianSchedule": true,
                "removeTechnicianFromCapacityPlanning": true,
                "allDay": true,
                "repeat": true,
                "countOccurrences": 0,
                "interval": 0,
                "frequency": {},
                "endType": {},
                "endOn": "string",
                "daysOfWeek": "Monday, Wednesday, Friday"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.GetNonJobAppointmentResponse"
                },
                "example": {
                  "id": 0,
                  "technicianId": 0,
                  "start": "string",
                  "name": "string",
                  "duration": "string",
                  "timesheetCodeId": 0,
                  "summary": "string",
                  "clearDispatchBoard": true,
                  "clearTechnicianView": true,
                  "removeTechnicianFromCapacityPlanning": true,
                  "allDay": true,
                  "showOnTechnicianSchedule": true,
                  "active": true,
                  "createdOn": "string",
                  "createdById": 0
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "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.dis.nonjobappointments:w"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "NonJobAppointments"
        ],
        "summary": "Delete non-job appointment",
        "operationId": "NonJobAppointments_Delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "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/Dispatch.Contracts.NonJobAppointment.DeleteNonJobAppointmentResult"
                },
                "example": {
                  "message": "string",
                  "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": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.nonjobappointments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/non-job-appointments": {
      "get": {
        "tags": [
          "NonJobAppointments"
        ],
        "summary": "Gets a list of non-job appointments",
        "operationId": "NonJobAppointments_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "technicianId",
            "in": "query",
            "description": "Unique id of the technician this non-job appointment applies to",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "startsOnOrAfter",
            "in": "query",
            "description": "When the Start of non-job appointment should be at or after",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "startsOnOrBefore",
            "in": "query",
            "description": "When the Start of non-job appointment should be at or before",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "timesheetCodeId",
            "in": "query",
            "description": "Unique Id of timesheet code must apply to",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "activeOnly",
            "in": "query",
            "description": "Whether the result should contains only active non-job appointments",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "showOnTechnicianSchedule",
            "in": "query",
            "description": "Whether the non-job appointment shows on the technicians schedule even if there is no timesheet",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "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": "modifiedBefore",
            "in": "query",
            "description": "Return items modified before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Perform lookup by multiple IDs (maximum 50)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by the specified field:\\\n\"?sort=+FieldName\" for ascending order,\\\n\"?sort=-FieldName\" for descending order.\\\n\\\nAvailable fields are: Id, CreatedOn, ModifiedOn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Dispatch.V2.NonJobAppointmentResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "technicianId": 0,
                      "start": "string",
                      "name": "string",
                      "duration": "string",
                      "timesheetCodeId": 0,
                      "summary": "string",
                      "clearDispatchBoard": true,
                      "clearTechnicianView": true,
                      "removeTechnicianFromCapacityPlanning": true,
                      "allDay": true,
                      "showOnTechnicianSchedule": true,
                      "active": true,
                      "createdOn": "string",
                      "modifiedOn": "string",
                      "createdById": 0
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.nonjobappointments:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "NonJobAppointments"
        ],
        "summary": "Create a new non-job appointment",
        "operationId": "NonJobAppointments_Create",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.CreateNonJobAppointmentRequest"
              },
              "example": {
                "technicianId": 0,
                "start": "string",
                "duration": "string",
                "name": "string",
                "timesheetCodeId": 0,
                "summary": "string",
                "clearDispatchBoard": true,
                "clearTechnicianView": true,
                "showOnTechnicianSchedule": true,
                "removeTechnicianFromCapacityPlanning": true,
                "allDay": true,
                "repeat": true,
                "countOccurrences": 0,
                "interval": 0,
                "frequency": {},
                "endType": {},
                "endOn": "string",
                "daysOfWeek": "Monday, Wednesday, Friday"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.Contracts.NonJobAppointment.CreateNonJobAppointmentResult"
                },
                "example": {
                  "id": 0,
                  "technicianId": 0,
                  "start": "string",
                  "name": "string",
                  "duration": "string",
                  "timesheetCodeId": 0,
                  "summary": "string",
                  "clearDispatchBoard": true,
                  "clearTechnicianView": true,
                  "removeTechnicianFromCapacityPlanning": true,
                  "allDay": true,
                  "showOnTechnicianSchedule": true,
                  "active": true,
                  "createdOn": "string",
                  "createdById": 0,
                  "repeat": true,
                  "countOccurrences": 0,
                  "interval": 0,
                  "frequency": {},
                  "endType": {},
                  "endOn": "string",
                  "daysOfWeek": "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.dis.nonjobappointments:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/teams": {
      "get": {
        "tags": [
          "Team"
        ],
        "summary": "Gets a list of teams",
        "operationId": "Team_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": "includeInactive",
            "in": "query",
            "description": "Whether to include inactive teams",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "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": "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 the specified field:\\\n\"?sort=+FieldName\" for ascending order,\\\n\"?sort=-FieldName\" for descending order.\\\n\\\nAvailable fields are: Id, CreatedOn, ModifiedOn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Dispatch.V2.TeamResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "active": true,
                      "name": "string",
                      "createdBy": 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": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.teams:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Team"
        ],
        "summary": "Creates new team",
        "operationId": "Team_Create",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.CreateTeamRequest"
              },
              "example": {
                "active": true,
                "name": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.CreateTeamResponse"
                },
                "example": {
                  "id": 0,
                  "active": true,
                  "name": "string",
                  "createdBy": 0,
                  "createdOn": "string",
                  "modifiedOn": "string",
                  "created": 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.dis.teams:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/teams/{id}": {
      "get": {
        "tags": [
          "Team"
        ],
        "summary": "Gets a specific team",
        "operationId": "Team_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "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/Dispatch.V2.TeamResponse"
                },
                "example": {
                  "id": 0,
                  "active": true,
                  "name": "string",
                  "createdBy": 0,
                  "createdOn": "string",
                  "modifiedOn": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.teams:r"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Team"
        ],
        "summary": "Delete team",
        "operationId": "Team_Delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded"
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.teams:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/technician-shifts": {
      "get": {
        "tags": [
          "TechnicianShifts"
        ],
        "summary": "Gets a list of technician shifts",
        "operationId": "TechnicianShifts_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "startsOnOrAfter",
            "in": "query",
            "description": "When the Start of shift should be at or after",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "endsOnOrBefore",
            "in": "query",
            "description": "When the End of shift should be at or before",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "shiftType",
            "in": "query",
            "description": "Value to match ShiftType to\\\nValues: [Normal, OnCall, TimeOff]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Dispatch.V2.ShiftType"
                }
              ]
            }
          },
          {
            "name": "technicianId",
            "in": "query",
            "description": "Unique Id of technician shift must apply to",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "titleContains",
            "in": "query",
            "description": "Text that must appear in the Title",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "noteContains",
            "in": "query",
            "description": "Text that must appear in the Note",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "What kind of items should be returned (only active items will be returned by default)\\\nValues: [True, Any, False]",
            "schema": {
              "type": "string",
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ActiveRequestArg"
                }
              ]
            }
          },
          {
            "name": "createdBefore",
            "in": "query",
            "description": "Return items created before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "createdOnOrAfter",
            "in": "query",
            "description": "Return items created on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedBefore",
            "in": "query",
            "description": "Return items modified before certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "modifiedOnOrAfter",
            "in": "query",
            "description": "Return items modified on or after certain date/time (in UTC)",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Applies sorting by the specified field:\\\n\"?sort=+FieldName\" for ascending order,\\\n\"?sort=-FieldName\" for descending order.\\\n\\\nAvailable fields are: Id, CreatedOn, ModifiedOn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Dispatch.V2.TechnicianShiftResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "shiftType": {},
                      "title": "string",
                      "note": "string",
                      "active": true,
                      "technicianId": 0,
                      "start": "string",
                      "end": "string",
                      "timesheetCodeId": 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": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.technicianshifts:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "TechnicianShifts"
        ],
        "summary": "Creates new Technician Shift",
        "operationId": "TechnicianShifts_Create",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.CreateTechnicianShiftRequest"
              },
              "example": {
                "technicianIds": [
                  0
                ],
                "shiftType": "Normal",
                "title": "string",
                "start": "string",
                "end": "string",
                "note": "string",
                "timesheetCodeId": 0,
                "repeatType": "Weekly",
                "repeatEndDate": "string",
                "repeatInterval": 0,
                "shiftDays": "Monday, Wednesday, Friday"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.TechnicianShiftCreateResponse"
                },
                "example": {
                  "created": true,
                  "technicianShifts": [
                    {
                      "id": 0,
                      "shiftType": {},
                      "title": "string",
                      "note": "string",
                      "active": true,
                      "technicianId": 0,
                      "start": "string",
                      "end": "string",
                      "timesheetCodeId": 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": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.technicianshifts:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/technician-shifts/{id}": {
      "get": {
        "tags": [
          "TechnicianShifts"
        ],
        "summary": "Gets a specific technician shift",
        "operationId": "TechnicianShifts_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "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/Dispatch.V2.TechnicianShiftResponse"
                },
                "example": {
                  "id": 0,
                  "shiftType": {},
                  "title": "string",
                  "note": "string",
                  "active": true,
                  "technicianId": 0,
                  "start": "string",
                  "end": "string",
                  "timesheetCodeId": 0,
                  "createdOn": "string",
                  "modifiedOn": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.technicianshifts:r"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "TechnicianShifts"
        ],
        "summary": "Updates Technician Shift",
        "operationId": "TechnicianShifts_Update",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.UpdateTechnicianShiftRequest"
              },
              "example": {
                "shiftType": "Normal",
                "title": "string",
                "start": "string",
                "end": "string",
                "note": "string",
                "timesheetCodeId": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.TechnicianShiftUpdateResponse"
                },
                "example": {
                  "technicianShifts": [
                    {
                      "id": 0,
                      "shiftType": {},
                      "title": "string",
                      "note": "string",
                      "active": true,
                      "technicianId": 0,
                      "start": "string",
                      "end": "string",
                      "timesheetCodeId": 0,
                      "createdOn": "string",
                      "modifiedOn": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.technicianshifts:w"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "TechnicianShifts"
        ],
        "summary": "Deletes the specified technician shift",
        "operationId": "TechnicianShifts_Delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The technician shift Id to delete",
            "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/Dispatch.Contracts.TechnicianShift.DeleteTechnicianShiftResult"
                },
                "example": {
                  "message": "string",
                  "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": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.technicianshifts:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/technician-shifts/bulk-delete": {
      "post": {
        "tags": [
          "TechnicianShifts"
        ],
        "summary": "Deletes the technician shifts specified by the criteria",
        "operationId": "TechnicianShifts_BulkDelete",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The criteria to delete",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.BulkDeleteTechnicianShiftRequest"
              },
              "example": {
                "start": "string",
                "end": "string"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "A list with the deleted technician shift Ids",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.Contracts.TechnicianShift.BulkDeleteTechnicianShiftResult"
                },
                "example": {
                  "message": "string",
                  "deletedIds": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.technicianshifts:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/technician-skills": {
      "get": {
        "tags": [
          "TechnicianSkills"
        ],
        "summary": "Gets a list of technician skills",
        "operationId": "TechnicianSkills_GetList",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "technicianId",
            "in": "query",
            "description": "Gets or sets the unique Id of the technician the skill must apply to.",
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The logical number of page to return, starting from 1",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "How many records to return (50 by default)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeTotal",
            "in": "query",
            "description": "Whether total count should be returned",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "active",
            "in": "query",
            "description": "What kind of items should be returned (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": "Gets or sets the sorting configuration.\nApplies sorting by the specified field:\n\"?sort=+FieldName\" for ascending order,\n\"?sort=-FieldName\" for descending order.\nAvailable fields are: Id, CreatedOn, ModifiedOn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated list of technician skills",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Dispatch.V2.TechnicianSkillResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": "string",
                      "name": "string",
                      "active": true,
                      "technicianId": 0,
                      "jobTypeIds": [
                        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": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.technicianskills:r"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "TechnicianSkills"
        ],
        "summary": "Assigns or replaces skills on a technician.\nReturns the updated status and complete list of all technician skills after the operation.",
        "operationId": "TechnicianSkills_AssignTechnicianSkills",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The request containing technician ID and skill IDs to assign",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.UpdateTechnicianSkillsRequest"
              },
              "example": {
                "technicianId": 0,
                "skillIds": [
                  0
                ],
                "replaceExistingSkills": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Update result with all technician skills",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.UpdateTechnicianSkillsResponse"
                },
                "example": {
                  "updated": true,
                  "technicianSkills": [
                    {
                      "id": "string",
                      "name": "string",
                      "active": true,
                      "technicianId": 0,
                      "jobTypeIds": [
                        0
                      ],
                      "createdOn": "string",
                      "modifiedOn": "string"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.technicianskills:w"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "TechnicianSkills"
        ],
        "summary": "Creates a new skill and assigns it to a technician",
        "operationId": "TechnicianSkills_CreateTechnicianSkill",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "description": "The request containing skill details and technician ID",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.CreateTechnicianSkillRequest"
              },
              "example": {
                "technicianId": 0,
                "name": "string",
                "active": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The created technician skill",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.TechnicianSkillResponse"
                },
                "example": {
                  "id": "string",
                  "name": "string",
                  "active": true,
                  "technicianId": 0,
                  "jobTypeIds": [
                    0
                  ],
                  "createdOn": "string",
                  "modifiedOn": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.technicianskills:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/technician-skills/{id}": {
      "get": {
        "tags": [
          "TechnicianSkills"
        ],
        "summary": "Gets a specific technician skill",
        "operationId": "TechnicianSkills_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the technician skill",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The technician skill details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.TechnicianSkillResponse"
                },
                "example": {
                  "id": "string",
                  "name": "string",
                  "active": true,
                  "technicianId": 0,
                  "jobTypeIds": [
                    0
                  ],
                  "createdOn": "string",
                  "modifiedOn": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.technicianskills:r"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "TechnicianSkills"
        ],
        "summary": "Deletes a technician skill association",
        "operationId": "TechnicianSkills_Delete",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the technician skill (format: {TechnicianId}_{SkillId})",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "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/Dispatch.Contracts.TechnicianSkill.DeleteTechnicianSkillResult"
                },
                "example": {
                  "id": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.technicianskills:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/technician-tracking": {
      "get": {
        "tags": [
          "TechnicianTracking"
        ],
        "operationId": "TechnicianTracking_Get",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "technicianId",
            "in": "query",
            "description": "Unique Id of technician that tracking url must apply to",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "appointmentId",
            "in": "query",
            "description": "Unique Id of appointment that tracking url must apply to",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.TechnicianTrackingResponse"
                },
                "example": {
                  "technicianTrackingUrl": "string"
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": "string"
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.techniciantracking:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/zones": {
      "get": {
        "tags": [
          "Zone"
        ],
        "summary": "Gets a list of zones",
        "operationId": "Zone_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": "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": "modifiedBefore",
            "in": "query",
            "description": "Return items modified 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": "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, CreatedOn, ModifiedOn.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedResponse_Of_Dispatch.V2.ZoneResponse"
                },
                "example": {
                  "page": 0,
                  "pageSize": 0,
                  "hasMore": true,
                  "totalCount": 0,
                  "data": [
                    {
                      "id": 0,
                      "active": true,
                      "name": "string",
                      "zips": [
                        "string"
                      ],
                      "cities": [
                        "string"
                      ],
                      "territoryNumbers": [
                        "string"
                      ],
                      "locnNumbers": [
                        "string"
                      ],
                      "createdBy": 0,
                      "createdOn": "string",
                      "modifiedOn": "string",
                      "serviceDaysEnabled": true,
                      "serviceDays": [
                        "string"
                      ],
                      "businessUnits": [
                        0
                      ],
                      "technicians": [
                        0
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.zones:r"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Zone"
        ],
        "summary": "Creates a new zone",
        "operationId": "Zone_CreateZone",
        "parameters": [
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.CreateOrUpdateZoneRequestArgs"
              },
              "example": {
                "name": "string",
                "zips": [
                  "string"
                ],
                "cities": [
                  "string"
                ],
                "territoryNumbers": [
                  "string"
                ],
                "locnNumbers": [
                  "string"
                ],
                "serviceDaysEnabled": true,
                "serviceDaysIds": [
                  0
                ],
                "businessUnits": [
                  0
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.CreateOrUpdateZoneResponse"
                },
                "example": {
                  "id": 0,
                  "active": true,
                  "name": "string",
                  "zips": [
                    "string"
                  ],
                  "cities": [
                    "string"
                  ],
                  "territoryNumbers": [
                    "string"
                  ],
                  "locnNumbers": [
                    "string"
                  ],
                  "serviceDaysEnabled": true,
                  "serviceDaysIds": [
                    0
                  ],
                  "businessUnits": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": "string"
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.zones:w"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/zones/{id}": {
      "get": {
        "tags": [
          "Zone"
        ],
        "summary": "Gets a specific zone",
        "operationId": "Zone_Get",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "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/Dispatch.V2.ZoneResponse"
                },
                "example": {
                  "id": 0,
                  "active": true,
                  "name": "string",
                  "zips": [
                    "string"
                  ],
                  "cities": [
                    "string"
                  ],
                  "territoryNumbers": [
                    "string"
                  ],
                  "locnNumbers": [
                    "string"
                  ],
                  "createdBy": 0,
                  "createdOn": "string",
                  "modifiedOn": "string",
                  "serviceDaysEnabled": true,
                  "serviceDays": [
                    "string"
                  ],
                  "businessUnits": [
                    0
                  ],
                  "technicians": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          },
          "404": {
            "description": "The requested entity was not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                },
                "example": {
                  "type": "string",
                  "title": "string",
                  "status": 0,
                  "traceId": "string",
                  "errors": {},
                  "data": {}
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.zones:r"
            ]
          }
        ]
      }
    },
    "/tenant/{tenant}/zones/{zoneId}": {
      "patch": {
        "tags": [
          "Zone"
        ],
        "summary": "Updates an existing zone",
        "operationId": "Zone_UpdateZone",
        "parameters": [
          {
            "name": "zoneId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "tenant",
            "in": "path",
            "description": "Tenant ID",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Dispatch.V2.CreateOrUpdateZoneRequestArgs"
              },
              "example": {
                "name": "string",
                "zips": [
                  "string"
                ],
                "cities": [
                  "string"
                ],
                "territoryNumbers": [
                  "string"
                ],
                "locnNumbers": [
                  "string"
                ],
                "serviceDaysEnabled": true,
                "serviceDaysIds": [
                  0
                ],
                "businessUnits": [
                  0
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request has succeeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispatch.V2.CreateOrUpdateZoneResponse"
                },
                "example": {
                  "id": 0,
                  "active": true,
                  "name": "string",
                  "zips": [
                    "string"
                  ],
                  "cities": [
                    "string"
                  ],
                  "territoryNumbers": [
                    "string"
                  ],
                  "locnNumbers": [
                    "string"
                  ],
                  "serviceDaysEnabled": true,
                  "serviceDaysIds": [
                    0
                  ],
                  "businessUnits": [
                    0
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The request cannot be processed, check validation errors or request format",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": "string"
              }
            }
          }
        },
        "security": [
          {
            "apiKeyHeader": [],
            "oauth": [
              "tn.dis.zones:w"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Zone"
        ],
        "summary": "Deletes a zone",
        "operationId": "Zone_DeleteZone",
        "parameters": [
          {
            "name": "zoneId",
            "in": "path",
            "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.dis.zones:w"
            ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "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)."
      },
      "Dispatch.V2.GpsPingResponse": {
        "required": [
          "externalId",
          "status",
          "message"
        ],
        "type": "object",
        "properties": {
          "externalId": {
            "type": "string",
            "description": "Unique External ID for data point"
          },
          "status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.V2.GpsPingResultStatus"
              }
            ],
            "description": "Request status"
          },
          "message": {
            "type": "string",
            "description": "Gets or sets the response message received from the GPS provider about the unit at the time of recording",
            "format": "html"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.GpsPingResultStatus": {
        "enum": [
          "Fail",
          "Success"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Fail",
          "Success"
        ]
      },
      "Dispatch.V2.GpsPingCreateRequest": {
        "required": [
          "unitId",
          "unitName",
          "eventTime",
          "street",
          "city",
          "region",
          "postalCode",
          "message",
          "externalId",
          "isNew",
          "statusMessage"
        ],
        "type": "object",
        "properties": {
          "unitId": {
            "type": "string",
            "description": "Gets or sets the ID of the object for which location information is provided"
          },
          "unitName": {
            "type": "string",
            "description": "Gets or sets the name of the object for which location information is provided"
          },
          "eventTime": {
            "type": "string",
            "description": "Gets or sets the time of the recording",
            "format": "date-time"
          },
          "latitude": {
            "type": [
              "number",
              "null"
            ],
            "description": "Gets or sets the latitude coordinate of the unit's location at the time of recording",
            "format": "double"
          },
          "longitude": {
            "type": [
              "number",
              "null"
            ],
            "description": "Gets or sets the longitude coordinate of the unit's location at the time of recording",
            "format": "double"
          },
          "speed": {
            "type": [
              "number",
              "null"
            ],
            "description": "Gets or sets the speed of the vehicle at the time of recording",
            "format": "double"
          },
          "street": {
            "type": "string",
            "description": "Gets the location's street address"
          },
          "city": {
            "type": "string",
            "description": "Gets the location's city"
          },
          "region": {
            "type": "string",
            "description": "Gets the location's region"
          },
          "postalCode": {
            "type": "string",
            "description": "Gets the location's postal code"
          },
          "message": {
            "type": "string",
            "description": "Gets or sets the response message received from the GPS provider about the unit at the time of recording",
            "format": "html"
          },
          "externalId": {
            "type": "string",
            "description": "Unique External ID for data point"
          },
          "isNew": {
            "type": "boolean",
            "description": "Indicate if gps ping unit is a new one"
          },
          "statusMessage": {
            "type": "string",
            "description": "Gets the status message"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Dispatch.V2.AppointmentAssignmentResponse": {
        "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/Dispatch.V2.AppointmentAssignmentResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Dispatch.V2.AppointmentAssignmentResponse": {
        "required": [
          "id",
          "technicianId",
          "technicianName",
          "assignedById",
          "assignedOn",
          "status",
          "isPaused",
          "jobId",
          "appointmentId",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the appointment assignment",
            "format": "int64"
          },
          "technicianId": {
            "type": "integer",
            "description": "ID of the technician",
            "format": "int64"
          },
          "technicianName": {
            "type": "string",
            "description": "Name of the technician"
          },
          "assignedById": {
            "type": "integer",
            "description": "ID of the user who assigned the appointment assignment",
            "format": "int64"
          },
          "assignedOn": {
            "type": "string",
            "description": "Date/time (in UTC) when the appointment assignment was assigned",
            "format": "date-time"
          },
          "status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.V2.JobAppointmentAssignmentStatus"
              }
            ],
            "description": "Status of the appointment assignment"
          },
          "isPaused": {
            "type": "boolean",
            "description": "Whether appointment assignment is paused"
          },
          "jobId": {
            "type": "integer",
            "description": "ID of the job",
            "format": "int64"
          },
          "appointmentId": {
            "type": "integer",
            "description": "ID of the appointment",
            "format": "int64"
          },
          "createdOn": {
            "type": "string",
            "description": "When the assignment was created (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "When the assignment was modified (in UTC)",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Indicate if assignment is active"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.JobAppointmentAssignmentStatus": {
        "enum": [
          "Scheduled",
          "Dispatched",
          "Working",
          "Done"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Scheduled",
          "Dispatched",
          "Working",
          "Done"
        ]
      },
      "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"
        ]
      },
      "Dispatch.V2.AppointmentResponse": {
        "required": [
          "id",
          "jobId",
          "start",
          "end",
          "status",
          "createdOn",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Appointment ID",
            "format": "int64"
          },
          "jobId": {
            "type": "integer",
            "description": "ID of the job that the appointment was created for",
            "format": "int64"
          },
          "appointmentNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "Appointment number"
          },
          "start": {
            "type": "string",
            "description": "Appointment's start date/time (in UTC)",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "description": "Appointment's end date/time (in UTC)",
            "format": "date-time"
          },
          "arrivalWindowStart": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arrival window start date/time (in UTC), if configured",
            "format": "date-time"
          },
          "arrivalWindowEnd": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arrival window end date/time (in UTC), if configured",
            "format": "date-time"
          },
          "status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.V2.AppointmentStatus"
              }
            ],
            "description": "Appointment's status"
          },
          "specialInstructions": {
            "type": [
              "string",
              "null"
            ],
            "description": "Special instructions associated to the appointment"
          },
          "createdOn": {
            "type": "string",
            "description": "When the appointment was created (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "When the appointment was modified (in UTC)",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Appointment response model"
      },
      "Dispatch.V2.AppointmentStatus": {
        "enum": [
          "Scheduled",
          "Dispatched",
          "Working",
          "Hold",
          "Done",
          "Canceled"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Scheduled",
          "Dispatched",
          "Working",
          "Hold",
          "Done",
          "Canceled"
        ]
      },
      "Dispatch.V2.AssignTechniciansRequest": {
        "required": [
          "jobAppointmentId",
          "technicianIds"
        ],
        "type": "object",
        "properties": {
          "jobAppointmentId": {
            "type": "integer",
            "description": "Id of the appointment to assign to.",
            "format": "int64"
          },
          "technicianIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Assign these technicians to the appointment."
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.UnassignTechniciansRequest": {
        "required": [
          "jobAppointmentId",
          "technicianIds"
        ],
        "type": "object",
        "properties": {
          "jobAppointmentId": {
            "type": "integer",
            "description": "Id of the appointment to unassign from.",
            "format": "int64"
          },
          "technicianIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Unassign these technicians from the appointment."
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Dispatch.V2.ArrivalWindowResponse": {
        "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/Dispatch.V2.ArrivalWindowResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Dispatch.V2.ArrivalWindowResponse": {
        "required": [
          "id",
          "start",
          "duration",
          "businessUnitIds",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "start": {
            "type": "string",
            "format": "duration"
          },
          "duration": {
            "type": "string",
            "format": "duration"
          },
          "businessUnitIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "active": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CreateArrivalWindowRequest": {
        "required": [
          "start",
          "duration",
          "businessUnitIds"
        ],
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "description": "The start time for the arrival window defined as TimeSpan. I.e. \"09:00\"",
            "format": "duration"
          },
          "duration": {
            "type": "string",
            "description": "The end time for the arrival window defined as TimeSpan. I.e. \"11:00\"",
            "format": "duration"
          },
          "businessUnitIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "The business unit ids list that this arrival window applies for."
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.UpdateArrivalWindowRequest": {
        "required": [
          "start",
          "duration",
          "businessUnitIds"
        ],
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "description": "The start time for the arrival window defined as TimeSpan. I.e. \"09:00\"",
            "format": "duration"
          },
          "duration": {
            "type": "string",
            "description": "The end time for the arrival window defined as TimeSpan. I.e. \"11:00\"",
            "format": "duration"
          },
          "businessUnitIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "The business unit ids list that this arrival window applies for."
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.SetArrivalWindowStatusRequest": {
        "required": [
          "isActive"
        ],
        "type": "object",
        "properties": {
          "isActive": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.ArrivalWindowConfigurationResponse": {
        "required": [
          "configuration"
        ],
        "type": "object",
        "properties": {
          "configuration": {
            "$ref": "#/components/schemas/Dispatch.V2.ArrivalWindowConfiguration"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.ArrivalWindowConfiguration": {
        "enum": [
          "StartTimeOfArrivalWindow",
          "EndTimeOfArrivalWindow"
        ],
        "type": "string",
        "description": "Determines the default Job's start time during booking or rescheduling after an Arrival window has been selected or changed by a user.",
        "x-enumNames": [
          "StartTimeOfArrivalWindow",
          "EndTimeOfArrivalWindow"
        ]
      },
      "Dispatch.V2.UpdateArrivalWindowConfigurationRequest": {
        "required": [
          "configuration"
        ],
        "type": "object",
        "properties": {
          "configuration": {
            "$ref": "#/components/schemas/Dispatch.V2.ArrivalWindowConfiguration"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.BusinessHourModel": {
        "required": [
          "weekdays",
          "saturday",
          "sunday"
        ],
        "type": "object",
        "properties": {
          "weekdays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TimeRange"
            }
          },
          "saturday": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TimeRange"
            }
          },
          "sunday": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TimeRange"
            }
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.TimeRange": {
        "required": [
          "fromHour",
          "toHour"
        ],
        "type": "object",
        "properties": {
          "fromHour": {
            "type": "integer",
            "format": "int32"
          },
          "toHour": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CreateBusinessHourResponse": {
        "required": [
          "weekdays",
          "saturday",
          "sunday"
        ],
        "type": "object",
        "properties": {
          "weekdays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TimeRange"
            }
          },
          "saturday": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TimeRange"
            }
          },
          "sunday": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TimeRange"
            }
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CreateBusinessHourRequest": {
        "required": [
          "weekdays",
          "saturday",
          "sunday"
        ],
        "type": "object",
        "properties": {
          "weekdays": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TimeRange"
            }
          },
          "saturday": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TimeRange"
            }
          },
          "sunday": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TimeRange"
            }
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CapacityResponse": {
        "required": [
          "timeStamp",
          "availabilities"
        ],
        "type": "object",
        "properties": {
          "timeStamp": {
            "type": "string",
            "description": "When the request was processed",
            "format": "date-time"
          },
          "availabilities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.CapacityResponseAvailability"
            },
            "description": "Availability calculations by time frame"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CapacityResponseAvailability": {
        "required": [
          "start",
          "end",
          "startUtc",
          "endUtc",
          "businessUnitIds",
          "totalAvailability",
          "openAvailability",
          "technicians",
          "isAvailable",
          "isExceedingIdealBookingPercentage"
        ],
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "description": "When the availability time frame starts",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "description": "When the availability time frame ends",
            "format": "date-time"
          },
          "startUtc": {
            "type": "string",
            "description": "When the availability time frame starts",
            "format": "date-time"
          },
          "endUtc": {
            "type": "string",
            "description": "When the availability time frame ends",
            "format": "date-time"
          },
          "businessUnitIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Business units that the availability applies to"
          },
          "totalAvailability": {
            "type": "number",
            "description": "Number of hours that total capacity can allow to be booked during this time frame",
            "format": "double"
          },
          "openAvailability": {
            "type": "number",
            "description": "Number of remaining hours that can be booked during this time frame",
            "format": "double"
          },
          "technicians": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.CapacityResponseTechnician"
            },
            "description": "Technician details for this availability time frame"
          },
          "isAvailable": {
            "type": "boolean",
            "description": "Indicate if time slot is available"
          },
          "isExceedingIdealBookingPercentage": {
            "type": "boolean",
            "description": "Indicate if Ideal Booking Percentage is exceeded"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CapacityResponseTechnician": {
        "required": [
          "id",
          "name",
          "status"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique Id of technician",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of technician"
          },
          "status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.V2.CapacityResponseTechnicianStatus"
              }
            ],
            "description": "Whether the technician is available to work during the associated time frame"
          },
          "hasRequiredSkills": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether the technician has all the skills required for the job type"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CapacityResponseTechnicianStatus": {
        "enum": [
          "Available",
          "Unavailable"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Available",
          "Unavailable"
        ]
      },
      "Dispatch.V2.CapacityRequestArgs": {
        "required": [
          "startsOnOrAfter",
          "endsOnOrBefore",
          "skillBasedAvailability"
        ],
        "type": "object",
        "properties": {
          "startsOnOrAfter": {
            "type": "string",
            "description": "When the time frame should start at or after",
            "format": "date-time"
          },
          "endsOnOrBefore": {
            "type": "string",
            "description": "When the time frame should end at or before",
            "format": "date-time"
          },
          "businessUnitIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Business units to calculate availability for"
          },
          "jobTypeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Job type whose duration should be used to calculate availability",
            "format": "int64"
          },
          "skillBasedAvailability": {
            "type": "boolean",
            "description": "Indicate whether to use skill-based availability matching"
          }
        },
        "additionalProperties": false
      },
      "ExportResponse_Of_Dispatch.V2.ExportAppointmentAssignmentsResponse": {
        "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/Dispatch.V2.ExportAppointmentAssignmentsResponse"
            },
            "description": "The collection of exported items, usually sorted chronologically based on modification date"
          }
        },
        "additionalProperties": false,
        "description": "Represents export API response."
      },
      "Dispatch.V2.ExportAppointmentAssignmentsResponse": {
        "required": [
          "id",
          "technicianId",
          "technicianName",
          "assignedById",
          "assignedOn",
          "status",
          "isPaused",
          "jobId",
          "appointmentId",
          "createdOn",
          "modifiedOn",
          "active"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID of the appointment assignment",
            "format": "int64"
          },
          "technicianId": {
            "type": "integer",
            "description": "ID of the technician",
            "format": "int64"
          },
          "technicianName": {
            "type": "string",
            "description": "Name of the technician"
          },
          "assignedById": {
            "type": "integer",
            "description": "ID of the user who assigned the appointment assignment",
            "format": "int64"
          },
          "assignedOn": {
            "type": "string",
            "description": "Date/time (in UTC) when the appointment assignment was assigned",
            "format": "date-time"
          },
          "status": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.V2.JobAppointmentAssignmentStatus"
              }
            ],
            "description": "Status of the appointment assignment"
          },
          "isPaused": {
            "type": "boolean",
            "description": "Whether appointment assignment is paused"
          },
          "jobId": {
            "type": "integer",
            "description": "ID of the job",
            "format": "int64"
          },
          "appointmentId": {
            "type": "integer",
            "description": "ID of the appointment",
            "format": "int64"
          },
          "createdOn": {
            "type": "string",
            "description": "When the assignment was created (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "When the assignment was modified (in UTC)",
            "format": "date-time"
          },
          "active": {
            "type": "boolean",
            "description": "Indicate if assignment is active"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.GetNonJobAppointmentResponse": {
        "required": [
          "id",
          "technicianId",
          "start",
          "name",
          "duration",
          "timesheetCodeId",
          "summary",
          "clearDispatchBoard",
          "clearTechnicianView",
          "removeTechnicianFromCapacityPlanning",
          "allDay",
          "showOnTechnicianSchedule",
          "active",
          "createdOn",
          "createdById"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64"
          },
          "technicianId": {
            "type": "integer",
            "format": "int64"
          },
          "start": {
            "type": "string",
            "format": "date-time"
          },
          "name": {
            "type": "string"
          },
          "duration": {
            "type": "string",
            "format": "duration"
          },
          "timesheetCodeId": {
            "type": "integer",
            "format": "int64"
          },
          "summary": {
            "type": "string"
          },
          "clearDispatchBoard": {
            "type": "boolean"
          },
          "clearTechnicianView": {
            "type": "boolean"
          },
          "removeTechnicianFromCapacityPlanning": {
            "type": "boolean"
          },
          "allDay": {
            "type": "boolean"
          },
          "showOnTechnicianSchedule": {
            "type": "boolean"
          },
          "active": {
            "type": "boolean"
          },
          "createdOn": {
            "type": "string",
            "format": "date-time"
          },
          "createdById": {
            "type": "integer",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Dispatch.V2.NonJobAppointmentResponse": {
        "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/Dispatch.V2.NonJobAppointmentResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Dispatch.V2.NonJobAppointmentResponse": {
        "required": [
          "id",
          "technicianId",
          "start",
          "name",
          "duration",
          "timesheetCodeId",
          "summary",
          "clearDispatchBoard",
          "clearTechnicianView",
          "removeTechnicianFromCapacityPlanning",
          "allDay",
          "showOnTechnicianSchedule",
          "active",
          "createdOn",
          "modifiedOn",
          "createdById"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Non-job appointment id",
            "format": "int64"
          },
          "technicianId": {
            "type": "integer",
            "description": "Non-job appointment's technician id",
            "format": "int64"
          },
          "start": {
            "type": "string",
            "description": "Non-job appointment's start date/time (in UTC)",
            "format": "date-time"
          },
          "name": {
            "type": "string",
            "description": "Non-job appointment name"
          },
          "duration": {
            "type": "string",
            "description": "Non-job appointment duration",
            "format": "duration"
          },
          "timesheetCodeId": {
            "type": "integer",
            "description": "Unique Id of timesheet code",
            "format": "int64"
          },
          "summary": {
            "type": "string",
            "description": "Non-job appointment summary"
          },
          "clearDispatchBoard": {
            "type": "boolean",
            "description": "Indicate if non-job appointment should be cleared from dispatch board once event is over"
          },
          "clearTechnicianView": {
            "type": "boolean",
            "description": "Indicate if non-job appointment should be cleared from technician's calendar once event is over"
          },
          "removeTechnicianFromCapacityPlanning": {
            "type": "boolean",
            "description": "Indicate if technician availability should be remove from legacy capacity planning"
          },
          "allDay": {
            "type": "boolean",
            "description": "Indicate if non-job appointment is scheduled for whole day"
          },
          "showOnTechnicianSchedule": {
            "type": "boolean",
            "description": "Whether the non-job appointment shows on the technicians schedule even if there is no timesheet"
          },
          "active": {
            "type": "boolean",
            "description": "Indicate if non-job appointment is active"
          },
          "createdOn": {
            "type": "string",
            "description": "When the appointment was created (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "When the appointment was last modified (in UTC)",
            "format": "date-time"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of the user who created the non-job appointment",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.Contracts.NonJobAppointment.CreateNonJobAppointmentResult": {
        "required": [
          "id",
          "technicianId",
          "start",
          "name",
          "duration",
          "timesheetCodeId",
          "summary",
          "clearDispatchBoard",
          "clearTechnicianView",
          "removeTechnicianFromCapacityPlanning",
          "allDay",
          "showOnTechnicianSchedule",
          "active",
          "createdOn",
          "createdById",
          "daysOfWeek"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Non-job appointment id",
            "format": "int64"
          },
          "technicianId": {
            "type": "integer",
            "description": "Non-job appointment's technician id",
            "format": "int64"
          },
          "start": {
            "type": "string",
            "description": "Non-job appointment's start date/time (in UTC)",
            "format": "date-time"
          },
          "name": {
            "type": "string",
            "description": "Non-job appointment name"
          },
          "duration": {
            "type": "string",
            "description": "Non-job appointment duration",
            "format": "duration"
          },
          "timesheetCodeId": {
            "type": "integer",
            "description": "Unique Id of timesheet code",
            "format": "int64"
          },
          "summary": {
            "type": "string",
            "description": "Non-job appointment summary"
          },
          "clearDispatchBoard": {
            "type": "boolean",
            "description": "Indicate if non-job appointment should be cleared from dispatch board once event is over"
          },
          "clearTechnicianView": {
            "type": "boolean",
            "description": "Indicate if non-job appointment should be cleared from technician's calendar once event is over"
          },
          "removeTechnicianFromCapacityPlanning": {
            "type": "boolean",
            "description": "Indicate if technician availability should be remove from legacy capacity planning"
          },
          "allDay": {
            "type": "boolean",
            "description": "Indicate if non-job appointment is scheduled for whole day"
          },
          "showOnTechnicianSchedule": {
            "type": "boolean",
            "description": "Whether the non-job appointment shows on the technicians schedule even if there is no timesheet"
          },
          "active": {
            "type": "boolean",
            "description": "Indicate if non-job appointment is active"
          },
          "createdOn": {
            "type": "string",
            "description": "When the appointment was created (in UTC)",
            "format": "date-time"
          },
          "createdById": {
            "type": "integer",
            "description": "ID of the user who created the non-job appointment",
            "format": "int64"
          },
          "repeat": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Indicate if non-job appointment is repeating"
          },
          "countOccurrences": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Number of occurrences of the repeating non-job appointment",
            "format": "int32"
          },
          "interval": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Interval of the repeating non-job appointment",
            "format": "int32"
          },
          "frequency": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.Contracts.NonJobAppointment.RepeatFrequency_Int32"
              },
              {
                "type": "null"
              }
            ],
            "description": "Frequency of the repeating non-job appointment"
          },
          "endType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.Contracts.NonJobAppointment.RepeatEndType_Int32"
              },
              {
                "type": "null"
              }
            ],
            "description": "End type of the repeating non-job appointment"
          },
          "endOn": {
            "type": [
              "string",
              "null"
            ],
            "description": "End Date of the repeating non-job appointment",
            "format": "date-time"
          },
          "daysOfWeek": {
            "type": "string",
            "description": "Days of the week of the repeating non-job appointment"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.Contracts.NonJobAppointment.RepeatFrequency": {
        "enum": [
          "Daily",
          "Weekly",
          "Monthly",
          "Yearly"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Daily",
          "Weekly",
          "Monthly",
          "Yearly"
        ]
      },
      "Dispatch.Contracts.NonJobAppointment.RepeatEndType": {
        "enum": [
          "Never",
          "After",
          "On"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Never",
          "After",
          "On"
        ]
      },
      "Dispatch.Contracts.NonJobAppointment.RepeatFrequency_Int32": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32",
        "x-enumNames": [
          "Daily",
          "Weekly",
          "Monthly",
          "Yearly"
        ]
      },
      "Dispatch.Contracts.NonJobAppointment.RepeatEndType_Int32": {
        "enum": [
          0,
          1,
          2
        ],
        "type": "integer",
        "format": "int32",
        "x-enumNames": [
          "Never",
          "After",
          "On"
        ]
      },
      "Dispatch.V2.CreateNonJobAppointmentRequest": {
        "required": [
          "technicianId",
          "start",
          "duration",
          "name"
        ],
        "type": "object",
        "properties": {
          "technicianId": {
            "type": "integer",
            "format": "int64"
          },
          "start": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "string",
            "format": "duration"
          },
          "name": {
            "type": "string"
          },
          "timesheetCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "summary": {
            "type": [
              "string",
              "null"
            ]
          },
          "clearDispatchBoard": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "clearTechnicianView": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "showOnTechnicianSchedule": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "removeTechnicianFromCapacityPlanning": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "allDay": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "repeat": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "countOccurrences": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "interval": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "frequency": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.Contracts.NonJobAppointment.RepeatFrequency"
              },
              {
                "type": "null"
              }
            ]
          },
          "endType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.Contracts.NonJobAppointment.RepeatEndType"
              },
              {
                "type": "null"
              }
            ]
          },
          "endOn": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "daysOfWeek": {
            "type": [
              "string",
              "null"
            ],
            "example": "Monday, Wednesday, Friday"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.NonJobAppointmentUpdateRequest": {
        "required": [
          "technicianId",
          "start",
          "duration",
          "name"
        ],
        "type": "object",
        "properties": {
          "technicianId": {
            "type": "integer",
            "format": "int64"
          },
          "start": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "string",
            "format": "duration"
          },
          "name": {
            "type": "string"
          },
          "timesheetCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "summary": {
            "type": [
              "string",
              "null"
            ]
          },
          "clearDispatchBoard": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "clearTechnicianView": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "showOnTechnicianSchedule": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "removeTechnicianFromCapacityPlanning": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "allDay": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "repeat": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "countOccurrences": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "interval": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "frequency": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.Contracts.NonJobAppointment.RepeatFrequency"
              },
              {
                "type": "null"
              }
            ]
          },
          "endType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.Contracts.NonJobAppointment.RepeatEndType"
              },
              {
                "type": "null"
              }
            ]
          },
          "endOn": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "daysOfWeek": {
            "type": [
              "string",
              "null"
            ],
            "example": "Monday, Wednesday, Friday"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.Contracts.NonJobAppointment.DeleteNonJobAppointmentResult": {
        "required": [
          "message",
          "id"
        ],
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Dispatch.V2.TeamResponse": {
        "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/Dispatch.V2.TeamResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Dispatch.V2.TeamResponse": {
        "required": [
          "id",
          "active",
          "createdOn",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique id of the team record",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the team is enabled"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Descriptive identifier"
          },
          "createdBy": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Created by User ID",
            "format": "int64"
          },
          "createdOn": {
            "type": "string",
            "description": "Created on date",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Modified on date",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CreateTeamResponse": {
        "required": [
          "id",
          "active",
          "createdOn",
          "modifiedOn",
          "created"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique id of the team record",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the team is enabled"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Descriptive identifier"
          },
          "createdBy": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Created by User ID",
            "format": "int64"
          },
          "createdOn": {
            "type": "string",
            "description": "Created on date",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Modified on date",
            "format": "date-time"
          },
          "created": {
            "type": "boolean",
            "description": "Whether the team was created or this is an existing record"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CreateTeamRequest": {
        "required": [
          "active"
        ],
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean",
            "description": "Whether the team is enabled"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Descriptive identifier"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Dispatch.V2.TechnicianShiftResponse": {
        "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/Dispatch.V2.TechnicianShiftResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Dispatch.V2.TechnicianShiftResponse": {
        "required": [
          "id",
          "shiftType",
          "title",
          "active",
          "technicianId",
          "start",
          "end",
          "createdOn",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique id of the shift record",
            "format": "int64"
          },
          "shiftType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.V2.ShiftType"
              }
            ],
            "description": "How the shift is displayed and contributes to availability calculations"
          },
          "title": {
            "type": "string",
            "description": "Descriptive identifier"
          },
          "note": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional detailed explanation of the shift"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the shift is enabled"
          },
          "technicianId": {
            "type": "integer",
            "description": ">Unique id of the technician this shift applies to",
            "format": "int64"
          },
          "start": {
            "type": "string",
            "description": "When the shift begins",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "description": "When the shift ends",
            "format": "date-time"
          },
          "timesheetCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Timesheet code ID of shift",
            "format": "int64"
          },
          "createdOn": {
            "type": "string",
            "description": "When the shift was created (in UTC)",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "When the shift was modified (in UTC)",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.ShiftType": {
        "enum": [
          "Normal",
          "OnCall",
          "TimeOff"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Normal",
          "OnCall",
          "TimeOff"
        ]
      },
      "Dispatch.V2.TechnicianShiftCreateResponse": {
        "required": [
          "created",
          "technicianShifts"
        ],
        "type": "object",
        "properties": {
          "created": {
            "type": "boolean"
          },
          "technicianShifts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TechnicianShiftResponse"
            }
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CreateTechnicianShiftRequest": {
        "required": [
          "technicianIds",
          "shiftType",
          "title",
          "start",
          "end",
          "repeatType"
        ],
        "type": "object",
        "properties": {
          "technicianIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          },
          "shiftType": {
            "$ref": "#/components/schemas/Dispatch.V2.ShiftType"
          },
          "title": {
            "minLength": 1,
            "type": "string"
          },
          "start": {
            "type": "string",
            "description": "When the shift begins",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "description": "When the shift ends",
            "format": "date-time"
          },
          "note": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional detailed explanation of the shift"
          },
          "timesheetCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Timesheet code ID of shift",
            "format": "int64"
          },
          "repeatType": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Dispatch.V2.ShiftRepeatType"
              }
            ],
            "description": "Repeat type of the shift (Never, Daily, Weekly)",
            "example": "Weekly"
          },
          "repeatEndDate": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date to stop repeating on",
            "format": "date-time"
          },
          "repeatInterval": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "shiftDays": {
            "type": [
              "string",
              "null"
            ],
            "description": "List of Days to repeat the shift on",
            "example": "Monday, Wednesday, Friday"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.ShiftRepeatType": {
        "enum": [
          "Never",
          "Daily",
          "Weekly"
        ],
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Never",
          "Daily",
          "Weekly"
        ]
      },
      "Dispatch.V2.TechnicianShiftUpdateResponse": {
        "required": [
          "technicianShifts"
        ],
        "type": "object",
        "properties": {
          "technicianShifts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TechnicianShiftResponse"
            }
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.UpdateTechnicianShiftRequest": {
        "type": "object",
        "properties": {
          "shiftType": {
            "$ref": "#/components/schemas/Dispatch.V2.ShiftType"
          },
          "title": {
            "type": "string"
          },
          "start": {
            "type": "string",
            "description": "When the shift begins",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "description": "When the shift ends",
            "format": "date-time"
          },
          "note": {
            "type": "string",
            "description": "Optional detailed explanation of the shift"
          },
          "timesheetCodeId": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Timesheet code ID of shift",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.Contracts.TechnicianShift.DeleteTechnicianShiftResult": {
        "required": [
          "message",
          "id"
        ],
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          },
          "id": {
            "type": "integer",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.Contracts.TechnicianShift.BulkDeleteTechnicianShiftResult": {
        "required": [
          "message",
          "deletedIds"
        ],
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          },
          "deletedIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            }
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.BulkDeleteTechnicianShiftRequest": {
        "required": [
          "start",
          "end"
        ],
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "description": "The start date for the range deletion",
            "format": "date-time"
          },
          "end": {
            "type": "string",
            "description": "The end date for the range deletion",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Dispatch.V2.TechnicianSkillResponse": {
        "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/Dispatch.V2.TechnicianSkillResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Dispatch.V2.TechnicianSkillResponse": {
        "required": [
          "id",
          "name",
          "active",
          "technicianId",
          "createdOn",
          "modifiedOn"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique id of the technician skill record."
          },
          "name": {
            "type": "string",
            "description": "Descriptive identifier."
          },
          "active": {
            "type": "boolean",
            "description": "Whether the technician skill is enabled."
          },
          "technicianId": {
            "type": "integer",
            "description": "Unique id of the technician this technician skill applies to.",
            "format": "int64"
          },
          "jobTypeIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Unique ids of job types this technician skill applies to."
          },
          "createdOn": {
            "type": "string",
            "description": "When the technician skill was created (in UTC).",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "When the technician skill was modified (in UTC).",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "description": "Represents a technician skill response."
      },
      "Dispatch.V2.UpdateTechnicianSkillsResponse": {
        "required": [
          "updated",
          "technicianSkills"
        ],
        "type": "object",
        "properties": {
          "updated": {
            "type": "boolean",
            "description": "Whether the update was successful"
          },
          "technicianSkills": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Dispatch.V2.TechnicianSkillResponse"
            },
            "description": "List of all technician skills after the update"
          }
        },
        "additionalProperties": false,
        "description": "Response for updating technician skills"
      },
      "Dispatch.V2.UpdateTechnicianSkillsRequest": {
        "required": [
          "technicianId",
          "skillIds",
          "replaceExistingSkills"
        ],
        "type": "object",
        "properties": {
          "technicianId": {
            "type": "integer",
            "description": "Technician Id to assign Skills to",
            "format": "int64"
          },
          "skillIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "Skills Id to associate with the Technician"
          },
          "replaceExistingSkills": {
            "type": "boolean",
            "description": "Whether this replaces all existing skills or just appends the skills"
          }
        },
        "additionalProperties": false,
        "description": "Assigns or replaces skills on a technician"
      },
      "Dispatch.V2.CreateTechnicianSkillRequest": {
        "required": [
          "technicianId",
          "name",
          "active"
        ],
        "type": "object",
        "properties": {
          "technicianId": {
            "type": "integer",
            "description": "Technician Id to assign the newly created skill to",
            "format": "int64"
          },
          "name": {
            "type": "string",
            "description": "Name of the skill"
          },
          "active": {
            "type": "boolean",
            "description": "If the skill is active"
          }
        },
        "additionalProperties": false,
        "description": "Creates a new skill and assigns it to a technician"
      },
      "Dispatch.Contracts.TechnicianSkill.DeleteTechnicianSkillResult": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "description": "Result of deleting a technician skill association."
      },
      "Dispatch.V2.TechnicianTrackingResponse": {
        "required": [
          "technicianTrackingUrl"
        ],
        "type": "object",
        "properties": {
          "technicianTrackingUrl": {
            "type": "string",
            "description": "Url to allow tracking the technician's location"
          }
        },
        "additionalProperties": false
      },
      "PaginatedResponse_Of_Dispatch.V2.ZoneResponse": {
        "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/Dispatch.V2.ZoneResponse"
            },
            "description": "The collection of result items, will never have more than PageSize items"
          }
        },
        "additionalProperties": false,
        "description": "Represents paginated API response."
      },
      "Dispatch.V2.ZoneResponse": {
        "required": [
          "id",
          "active",
          "createdBy",
          "createdOn",
          "modifiedOn",
          "serviceDaysEnabled"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique id of the zone record",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the zone is enabled"
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Descriptive identifier"
          },
          "zips": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "A list of assigned zip codes to the zone"
          },
          "cities": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "A list of assigned cities to the zone"
          },
          "territoryNumbers": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "A list of assigned territory numbers to the zone"
          },
          "locnNumbers": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "A list of assigned LOCN numbers to the zone"
          },
          "createdBy": {
            "type": "integer",
            "description": "User ID who created the zone",
            "format": "int64"
          },
          "createdOn": {
            "type": "string",
            "description": "Date/time (in UTC) the zone was created",
            "format": "date-time"
          },
          "modifiedOn": {
            "type": "string",
            "description": "Date/time (in UTC) the zone was last modified",
            "format": "date-time"
          },
          "serviceDaysEnabled": {
            "type": "boolean",
            "description": "Whether the service days option is enabled"
          },
          "serviceDays": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "A list of assigned service days"
          },
          "businessUnits": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "A list of assigned business units"
          },
          "technicians": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "A list of assigned technicians"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CreateOrUpdateZoneResponse": {
        "required": [
          "id",
          "active",
          "name",
          "zips",
          "cities",
          "territoryNumbers",
          "locnNumbers",
          "serviceDaysEnabled",
          "serviceDaysIds",
          "businessUnits"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Unique id of the zone record",
            "format": "int64"
          },
          "active": {
            "type": "boolean",
            "description": "Whether the zone is enabled"
          },
          "name": {
            "type": "string",
            "description": "Descriptive identifier"
          },
          "zips": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of assigned zip codes to the zone"
          },
          "cities": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of assigned cities to the zone"
          },
          "territoryNumbers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of assigned territory numbers to the zone"
          },
          "locnNumbers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "A list of assigned LOCN numbers to the zone"
          },
          "serviceDaysEnabled": {
            "type": "boolean",
            "description": "Whether the service days option is enabled"
          },
          "serviceDaysIds": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "A list of assigned service days"
          },
          "businessUnits": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "A list of assigned business units"
          }
        },
        "additionalProperties": false
      },
      "Dispatch.V2.CreateOrUpdateZoneRequestArgs": {
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Descriptive identifier"
          },
          "zips": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "A list of assigned zip codes to the zone"
          },
          "cities": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "A list of assigned cities to the zone"
          },
          "territoryNumbers": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "A list of assigned territory numbers to the zone"
          },
          "locnNumbers": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "A list of assigned LOCN numbers to the zone"
          },
          "serviceDaysEnabled": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether the service days option is enabled"
          },
          "serviceDaysIds": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "A list of assigned service days"
          },
          "businessUnits": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "int64"
            },
            "description": "A list of assigned business units"
          }
        },
        "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.dis.gpspings:w": "Dispatch → GPS Pings (Write)",
              "tn.dis.appointmentassignments:r": "Dispatch → Appointment Assignments (Read)",
              "tn.dis.appointmentassignments:w": "Dispatch → Appointment Assignments (Write)",
              "tn.dis.arrivalwindows:r": "Dispatch → Arrival Windows (Read)",
              "tn.dis.arrivalwindows:w": "Dispatch → Arrival Windows (Write)",
              "tn.dis.businesshours:r": "Dispatch → Business Hours (Read)",
              "tn.dis.businesshours:w": "Dispatch → Business Hours (Write)",
              "tn.dis.capacity:w": "Dispatch → Capacity (Write)",
              "tn.dis.nonjobappointments:r": "Dispatch → Non-Job Appointments (Read)",
              "tn.dis.nonjobappointments:w": "Dispatch → Non-Job Appointments (Write)",
              "tn.dis.teams:r": "Dispatch → Teams (Read)",
              "tn.dis.teams:w": "Dispatch → Teams (Write)",
              "tn.dis.technicianshifts:r": "Dispatch → Technician Shifts (Read)",
              "tn.dis.technicianshifts:w": "Dispatch → Technician Shifts (Write)",
              "tn.dis.technicianskills:r": "Dispatch → Technician Skills (Read)",
              "tn.dis.technicianskills:w": "Dispatch → Technician Skills (Write)",
              "tn.dis.techniciantracking:r": "Dispatch → Technician Tracking (Read)",
              "tn.dis.zones:r": "Dispatch → Zones (Read)",
              "tn.dis.zones:w": "Dispatch → Zones (Write)"
            }
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "AdaptiveCapacity"
    }
  ]
}