openapi: 3.0.4 info: title: D-Tools Cloud API description: API to integrate with the D-Tools Cloud application. termsOfService: https://www.d-tools.com/d-tools-software-terms-of-services contact: name: api@d-toolshelp.com email: api@d-toolshelp.com license: name: License Agreement url: https://www.d-tools.com/license-agreement version: v1 servers: - url: https://dtcloudapi.d-tools.cloud paths: /api/v1/ChangeOrders/GetChangeOrders: get: tags: - ChangeOrders parameters: - name: projectId in: query schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderLite' text/json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderLite' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/ChangeOrders/GetChangeOrder: get: tags: - ChangeOrders parameters: - name: id in: query schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderDetail' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Clients/GetClients: get: tags: - Clients parameters: - name: types in: query schema: type: array items: type: string - name: owners in: query schema: type: array items: type: string - name: fromCreatedDate in: query schema: type: string format: date-time - name: toCreatedDate in: query schema: type: string format: date-time - name: fromModifiedDate in: query schema: type: string format: date-time - name: toModifiedDate in: query schema: type: string format: date-time - name: includeInactive in: query schema: type: boolean - name: includeTotalCount in: query schema: type: boolean - name: search in: query schema: type: string - name: sort in: query schema: type: string - name: page in: query schema: type: integer format: int32 default: 1 - name: pageSize in: query schema: type: integer format: int32 default: 20 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetClientsResult' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetClientsResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Clients/GetClient: get: tags: - Clients parameters: - name: id in: query schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.ClientDetail' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.ClientDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Clients/CreateClient: post: tags: - Clients requestBody: content: application/json-patch+json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.Client' application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.Client' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.Client' application/*+json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.Client' responses: '200': description: OK content: application/json: schema: type: string format: uuid text/json: schema: type: string format: uuid '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Clients/UpdateClient: put: tags: - Clients parameters: - name: id in: query schema: type: string format: uuid requestBody: content: application/json-patch+json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.Client' application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.Client' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.Client' application/*+json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.Client' responses: '200': description: OK content: application/json: schema: type: string text/json: schema: type: string '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Files/GetFile: get: tags: - Files parameters: - name: id in: query schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.FileDetail' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.FileDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Opportunities/GetOpportunities: get: tags: - Opportunities parameters: - name: types in: query schema: type: array items: type: string - name: clientIds in: query schema: type: array items: type: string format: uuid - name: stageGroups in: query schema: type: array items: type: string - name: stages in: query schema: type: array items: type: string - name: priorities in: query schema: type: array items: type: string - name: owners in: query schema: type: array items: type: string - name: fromEstimatedCloseDate in: query schema: type: string format: date-time - name: toEstimatedCloseDate in: query schema: type: string format: date-time - name: fromActualCloseDate in: query schema: type: string format: date-time - name: toActualCloseDate in: query schema: type: string format: date-time - name: fromCreatedDate in: query schema: type: string format: date-time - name: toCreatedDate in: query schema: type: string format: date-time - name: fromModifiedDate in: query schema: type: string format: date-time - name: toModifiedDate in: query schema: type: string format: date-time - name: includeArchived in: query schema: type: boolean - name: includeTotalCount in: query schema: type: boolean - name: search in: query schema: type: string - name: sort in: query schema: type: string - name: page in: query schema: type: integer format: int32 default: 1 - name: pageSize in: query schema: type: integer format: int32 default: 20 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetOpportunitiesResult' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetOpportunitiesResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Opportunities/GetOpportunity: get: tags: - Opportunities parameters: - name: id in: query schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.OpportunityDetail' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.OpportunityDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Opportunities/CreateOpportunity: post: tags: - Opportunities requestBody: content: application/json-patch+json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.NewOpportunity' application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.NewOpportunity' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.NewOpportunity' application/*+json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.NewOpportunity' responses: '200': description: OK content: application/json: schema: type: string format: uuid text/json: schema: type: string format: uuid '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Opportunities/UpdateOpportunity: put: tags: - Opportunities parameters: - name: id in: query schema: type: string format: uuid requestBody: content: application/json-patch+json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.UpdateOpportunity' application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.UpdateOpportunity' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.UpdateOpportunity' application/*+json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.UpdateOpportunity' responses: '200': description: OK content: application/json: schema: type: string text/json: schema: type: string '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Products/GetProducts: get: tags: - Products parameters: - name: brands in: query schema: type: array items: type: string - name: categories in: query schema: type: array items: type: string - name: suppliers in: query schema: type: array items: type: string - name: fromCreatedDate in: query schema: type: string format: date-time - name: toCreatedDate in: query schema: type: string format: date-time - name: fromModifiedDate in: query schema: type: string format: date-time - name: toModifiedDate in: query schema: type: string format: date-time - name: stockItemsOnly in: query schema: type: boolean - name: includeInactive in: query schema: type: boolean - name: includeTotalCount in: query schema: type: boolean - name: search in: query schema: type: string - name: sort in: query schema: type: string - name: page in: query schema: type: integer format: int32 default: 1 - name: pageSize in: query schema: type: integer format: int32 default: 20 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetProductsResult' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetProductsResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Products/GetProduct: get: tags: - Products parameters: - name: id in: query schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.ProductDetail' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.ProductDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Products/UpdateProductPrices: put: tags: - Products requestBody: content: application/json-patch+json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductPrice' application/json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductPrice' text/json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductPrice' application/*+json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductPrice' responses: '200': description: OK content: application/json: schema: type: string text/json: schema: type: string '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Products/UpdateProductBarcodes: put: tags: - Products requestBody: content: application/json-patch+json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductBarcode' application/json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductBarcode' text/json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductBarcode' application/*+json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductBarcode' responses: '200': description: OK content: application/json: schema: type: string text/json: schema: type: string '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Products/UpdateProductStatuses: put: tags: - Products requestBody: content: application/json-patch+json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductStatus' application/json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductStatus' text/json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductStatus' application/*+json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductStatus' responses: '200': description: OK content: application/json: schema: type: string text/json: schema: type: string '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Projects/GetProjects: get: tags: - Projects parameters: - name: clientIds in: query schema: type: array items: type: string format: uuid - name: stageGroups in: query schema: type: array items: type: string - name: stages in: query schema: type: array items: type: string - name: priorities in: query schema: type: array items: type: string - name: projectManagers in: query schema: type: array items: type: string - name: fromCompletedDate in: query schema: type: string format: date-time - name: toCompletedDate in: query schema: type: string format: date-time - name: fromCreatedDate in: query schema: type: string format: date-time - name: toCreatedDate in: query schema: type: string format: date-time - name: fromModifiedDate in: query schema: type: string format: date-time - name: toModifiedDate in: query schema: type: string format: date-time - name: includeArchived in: query schema: type: boolean - name: includeTotalCount in: query schema: type: boolean - name: search in: query schema: type: string - name: sort in: query schema: type: string - name: page in: query schema: type: integer format: int32 default: 1 - name: pageSize in: query schema: type: integer format: int32 default: 20 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetProjectsResult' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetProjectsResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Projects/GetProject: get: tags: - Projects parameters: - name: id in: query schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectDetail' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Projects/UpdateProject: put: tags: - Projects parameters: - name: id in: query schema: type: string format: uuid requestBody: content: application/json-patch+json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.UpdateProject' application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.UpdateProject' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.UpdateProject' application/*+json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.UpdateProject' responses: '200': description: OK content: application/json: schema: type: string text/json: schema: type: string '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/PurchaseOrders/GetPurchaseOrders: get: tags: - PurchaseOrders parameters: - name: suppliers in: query schema: type: array items: type: string - name: projectIds in: query schema: type: array items: type: string format: uuid - name: statuses in: query schema: type: array items: type: string - name: fromOrderedDate in: query schema: type: string format: date-time - name: toOrderedDate in: query schema: type: string format: date-time - name: fromReceivedDate in: query schema: type: string format: date-time - name: toReceivedDate in: query schema: type: string format: date-time - name: fromCreatedDate in: query schema: type: string format: date-time - name: toCreatedDate in: query schema: type: string format: date-time - name: fromModifiedDate in: query schema: type: string format: date-time - name: toModifiedDate in: query schema: type: string format: date-time - name: includeArchived in: query schema: type: boolean - name: includeTotalCount in: query schema: type: boolean - name: search in: query schema: type: string - name: sort in: query schema: type: string - name: page in: query schema: type: integer format: int32 default: 1 - name: pageSize in: query schema: type: integer format: int32 default: 20 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetPurchaseOrdersResult' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetPurchaseOrdersResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/PurchaseOrders/GetPurchaseOrder: get: tags: - PurchaseOrders parameters: - name: id in: query schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.PurchaseOrderDetail' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.PurchaseOrderDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Quotes/GetQuotes: get: tags: - Quotes parameters: - name: opportunityId in: query schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteLite' text/json: schema: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteLite' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/Quotes/GetQuote: get: tags: - Quotes parameters: - name: id in: query schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteDetail' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/ServiceContracts/GetServiceContracts: get: tags: - ServiceContracts parameters: - name: clientIds in: query schema: type: array items: type: string format: uuid - name: projectIds in: query schema: type: array items: type: string format: uuid - name: fromStartDate in: query schema: type: string format: date-time - name: toStartDate in: query schema: type: string format: date-time - name: fromEndDate in: query schema: type: string format: date-time - name: toEndDate in: query schema: type: string format: date-time - name: fromPaymentDueDate in: query schema: type: string format: date-time - name: toPaymentDueDate in: query schema: type: string format: date-time - name: fromCanceledDate in: query schema: type: string format: date-time - name: toCanceledDate in: query schema: type: string format: date-time - name: fromCreatedDate in: query schema: type: string format: date-time - name: toCreatedDate in: query schema: type: string format: date-time - name: fromModifiedDate in: query schema: type: string format: date-time - name: toModifiedDate in: query schema: type: string format: date-time - name: includeTotalCount in: query schema: type: boolean - name: search in: query schema: type: string - name: sort in: query schema: type: string - name: page in: query schema: type: integer format: int32 default: 1 - name: pageSize in: query schema: type: integer format: int32 default: 20 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetServiceContractsResult' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetServiceContractsResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/ServiceContracts/GetServiceContract: get: tags: - ServiceContracts parameters: - name: id in: query schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.ServiceContractDetail' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.ServiceContractDetail' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error /api/v1/TimeEntries/GetTimeEntries: get: tags: - TimeEntries parameters: - name: types in: query schema: type: array items: type: string - name: resources in: query schema: type: array items: type: string - name: fromDate in: query schema: type: string format: date-time - name: toDate in: query schema: type: string format: date-time - name: clientIds in: query schema: type: array items: type: string format: uuid - name: projectIds in: query schema: type: array items: type: string format: uuid - name: serviceCallIds in: query schema: type: array items: type: string format: uuid - name: laborTypes in: query schema: type: array items: type: string - name: overtimesOnly in: query schema: type: boolean - name: includeArchived in: query schema: type: boolean - name: includeTotalCount in: query schema: type: boolean - name: search in: query schema: type: string - name: sort in: query schema: type: string - name: page in: query schema: type: integer format: int32 default: 1 - name: pageSize in: query schema: type: integer format: int32 default: 20 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetTimeEntriesResult' text/json: schema: $ref: '#/components/schemas/DTools.Cloud.Data.GetTimeEntriesResult' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' text/json: schema: $ref: '#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails' '500': description: Internal Server Error components: schemas: DTools.Cloud.Data.Address: type: object properties: name: type: string nullable: true addressLine1: type: string nullable: true addressLine2: type: string nullable: true city: type: string nullable: true state: type: string nullable: true postalCode: type: string nullable: true country: type: string nullable: true additionalProperties: false DTools.Cloud.Data.AddressDetail: type: object properties: name: type: string nullable: true addressLine1: type: string nullable: true addressLine2: type: string nullable: true city: type: string nullable: true state: type: string nullable: true postalCode: type: string nullable: true country: type: string nullable: true additionalProperties: false DTools.Cloud.Data.ChangeOrderAdjustment: type: object properties: name: type: string nullable: true isPercent: type: boolean percent: type: number format: double nullable: true amount: type: number format: double nullable: true isTaxable: type: boolean taxId: type: integer format: int32 nullable: true applyTo: type: string nullable: true readOnly: true additionalProperties: false DTools.Cloud.Data.ChangeOrderDetail: type: object properties: id: type: string format: uuid projectId: type: string format: uuid name: type: string nullable: true number: type: integer format: int32 type: type: string nullable: true readOnly: true systemState: type: string nullable: true readOnly: true state: type: string nullable: true price: type: number format: double isIgnoreItemLaborItems: type: boolean isAddItemsAsNonBillable: type: boolean isExemptFromTax: type: boolean createdDate: type: string format: date-time modifiedDate: type: string format: date-time scopeOfWork: type: string nullable: true locations: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderLocation' nullable: true systems: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderSystem' nullable: true phases: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderPhase' nullable: true laborTypes: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderLaborType' nullable: true lengths: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderLength' nullable: true discounts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderDiscount' nullable: true items: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderItem' nullable: true adjustments: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderAdjustment' nullable: true taxSettings: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderTaxSettings' taxes: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderTax' nullable: true paymentTerms: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderPaymentTerm' nullable: true payments: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderPayment' nullable: true additionalProperties: false DTools.Cloud.Data.ChangeOrderDiscount: type: object properties: id: type: integer format: int32 name: type: string nullable: true isRange: type: boolean isPercent: type: boolean percent: type: number format: double nullable: true maximumPercent: type: number format: double nullable: true amount: type: number format: double nullable: true maximumAmount: type: number format: double nullable: true additionalProperties: false DTools.Cloud.Data.ChangeOrderItem: type: object properties: id: type: integer format: int32 catalogId: type: string format: uuid type: type: string nullable: true readOnly: true allowanceType: type: string nullable: true readOnly: true packageType: type: string nullable: true readOnly: true laborTypeId: type: integer format: int32 nullable: true name: type: string nullable: true brand: type: string nullable: true model: type: string nullable: true partNumber: type: string nullable: true shortDescription: type: string nullable: true description: type: string nullable: true category: type: string nullable: true imageUrl: type: string nullable: true quantity: type: integer format: int32 isLengthBased: type: boolean lengthId: type: integer format: int32 nullable: true length: type: integer format: int32 nullable: true isIgnorePackageItemLaborItems: type: boolean msrp: type: number format: double nullable: true unitCost: type: number format: double nullable: true unitPrice: type: number format: double nullable: true margin: type: number format: double nullable: true markup: type: number format: double nullable: true costPerLength: type: number format: double nullable: true pricePerLength: type: number format: double nullable: true discountId: type: integer format: int32 nullable: true discount: type: number format: double nullable: true unitLaborTime: type: integer format: int32 nullable: true unitLaborPrice: type: number format: double nullable: true isBillable: type: boolean isTaxable: type: boolean taxId: type: integer format: int32 nullable: true supplier: type: string nullable: true locationId: type: integer format: int32 nullable: true systemId: type: integer format: int32 nullable: true phaseId: type: integer format: int32 nullable: true upcBarcode: type: string nullable: true eanBarcode: type: string nullable: true itfBarcode: type: string nullable: true isClientSupplied: type: boolean orderStatus: type: string nullable: true installStatus: type: string nullable: true parentId: type: integer format: int32 nullable: true packageId: type: integer format: int32 nullable: true changeType: type: string nullable: true laborItems: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ChangeOrderItemLaborItem' nullable: true additionalProperties: false DTools.Cloud.Data.ChangeOrderItemLaborItem: type: object properties: laborTypeId: type: integer format: int32 time: type: integer format: int32 price: type: number format: double timePerLength: type: integer format: int32 nullable: true pricePerLength: type: number format: double nullable: true phaseId: type: integer format: int32 nullable: true isBillable: type: boolean additionalProperties: false DTools.Cloud.Data.ChangeOrderLaborType: type: object properties: id: type: integer format: int32 catalogId: type: string format: uuid name: type: string nullable: true shortDescription: type: string nullable: true description: type: string nullable: true hourlyCost: type: number format: double nullable: true hourlyPrice: type: number format: double nullable: true margin: type: number format: double nullable: true markup: type: number format: double nullable: true difficultyFactor: type: number format: double totalTimeInSeconds: type: integer format: int64 isTaxable: type: boolean taxId: type: integer format: int32 nullable: true additionalProperties: false DTools.Cloud.Data.ChangeOrderLength: type: object properties: id: type: integer format: int32 name: type: string nullable: true length: type: integer format: int32 additionalProperties: false DTools.Cloud.Data.ChangeOrderLite: type: object properties: id: type: string format: uuid name: type: string nullable: true number: type: integer format: int32 type: type: string nullable: true readOnly: true systemState: type: string nullable: true readOnly: true state: type: string nullable: true price: type: number format: double createdDate: type: string format: date-time modifiedDate: type: string format: date-time additionalProperties: false DTools.Cloud.Data.ChangeOrderLocation: type: object properties: id: type: integer format: int32 name: type: string nullable: true number: type: string nullable: true description: type: string nullable: true fullName: type: string nullable: true parentId: type: integer format: int32 nullable: true additionalProperties: false DTools.Cloud.Data.ChangeOrderPayment: type: object properties: id: type: string format: uuid name: type: string nullable: true number: type: string nullable: true integrationNumber: type: string nullable: true billingDate: type: string format: date-time nullable: true dueDate: type: string format: date-time nullable: true terms: type: string nullable: true termsDaysDue: type: integer format: int32 nullable: true amount: type: number format: double taxAmount: type: number format: double nullable: true totalAmount: type: number format: double paidAmount: type: number format: double nullable: true convenienceFee: type: number format: double nullable: true paidDate: type: string format: date-time nullable: true status: type: string nullable: true readOnly: true paymentRequestMessage: type: string nullable: true isDisplayPaymentSchedule: type: boolean isAutoGenerated: type: boolean isAutoPaid: type: boolean notes: type: string nullable: true additionalProperties: false DTools.Cloud.Data.ChangeOrderPaymentTerm: type: object properties: paymentTermId: type: string format: uuid paymentTerm: type: string nullable: true isPercent: type: boolean percent: type: number format: double nullable: true billingDate: type: string format: date-time nullable: true dueDate: type: string format: date-time nullable: true amount: type: number format: double status: type: string nullable: true readOnly: true additionalProperties: false DTools.Cloud.Data.ChangeOrderPhase: type: object properties: id: type: integer format: int32 name: type: string nullable: true additionalProperties: false DTools.Cloud.Data.ChangeOrderSystem: type: object properties: id: type: integer format: int32 name: type: string nullable: true description: type: string nullable: true additionalProperties: false DTools.Cloud.Data.ChangeOrderTax: type: object properties: id: type: integer format: int32 name: type: string nullable: true isGroup: type: boolean childIds: type: array items: type: integer format: int32 nullable: true rate: type: number format: double applyOn: type: string nullable: true readOnly: true isPayByClient: type: boolean additionalProperties: false DTools.Cloud.Data.ChangeOrderTaxSettings: type: object properties: isItemLevelTax: type: boolean taxId: type: integer format: int32 nullable: true laborTaxId: type: integer format: int32 nullable: true additionalProperties: false DTools.Cloud.Data.Client: type: object properties: type: type: string nullable: true name: type: string nullable: true number: type: string nullable: true email: type: string nullable: true secondaryEmail: type: string nullable: true mobile: type: string nullable: true phone: type: string nullable: true fax: type: string nullable: true website: type: string nullable: true owner: type: string nullable: true isExemptFromTax: type: boolean nullable: true isActive: type: boolean nullable: true billingAddress: $ref: '#/components/schemas/DTools.Cloud.Data.Address' siteAddresses: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.Address' nullable: true contacts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.Contact' nullable: true additionalProperties: false DTools.Cloud.Data.ClientDetail: type: object properties: id: type: string format: uuid type: type: string nullable: true readOnly: true name: type: string nullable: true number: type: string nullable: true email: type: string nullable: true secondaryEmail: type: string nullable: true mobile: type: string nullable: true phone: type: string nullable: true fax: type: string nullable: true website: type: string nullable: true owner: type: string nullable: true isExemptFromTax: type: boolean hasSubaccounts: type: boolean parentId: type: string format: uuid nullable: true parentName: type: string nullable: true createdDate: type: string format: date-time modifiedDate: type: string format: date-time isActive: type: boolean billingAddress: $ref: '#/components/schemas/DTools.Cloud.Data.AddressDetail' siteAddresses: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.AddressDetail' nullable: true contacts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ContactDetail' nullable: true files: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.FileInfo' nullable: true additionalProperties: false DTools.Cloud.Data.ClientLite: type: object properties: id: type: string format: uuid type: type: string nullable: true readOnly: true name: type: string nullable: true number: type: string nullable: true contactName: type: string nullable: true email: type: string nullable: true mobile: type: string nullable: true phone: type: string nullable: true owner: type: string nullable: true hasSubaccounts: type: boolean createdDate: type: string format: date-time modifiedDate: type: string format: date-time isActive: type: boolean additionalProperties: false DTools.Cloud.Data.Contact: type: object properties: id: type: string format: uuid nullable: true name: type: string nullable: true firstName: type: string nullable: true lastName: type: string nullable: true company: type: string nullable: true title: type: string nullable: true email: type: string nullable: true secondaryEmail: type: string nullable: true mobile: type: string nullable: true phone: type: string nullable: true fax: type: string nullable: true addressLine1: type: string nullable: true addressLine2: type: string nullable: true city: type: string nullable: true state: type: string nullable: true postalCode: type: string nullable: true country: type: string nullable: true notes: type: string nullable: true isActive: type: boolean nullable: true isPrimary: type: boolean nullable: true additionalProperties: false DTools.Cloud.Data.ContactDetail: type: object properties: id: type: string format: uuid name: type: string nullable: true firstName: type: string nullable: true lastName: type: string nullable: true company: type: string nullable: true title: type: string nullable: true email: type: string nullable: true secondaryEmail: type: string nullable: true mobile: type: string nullable: true phone: type: string nullable: true fax: type: string nullable: true addressLine1: type: string nullable: true addressLine2: type: string nullable: true city: type: string nullable: true state: type: string nullable: true postalCode: type: string nullable: true country: type: string nullable: true notes: type: string nullable: true isActive: type: boolean isPrimary: type: boolean additionalProperties: false DTools.Cloud.Data.FileDetail: type: object properties: id: type: string format: uuid name: type: string nullable: true url: type: string nullable: true parentObjectType: type: string nullable: true parentObjectId: type: string format: uuid additionalProperties: false DTools.Cloud.Data.FileInfo: type: object properties: id: type: string format: uuid name: type: string nullable: true url: type: string nullable: true additionalProperties: false DTools.Cloud.Data.GetClientsResult: type: object properties: clients: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ClientLite' nullable: true totalClients: type: integer format: int32 additionalProperties: false DTools.Cloud.Data.GetOpportunitiesResult: type: object properties: opportunities: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.OpportunityLite' nullable: true totalOpportunities: type: integer format: int32 additionalProperties: false DTools.Cloud.Data.GetProductsResult: type: object properties: products: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductDetail' nullable: true totalProducts: type: integer format: int32 additionalProperties: false DTools.Cloud.Data.GetProjectsResult: type: object properties: projects: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectLite' nullable: true totalProjects: type: integer format: int32 additionalProperties: false DTools.Cloud.Data.GetPurchaseOrdersResult: type: object properties: purchaseOrders: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.PurchaseOrderLite' nullable: true totalPurchaseOrders: type: integer format: int32 additionalProperties: false DTools.Cloud.Data.GetServiceContractsResult: type: object properties: serviceContracts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ServiceContractLite' nullable: true totalServiceContracts: type: integer format: int32 additionalProperties: false DTools.Cloud.Data.GetTimeEntriesResult: type: object properties: timeEntries: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.TimeEntryDetail' nullable: true totalTimeEntries: type: integer format: int32 additionalProperties: false DTools.Cloud.Data.NewOpportunity: type: object properties: type: type: string nullable: true associatedProjectId: type: string format: uuid nullable: true clientId: type: string format: uuid nullable: true clientType: type: string nullable: true clientName: type: string nullable: true clientEmail: type: string nullable: true clientPhone: type: string nullable: true name: type: string nullable: true number: type: string nullable: true buildingType: type: string nullable: true marketSector: type: string nullable: true projectType: type: string nullable: true quoteType: type: string nullable: true quoteTemplate: type: string nullable: true priority: type: string nullable: true budget: type: integer format: int64 nullable: true owner: type: string nullable: true projectArea: type: integer format: int32 nullable: true fulfillmentLocation: type: string nullable: true estimatedCloseDate: type: string format: date-time nullable: true leadSource: type: string nullable: true billingAddress: $ref: '#/components/schemas/DTools.Cloud.Data.Address' siteAddress: $ref: '#/components/schemas/DTools.Cloud.Data.Address' contacts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.Contact' nullable: true resources: type: array items: type: string nullable: true additionalProperties: false DTools.Cloud.Data.OpportunityDetail: type: object properties: id: type: string format: uuid type: type: string nullable: true readOnly: true clientId: type: string format: uuid clientName: type: string nullable: true clientNumber: type: string nullable: true name: type: string nullable: true number: type: string nullable: true buildingType: type: string nullable: true marketSector: type: string nullable: true projectType: type: string nullable: true quoteType: type: string nullable: true quoteTemplate: type: string nullable: true systemState: type: string nullable: true readOnly: true stageGroup: type: string nullable: true stage: type: string nullable: true priority: type: string nullable: true readOnly: true price: type: number format: double servicePrice: type: number format: double nullable: true subscriptionPrice: type: number format: double nullable: true total: type: number format: double readOnly: true budget: type: integer format: int64 nullable: true probability: type: integer format: int32 nullable: true owner: type: string nullable: true projectArea: type: integer format: int32 nullable: true fulfillmentLocation: type: string nullable: true isExemptFromTax: type: boolean estimatedCloseDate: type: string format: date-time nullable: true actualCloseDate: type: string format: date-time nullable: true estimatedProjectStartDate: type: string format: date-time nullable: true estimatedProjectEndDate: type: string format: date-time nullable: true leadSource: type: string nullable: true lostReason: type: string nullable: true lostDescription: type: string nullable: true createdDate: type: string format: date-time modifiedDate: type: string format: date-time isArchived: type: boolean billingAddress: $ref: '#/components/schemas/DTools.Cloud.Data.AddressDetail' siteAddress: $ref: '#/components/schemas/DTools.Cloud.Data.AddressDetail' contacts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ContactDetail' nullable: true resources: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ResourceDetail' nullable: true files: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.FileInfo' nullable: true quoteIds: type: array items: type: string format: uuid nullable: true additionalProperties: false DTools.Cloud.Data.OpportunityLite: type: object properties: id: type: string format: uuid type: type: string nullable: true readOnly: true clientId: type: string format: uuid clientName: type: string nullable: true clientNumber: type: string nullable: true name: type: string nullable: true number: type: string nullable: true systemState: type: string nullable: true readOnly: true stageGroup: type: string nullable: true stage: type: string nullable: true priority: type: string nullable: true readOnly: true price: type: number format: double servicePrice: type: number format: double nullable: true subscriptionPrice: type: number format: double nullable: true total: type: number format: double readOnly: true budget: type: integer format: int64 nullable: true probability: type: integer format: int32 nullable: true owner: type: string nullable: true estimatedCloseDate: type: string format: date-time nullable: true actualCloseDate: type: string format: date-time nullable: true createdDate: type: string format: date-time modifiedDate: type: string format: date-time isArchived: type: boolean additionalProperties: false DTools.Cloud.Data.ProductAccessory: type: object properties: itemId: type: string format: uuid type: type: string nullable: true readOnly: true name: type: string nullable: true quantity: type: integer format: int32 laborTime: type: integer format: int32 nullable: true laborPrice: type: number format: double nullable: true includeOption: type: string nullable: true readOnly: true isBillable: type: boolean additionalProperties: false DTools.Cloud.Data.ProductBarcode: type: object properties: id: type: string format: uuid upcBarcode: type: string nullable: true eanBarcode: type: string nullable: true itfBarcode: type: string nullable: true additionalProperties: false DTools.Cloud.Data.ProductDetail: type: object properties: id: type: string format: uuid name: type: string nullable: true brand: type: string nullable: true model: type: string nullable: true partNumber: type: string nullable: true shortDescription: type: string nullable: true description: type: string nullable: true category: type: string nullable: true keywords: type: string nullable: true defaultQuantity: type: integer format: int32 sellUnit: type: string nullable: true isLengthBased: type: boolean lengthName: type: string nullable: true length: type: integer format: int32 nullable: true msrp: type: number format: double nullable: true unitCost: type: number format: double nullable: true unitPrice: type: number format: double nullable: true margin: type: number format: double nullable: true markup: type: number format: double nullable: true costPerLength: type: number format: double nullable: true pricePerLength: type: number format: double nullable: true isTaxable: type: boolean tax: type: string nullable: true supplier: type: string nullable: true system: type: string nullable: true phase: type: string nullable: true upcBarcode: type: string nullable: true eanBarcode: type: string nullable: true itfBarcode: type: string nullable: true isStockItem: type: boolean quantityOnHand: type: integer format: int32 nullable: true quantityAllocated: type: integer format: int32 nullable: true quantityAvailable: type: integer format: int32 nullable: true quantityOnOrder: type: integer format: int32 nullable: true quantityNeeded: type: integer format: int32 nullable: true minimumStockLevel: type: integer format: int32 nullable: true reorderLevel: type: integer format: int32 nullable: true isDiscontinued: type: boolean isClientSupplied: type: boolean createdDate: type: string format: date-time modifiedDate: type: string format: date-time isActive: type: boolean images: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductImage' nullable: true specifications: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductSpecification' nullable: true laborItems: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductLaborItem' nullable: true accessories: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductAccessory' nullable: true subscriptions: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProductSubscription' nullable: true additionalProperties: false DTools.Cloud.Data.ProductImage: type: object properties: url: type: string nullable: true type: type: string nullable: true readOnly: true isDefault: type: boolean additionalProperties: false DTools.Cloud.Data.ProductLaborItem: type: object properties: laborType: type: string nullable: true time: type: integer format: int32 price: type: number format: double timePerLength: type: integer format: int32 nullable: true pricePerLength: type: number format: double nullable: true phase: type: string nullable: true isBillable: type: boolean additionalProperties: false DTools.Cloud.Data.ProductPrice: type: object properties: id: type: string format: uuid msrp: type: number format: double nullable: true unitCost: type: number format: double nullable: true unitPrice: type: number format: double nullable: true additionalProperties: false DTools.Cloud.Data.ProductSpecification: type: object properties: name: type: string nullable: true value: type: string nullable: true additionalProperties: false DTools.Cloud.Data.ProductStatus: type: object properties: id: type: string format: uuid isDiscontinued: type: boolean nullable: true isActive: type: boolean nullable: true additionalProperties: false DTools.Cloud.Data.ProductSubscription: type: object properties: itemId: type: string format: uuid name: type: string nullable: true quantity: type: integer format: int32 additionalProperties: false DTools.Cloud.Data.ProjectAdjustment: type: object properties: name: type: string nullable: true isPercent: type: boolean percent: type: number format: double nullable: true amount: type: number format: double nullable: true isTaxable: type: boolean taxId: type: integer format: int32 nullable: true applyTo: type: string nullable: true readOnly: true additionalProperties: false DTools.Cloud.Data.ProjectDetail: type: object properties: id: type: string format: uuid clientId: type: string format: uuid clientName: type: string nullable: true clientNumber: type: string nullable: true name: type: string nullable: true number: type: string nullable: true systemState: type: string nullable: true readOnly: true stageGroup: type: string nullable: true stage: type: string nullable: true priority: type: string nullable: true readOnly: true price: type: number format: double budget: type: integer format: int64 nullable: true salesperson: type: string nullable: true projectManager: type: string nullable: true projectArea: type: integer format: int32 nullable: true fulfillmentLocation: type: string nullable: true isIgnoreItemLaborItems: type: boolean isExemptFromTax: type: boolean opportunityWonDate: type: string format: date-time startDate: type: string format: date-time nullable: true endDate: type: string format: date-time nullable: true completedDate: type: string format: date-time nullable: true createdDate: type: string format: date-time modifiedDate: type: string format: date-time isArchived: type: boolean scopeOfWork: type: string nullable: true billingAddress: $ref: '#/components/schemas/DTools.Cloud.Data.AddressDetail' siteAddress: $ref: '#/components/schemas/DTools.Cloud.Data.AddressDetail' contacts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ContactDetail' nullable: true resources: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ResourceDetail' nullable: true files: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.FileInfo' nullable: true planViews: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.FileInfo' nullable: true locations: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectLocation' nullable: true systems: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectSystem' nullable: true phases: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectPhase' nullable: true laborTypes: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectLaborType' nullable: true lengths: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectLength' nullable: true discounts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectDiscount' nullable: true items: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectItem' nullable: true adjustments: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectAdjustment' nullable: true taxSettings: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectTaxSettings' taxes: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectTax' nullable: true paymentTerms: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectPaymentTerm' nullable: true payments: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectPayment' nullable: true changeOrderIds: type: array items: type: string format: uuid nullable: true additionalProperties: false DTools.Cloud.Data.ProjectDiscount: type: object properties: id: type: integer format: int32 name: type: string nullable: true isRange: type: boolean isPercent: type: boolean percent: type: number format: double nullable: true maximumPercent: type: number format: double nullable: true amount: type: number format: double nullable: true maximumAmount: type: number format: double nullable: true additionalProperties: false DTools.Cloud.Data.ProjectItem: type: object properties: id: type: integer format: int32 catalogId: type: string format: uuid type: type: string nullable: true readOnly: true allowanceType: type: string nullable: true readOnly: true packageType: type: string nullable: true readOnly: true laborTypeId: type: integer format: int32 nullable: true name: type: string nullable: true brand: type: string nullable: true model: type: string nullable: true partNumber: type: string nullable: true shortDescription: type: string nullable: true description: type: string nullable: true category: type: string nullable: true imageUrl: type: string nullable: true quantity: type: integer format: int32 isLengthBased: type: boolean lengthId: type: integer format: int32 nullable: true length: type: integer format: int32 nullable: true isIgnorePackageItemLaborItems: type: boolean msrp: type: number format: double nullable: true unitCost: type: number format: double nullable: true unitPrice: type: number format: double nullable: true margin: type: number format: double nullable: true markup: type: number format: double nullable: true costPerLength: type: number format: double nullable: true pricePerLength: type: number format: double nullable: true discountId: type: integer format: int32 nullable: true discount: type: number format: double nullable: true unitLaborTime: type: integer format: int32 nullable: true unitLaborPrice: type: number format: double nullable: true isBillable: type: boolean isTaxable: type: boolean taxId: type: integer format: int32 nullable: true supplier: type: string nullable: true locationId: type: integer format: int32 nullable: true systemId: type: integer format: int32 nullable: true phaseId: type: integer format: int32 nullable: true upcBarcode: type: string nullable: true eanBarcode: type: string nullable: true itfBarcode: type: string nullable: true isClientSupplied: type: boolean orderStatus: type: string nullable: true installStatus: type: string nullable: true parentId: type: integer format: int32 nullable: true packageId: type: integer format: int32 nullable: true laborItems: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ProjectItemLaborItem' nullable: true additionalProperties: false DTools.Cloud.Data.ProjectItemLaborItem: type: object properties: laborTypeId: type: integer format: int32 time: type: integer format: int32 price: type: number format: double timePerLength: type: integer format: int32 nullable: true pricePerLength: type: number format: double nullable: true phaseId: type: integer format: int32 nullable: true isBillable: type: boolean additionalProperties: false DTools.Cloud.Data.ProjectLaborType: type: object properties: id: type: integer format: int32 catalogId: type: string format: uuid name: type: string nullable: true shortDescription: type: string nullable: true description: type: string nullable: true hourlyCost: type: number format: double nullable: true hourlyPrice: type: number format: double nullable: true margin: type: number format: double nullable: true markup: type: number format: double nullable: true difficultyFactor: type: number format: double totalTimeInSeconds: type: integer format: int64 isTaxable: type: boolean taxId: type: integer format: int32 nullable: true additionalProperties: false DTools.Cloud.Data.ProjectLength: type: object properties: id: type: integer format: int32 name: type: string nullable: true length: type: integer format: int32 additionalProperties: false DTools.Cloud.Data.ProjectLite: type: object properties: id: type: string format: uuid clientId: type: string format: uuid clientName: type: string nullable: true clientNumber: type: string nullable: true name: type: string nullable: true number: type: string nullable: true systemState: type: string nullable: true readOnly: true stageGroup: type: string nullable: true stage: type: string nullable: true priority: type: string nullable: true readOnly: true price: type: number format: double projectManager: type: string nullable: true completedDate: type: string format: date-time nullable: true createdDate: type: string format: date-time modifiedDate: type: string format: date-time isArchived: type: boolean additionalProperties: false DTools.Cloud.Data.ProjectLocation: type: object properties: id: type: integer format: int32 name: type: string nullable: true number: type: string nullable: true description: type: string nullable: true fullName: type: string nullable: true parentId: type: integer format: int32 nullable: true additionalProperties: false DTools.Cloud.Data.ProjectPayment: type: object properties: id: type: string format: uuid name: type: string nullable: true number: type: string nullable: true integrationNumber: type: string nullable: true billingDate: type: string format: date-time nullable: true dueDate: type: string format: date-time nullable: true terms: type: string nullable: true termsDaysDue: type: integer format: int32 nullable: true amount: type: number format: double taxAmount: type: number format: double nullable: true totalAmount: type: number format: double paidAmount: type: number format: double nullable: true convenienceFee: type: number format: double nullable: true paidDate: type: string format: date-time nullable: true status: type: string nullable: true readOnly: true paymentRequestMessage: type: string nullable: true isDisplayPaymentSchedule: type: boolean isAutoGenerated: type: boolean isAutoPaid: type: boolean notes: type: string nullable: true additionalProperties: false DTools.Cloud.Data.ProjectPaymentTerm: type: object properties: paymentTermId: type: string format: uuid paymentTerm: type: string nullable: true isPercent: type: boolean percent: type: number format: double nullable: true billingDate: type: string format: date-time nullable: true dueDate: type: string format: date-time nullable: true amount: type: number format: double status: type: string nullable: true readOnly: true additionalProperties: false DTools.Cloud.Data.ProjectPhase: type: object properties: id: type: integer format: int32 name: type: string nullable: true additionalProperties: false DTools.Cloud.Data.ProjectSystem: type: object properties: id: type: integer format: int32 name: type: string nullable: true description: type: string nullable: true additionalProperties: false DTools.Cloud.Data.ProjectTax: type: object properties: id: type: integer format: int32 name: type: string nullable: true isGroup: type: boolean childIds: type: array items: type: integer format: int32 nullable: true rate: type: number format: double applyOn: type: string nullable: true readOnly: true isPayByClient: type: boolean additionalProperties: false DTools.Cloud.Data.ProjectTaxSettings: type: object properties: isItemLevelTax: type: boolean taxId: type: integer format: int32 nullable: true laborTaxId: type: integer format: int32 nullable: true additionalProperties: false DTools.Cloud.Data.PurchaseOrderDealerContact: type: object properties: name: type: string nullable: true firstName: type: string nullable: true lastName: type: string nullable: true title: type: string nullable: true email: type: string nullable: true phone: type: string nullable: true additionalProperties: false DTools.Cloud.Data.PurchaseOrderDetail: type: object properties: id: type: string format: uuid supplier: type: string nullable: true number: type: string nullable: true quoteNumber: type: string nullable: true description: type: string nullable: true status: type: string nullable: true readOnly: true productsCount: type: integer format: int32 total: type: number format: double shipping: type: number format: double nullable: true tax: type: number format: double nullable: true supplierAddress: $ref: '#/components/schemas/DTools.Cloud.Data.AddressDetail' supplierContacts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.PurchaseOrderSupplierContact' nullable: true accountNumber: type: string nullable: true shipToName: type: string nullable: true shippingAddress: $ref: '#/components/schemas/DTools.Cloud.Data.AddressDetail' shippingMethod: type: string nullable: true attention: type: string nullable: true noteToSupplier: type: string nullable: true billingAddress: $ref: '#/components/schemas/DTools.Cloud.Data.AddressDetail' paymentMethod: type: string nullable: true dealerContact: $ref: '#/components/schemas/DTools.Cloud.Data.PurchaseOrderDealerContact' notes: type: string nullable: true shipmentTrackingNumber: type: string nullable: true orderedDate: type: string format: date-time nullable: true receivedDate: type: string format: date-time nullable: true createdDate: type: string format: date-time modifiedDate: type: string format: date-time isArchived: type: boolean files: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.FileInfo' nullable: true products: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.PurchaseOrderProduct' nullable: true additionalProperties: false DTools.Cloud.Data.PurchaseOrderLite: type: object properties: id: type: string format: uuid supplier: type: string nullable: true number: type: string nullable: true status: type: string nullable: true readOnly: true productsCount: type: integer format: int32 total: type: number format: double orderedDate: type: string format: date-time nullable: true receivedDate: type: string format: date-time nullable: true createdDate: type: string format: date-time modifiedDate: type: string format: date-time isArchived: type: boolean additionalProperties: false DTools.Cloud.Data.PurchaseOrderProduct: type: object properties: catalogId: type: string format: uuid name: type: string nullable: true brand: type: string nullable: true model: type: string nullable: true partNumber: type: string nullable: true supplierPartNumber: type: string nullable: true upcBarcode: type: string nullable: true eanBarcode: type: string nullable: true itfBarcode: type: string nullable: true description: type: string nullable: true imageUrl: type: string nullable: true quantity: type: integer format: int32 receivedQuantity: type: integer format: int32 nullable: true unitCost: type: number format: double etaDate: type: string format: date-time nullable: true shipmentTrackingNumber: type: string nullable: true projectId: type: string format: uuid nullable: true project: type: string nullable: true projectNumber: type: string nullable: true additionalProperties: false DTools.Cloud.Data.PurchaseOrderSupplierContact: type: object properties: name: type: string nullable: true firstName: type: string nullable: true lastName: type: string nullable: true title: type: string nullable: true department: type: string nullable: true email: type: string nullable: true mobile: type: string nullable: true phone: type: string nullable: true isPrimary: type: boolean additionalProperties: false DTools.Cloud.Data.QuoteAdjustment: type: object properties: name: type: string nullable: true isPercent: type: boolean percent: type: number format: double nullable: true amount: type: number format: double nullable: true isTaxable: type: boolean taxId: type: integer format: int32 nullable: true applyTo: type: string nullable: true readOnly: true additionalProperties: false DTools.Cloud.Data.QuoteAlternateSet: type: object properties: id: type: integer format: int32 name: type: string nullable: true description: type: string nullable: true hasRecommendedItem: type: boolean readOnly: true isKeepLaborItemsOnReplace: type: boolean isKeepAccessoriesOnReplace: type: boolean additionalProperties: false DTools.Cloud.Data.QuoteDetail: type: object properties: id: type: string format: uuid opportunityId: type: string format: uuid name: type: string nullable: true number: type: string nullable: true version: type: number format: double systemState: type: string nullable: true readOnly: true state: type: string nullable: true price: type: number format: double servicePrice: type: number format: double nullable: true isIncludedInTotal: type: boolean projectArea: type: integer format: int32 nullable: true fulfillmentLocation: type: string nullable: true isIgnoreItemLaborItems: type: boolean isExemptFromTax: type: boolean isServiceQuote: type: boolean validUntilDate: type: string format: date-time nullable: true acceptedDate: type: string format: date-time nullable: true createdDate: type: string format: date-time modifiedDate: type: string format: date-time scopeOfWork: type: string nullable: true serviceContractDescription: type: string nullable: true files: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.FileInfo' nullable: true planViews: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.FileInfo' nullable: true locations: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteLocation' nullable: true systems: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteSystem' nullable: true phases: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuotePhase' nullable: true laborTypes: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteLaborType' nullable: true lengths: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteLength' nullable: true discounts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteDiscount' nullable: true alternateSets: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteAlternateSet' nullable: true items: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteItem' nullable: true adjustments: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteAdjustment' nullable: true taxSettings: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteTaxSettings' taxes: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteTax' nullable: true paymentTerms: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuotePaymentTerm' nullable: true servicePlans: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteServicePlan' nullable: true additionalProperties: false DTools.Cloud.Data.QuoteDiscount: type: object properties: id: type: integer format: int32 name: type: string nullable: true isRange: type: boolean isPercent: type: boolean percent: type: number format: double nullable: true maximumPercent: type: number format: double nullable: true amount: type: number format: double nullable: true maximumAmount: type: number format: double nullable: true additionalProperties: false DTools.Cloud.Data.QuoteItem: type: object properties: id: type: integer format: int32 catalogId: type: string format: uuid type: type: string nullable: true readOnly: true allowanceType: type: string nullable: true readOnly: true packageType: type: string nullable: true readOnly: true laborTypeId: type: integer format: int32 nullable: true name: type: string nullable: true brand: type: string nullable: true model: type: string nullable: true partNumber: type: string nullable: true shortDescription: type: string nullable: true description: type: string nullable: true category: type: string nullable: true imageUrl: type: string nullable: true quantity: type: integer format: int32 isLengthBased: type: boolean lengthId: type: integer format: int32 nullable: true length: type: integer format: int32 nullable: true isIgnorePackageItemLaborItems: type: boolean msrp: type: number format: double nullable: true unitCost: type: number format: double nullable: true unitPrice: type: number format: double nullable: true margin: type: number format: double nullable: true markup: type: number format: double nullable: true costPerLength: type: number format: double nullable: true pricePerLength: type: number format: double nullable: true discountId: type: integer format: int32 nullable: true discount: type: number format: double nullable: true unitLaborTime: type: integer format: int32 nullable: true unitLaborPrice: type: number format: double nullable: true isBillable: type: boolean isTaxable: type: boolean taxId: type: integer format: int32 nullable: true supplier: type: string nullable: true locationId: type: integer format: int32 nullable: true systemId: type: integer format: int32 nullable: true phaseId: type: integer format: int32 nullable: true upcBarcode: type: string nullable: true eanBarcode: type: string nullable: true itfBarcode: type: string nullable: true alternateSetItemLabel: type: string nullable: true alternateSetItemDescription: type: string nullable: true optionalItemDescription: type: string nullable: true isClientSupplied: type: boolean isRecommended: type: boolean readOnly: true isOptional: type: boolean isOptionalRecommended: type: boolean parentId: type: integer format: int32 nullable: true packageId: type: integer format: int32 nullable: true alternateSetId: type: integer format: int32 nullable: true laborItems: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteItemLaborItem' nullable: true additionalProperties: false DTools.Cloud.Data.QuoteItemLaborItem: type: object properties: laborTypeId: type: integer format: int32 time: type: integer format: int32 price: type: number format: double timePerLength: type: integer format: int32 nullable: true pricePerLength: type: number format: double nullable: true phaseId: type: integer format: int32 nullable: true isBillable: type: boolean additionalProperties: false DTools.Cloud.Data.QuoteLaborType: type: object properties: id: type: integer format: int32 catalogId: type: string format: uuid name: type: string nullable: true shortDescription: type: string nullable: true description: type: string nullable: true hourlyCost: type: number format: double nullable: true hourlyPrice: type: number format: double nullable: true margin: type: number format: double nullable: true markup: type: number format: double nullable: true difficultyFactor: type: number format: double totalTimeInSeconds: type: integer format: int64 isTaxable: type: boolean taxId: type: integer format: int32 nullable: true additionalProperties: false DTools.Cloud.Data.QuoteLength: type: object properties: id: type: integer format: int32 name: type: string nullable: true length: type: integer format: int32 additionalProperties: false DTools.Cloud.Data.QuoteLite: type: object properties: id: type: string format: uuid name: type: string nullable: true number: type: string nullable: true version: type: number format: double systemState: type: string nullable: true readOnly: true state: type: string nullable: true price: type: number format: double servicePrice: type: number format: double nullable: true isIncludedInTotal: type: boolean isServiceQuote: type: boolean validUntilDate: type: string format: date-time nullable: true acceptedDate: type: string format: date-time nullable: true createdDate: type: string format: date-time modifiedDate: type: string format: date-time additionalProperties: false DTools.Cloud.Data.QuoteLocation: type: object properties: id: type: integer format: int32 name: type: string nullable: true number: type: string nullable: true description: type: string nullable: true fullName: type: string nullable: true parentId: type: integer format: int32 nullable: true isOptional: type: boolean isOptionalRecommended: type: boolean additionalProperties: false DTools.Cloud.Data.QuotePaymentTerm: type: object properties: paymentTermId: type: string format: uuid paymentTerm: type: string nullable: true isPercent: type: boolean percent: type: number format: double nullable: true billingDate: type: string format: date-time nullable: true dueDate: type: string format: date-time nullable: true amount: type: number format: double additionalProperties: false DTools.Cloud.Data.QuotePhase: type: object properties: id: type: integer format: int32 name: type: string nullable: true additionalProperties: false DTools.Cloud.Data.QuoteServicePlan: type: object properties: type: type: string nullable: true readOnly: true name: type: string nullable: true imageUrl: type: string nullable: true description: type: string nullable: true priceType: type: string nullable: true readOnly: true fixedPrice: type: number format: double nullable: true dynamicPriceFieldId: type: string nullable: true readOnly: true dynamicPricePercent: type: number format: double nullable: true priceInterval: type: string nullable: true readOnly: true pricePerMonth: type: number format: double tax: type: string nullable: true taxRate: type: number format: double nullable: true length: type: integer format: int32 lengthDiscount: type: number format: double nullable: true billingFrequency: type: string nullable: true readOnly: true billingFrequencyDiscount: type: number format: double nullable: true estimatedStartDateType: type: string nullable: true readOnly: true estimatedStartDate: type: string format: date-time nullable: true estimatedStartDateDays: type: integer format: int32 nullable: true isClientAgreementRequired: type: boolean termsAndConditionsFileUrl: type: string nullable: true termsAndConditionsText: type: string nullable: true isRecommended: type: boolean isOptional: type: boolean isClientSelected: type: boolean isDeclined: type: boolean clusterId: type: string format: uuid lengths: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteServicePlanLength' nullable: true billingFrequencies: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteServicePlanBillingFrequency' nullable: true features: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.QuoteServicePlanFeature' nullable: true notes: type: array items: type: string nullable: true files: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.FileInfo' nullable: true additionalProperties: false DTools.Cloud.Data.QuoteServicePlanBillingFrequency: type: object properties: billingFrequency: type: string nullable: true readOnly: true discount: type: number format: double nullable: true isSuggested: type: boolean additionalProperties: false DTools.Cloud.Data.QuoteServicePlanFeature: type: object properties: type: type: string nullable: true readOnly: true price: type: number format: double nullable: true priceInterval: type: string nullable: true readOnly: true includedServiceCallType: type: string nullable: true readOnly: true includedServiceCalls: type: integer format: int32 nullable: true hours: type: integer format: int32 nullable: true isAdditionalService: type: boolean additionalServicePrice: type: number format: double nullable: true additionalServicePriceInterval: type: string nullable: true readOnly: true serviceFrequency: type: string nullable: true readOnly: true afterHoursServiceType: type: string nullable: true readOnly: true productDiscount: type: number format: double nullable: true automaticPlanRenewalLength: type: integer format: int32 nullable: true automaticPlanRenewalPriceIncreasePercent: type: number format: double nullable: true includedSessions: type: integer format: int32 nullable: true sessionLengthInMinutes: type: integer format: int32 nullable: true isAdditionalSupport: type: boolean additionalSupportPrice: type: number format: double nullable: true additionalSupportPriceInterval: type: string nullable: true readOnly: true displayText: type: string nullable: true isShowInProposal: type: boolean readOnly: true additionalProperties: false DTools.Cloud.Data.QuoteServicePlanLength: type: object properties: months: type: integer format: int32 discount: type: number format: double nullable: true isSuggested: type: boolean additionalProperties: false DTools.Cloud.Data.QuoteSystem: type: object properties: id: type: integer format: int32 name: type: string nullable: true description: type: string nullable: true isOptional: type: boolean isOptionalRecommended: type: boolean additionalProperties: false DTools.Cloud.Data.QuoteTax: type: object properties: id: type: integer format: int32 name: type: string nullable: true isGroup: type: boolean childIds: type: array items: type: integer format: int32 nullable: true rate: type: number format: double applyOn: type: string nullable: true readOnly: true isPayByClient: type: boolean additionalProperties: false DTools.Cloud.Data.QuoteTaxSettings: type: object properties: isItemLevelTax: type: boolean taxId: type: integer format: int32 nullable: true laborTaxId: type: integer format: int32 nullable: true additionalProperties: false DTools.Cloud.Data.ResourceDetail: type: object properties: name: type: string nullable: true firstName: type: string nullable: true lastName: type: string nullable: true title: type: string nullable: true email: type: string nullable: true phone: type: string nullable: true additionalProperties: false DTools.Cloud.Data.ServiceContractDetail: type: object properties: id: type: string format: uuid type: type: string nullable: true readOnly: true clientId: type: string format: uuid clientName: type: string nullable: true clientNumber: type: string nullable: true projectId: type: string format: uuid nullable: true projectName: type: string nullable: true projectNumber: type: string nullable: true name: type: string nullable: true number: type: string nullable: true imageUrl: type: string nullable: true description: type: string nullable: true status: type: string nullable: true readOnly: true estimatedStartDateType: type: string nullable: true readOnly: true estimatedStartDate: type: string format: date-time nullable: true estimatedStartDateDays: type: integer format: int32 nullable: true startDate: type: string format: date-time nullable: true endDate: type: string format: date-time nullable: true priceType: type: string nullable: true readOnly: true fixedPrice: type: number format: double nullable: true dynamicPriceFieldId: type: string nullable: true readOnly: true dynamicPricePercent: type: number format: double nullable: true priceInterval: type: string nullable: true readOnly: true pricePerMonth: type: number format: double taxRate: type: number format: double nullable: true length: type: integer format: int32 lengthDiscount: type: number format: double nullable: true billingFrequency: type: string nullable: true readOnly: true billingFrequencyDiscount: type: number format: double nullable: true paymentTerms: type: string nullable: true paymentTermsDaysDue: type: integer format: int32 nullable: true isAutoGeneratePaymentRequests: type: boolean paymentDueDate: type: string format: date-time nullable: true canceledDate: type: string format: date-time nullable: true createdDate: type: string format: date-time modifiedDate: type: string format: date-time isClientAgreementRequired: type: boolean termsAndConditionsFileUrl: type: string nullable: true termsAndConditionsText: type: string nullable: true features: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ServiceContractFeature' nullable: true notes: type: array items: type: string nullable: true files: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.FileInfo' nullable: true paymentSchedules: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ServiceContractPaymentSchedule' nullable: true payments: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.ServiceContractPayment' nullable: true additionalProperties: false DTools.Cloud.Data.ServiceContractFeature: type: object properties: type: type: string nullable: true readOnly: true price: type: number format: double nullable: true priceInterval: type: string nullable: true readOnly: true includedServiceCallType: type: string nullable: true readOnly: true includedServiceCalls: type: integer format: int32 nullable: true hours: type: integer format: int32 nullable: true isAdditionalService: type: boolean additionalServicePrice: type: number format: double nullable: true additionalServicePriceInterval: type: string nullable: true readOnly: true serviceFrequency: type: string nullable: true readOnly: true afterHoursServiceType: type: string nullable: true readOnly: true productDiscount: type: number format: double nullable: true automaticPlanRenewalLength: type: integer format: int32 nullable: true automaticPlanRenewalPriceIncreasePercent: type: number format: double nullable: true includedSessions: type: integer format: int32 nullable: true sessionLengthInMinutes: type: integer format: int32 nullable: true isAdditionalSupport: type: boolean additionalSupportPrice: type: number format: double nullable: true additionalSupportPriceInterval: type: string nullable: true readOnly: true displayText: type: string nullable: true isShowInProposal: type: boolean readOnly: true additionalProperties: false DTools.Cloud.Data.ServiceContractLite: type: object properties: id: type: string format: uuid type: type: string nullable: true readOnly: true clientId: type: string format: uuid clientName: type: string nullable: true clientNumber: type: string nullable: true projectId: type: string format: uuid nullable: true projectName: type: string nullable: true projectNumber: type: string nullable: true name: type: string nullable: true number: type: string nullable: true status: type: string nullable: true readOnly: true pricePerMonth: type: number format: double startDate: type: string format: date-time nullable: true endDate: type: string format: date-time nullable: true paymentDueDate: type: string format: date-time nullable: true canceledDate: type: string format: date-time nullable: true createdDate: type: string format: date-time modifiedDate: type: string format: date-time additionalProperties: false DTools.Cloud.Data.ServiceContractPayment: type: object properties: id: type: string format: uuid name: type: string nullable: true number: type: string nullable: true integrationNumber: type: string nullable: true billingDate: type: string format: date-time nullable: true dueDate: type: string format: date-time nullable: true terms: type: string nullable: true termsDaysDue: type: integer format: int32 nullable: true amount: type: number format: double taxAmount: type: number format: double nullable: true totalAmount: type: number format: double paidAmount: type: number format: double nullable: true convenienceFee: type: number format: double nullable: true paidDate: type: string format: date-time nullable: true status: type: string nullable: true readOnly: true paymentRequestMessage: type: string nullable: true isDisplayPaymentSchedule: type: boolean isAutoGenerated: type: boolean isAutoPaid: type: boolean notes: type: string nullable: true additionalProperties: false DTools.Cloud.Data.ServiceContractPaymentSchedule: type: object properties: paymentTermId: type: string format: uuid payment: type: string nullable: true billingDate: type: string format: date-time nullable: true dueDate: type: string format: date-time nullable: true amount: type: number format: double status: type: string nullable: true readOnly: true additionalProperties: false DTools.Cloud.Data.TimeEntryDetail: type: object properties: type: type: string nullable: true readOnly: true resource: type: string nullable: true date: type: string format: date-time startTime: type: string format: date-span nullable: true endTime: type: string format: date-span nullable: true hoursWorkedInMinutes: type: integer format: int32 isOvertime: type: boolean isLunch: type: boolean isBillable: type: boolean costPerHour: type: number format: double nullable: true totalCost: type: number format: double nullable: true clientId: type: string format: uuid nullable: true clientName: type: string nullable: true clientNumber: type: string nullable: true projectId: type: string format: uuid nullable: true projectName: type: string nullable: true projectNumber: type: string nullable: true projectTask: type: string nullable: true serviceCallId: type: string format: uuid nullable: true serviceCallNumber: type: string nullable: true laborType: type: string nullable: true notes: type: string nullable: true createdDate: type: string format: date-time isArchived: type: boolean additionalProperties: false DTools.Cloud.Data.UpdateOpportunity: type: object properties: associatedProjectId: type: string format: uuid nullable: true clientId: type: string format: uuid nullable: true name: type: string nullable: true number: type: string nullable: true buildingType: type: string nullable: true marketSector: type: string nullable: true projectType: type: string nullable: true quoteType: type: string nullable: true quoteTemplate: type: string nullable: true priority: type: string nullable: true budget: type: integer format: int64 nullable: true probability: type: integer format: int32 nullable: true owner: type: string nullable: true projectArea: type: integer format: int32 nullable: true fulfillmentLocation: type: string nullable: true estimatedCloseDate: type: string format: date-time nullable: true actualCloseDate: type: string format: date-time nullable: true estimatedProjectStartDate: type: string format: date-time nullable: true estimatedProjectEndDate: type: string format: date-time nullable: true leadSource: type: string nullable: true lostReason: type: string nullable: true lostDescription: type: string nullable: true billingAddress: $ref: '#/components/schemas/DTools.Cloud.Data.Address' siteAddress: $ref: '#/components/schemas/DTools.Cloud.Data.Address' contacts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.Contact' nullable: true resources: type: array items: type: string nullable: true additionalProperties: false DTools.Cloud.Data.UpdateProject: type: object properties: clientId: type: string format: uuid nullable: true name: type: string nullable: true number: type: string nullable: true priority: type: string nullable: true budget: type: integer format: int64 nullable: true salesperson: type: string nullable: true projectManager: type: string nullable: true opportunityWonDate: type: string format: date-time nullable: true startDate: type: string format: date-time nullable: true endDate: type: string format: date-time nullable: true completedDate: type: string format: date-time nullable: true billingAddress: $ref: '#/components/schemas/DTools.Cloud.Data.Address' siteAddress: $ref: '#/components/schemas/DTools.Cloud.Data.Address' contacts: type: array items: $ref: '#/components/schemas/DTools.Cloud.Data.Contact' nullable: true resources: type: array items: type: string nullable: true additionalProperties: false Microsoft.AspNetCore.Mvc.ProblemDetails: type: object properties: type: type: string nullable: true title: type: string nullable: true status: type: integer format: int32 nullable: true detail: type: string nullable: true instance: type: string nullable: true additionalProperties: {} tags: - name: ChangeOrders - name: Clients - name: Files - name: Opportunities - name: Products - name: Projects - name: PurchaseOrders - name: Quotes - name: ServiceContracts - name: TimeEntries