diff --git a/.spectral.yaml b/.spectral.yaml index 7203e7d96..82bfb5f7c 100644 --- a/.spectral.yaml +++ b/.spectral.yaml @@ -160,3 +160,10 @@ rules: path-params: off # Disable path parameter validation to address mapping key issues owasp:api8:2023-define-cors-origin: off # Disable CORS origin header requirement oas3-operation-security-defined: error # Ensure all scopes are listed in schema + +overrides: + - files: + - "xero-practicemanager-v3-1.yaml#/paths/~1v3.1~1client.api~1paged-list/get/parameters/3" + - "xero-practicemanager-v3-1.yaml#/paths/~1v3.1~1client.api~1contacts/get/parameters/3" + rules: + owasp:api2:2023-no-credentials-in-url: off # pageToken is a pagination token, not a credential diff --git a/manifest.json b/manifest.json index b5034a216..4341509b9 100644 --- a/manifest.json +++ b/manifest.json @@ -39,6 +39,10 @@ "path": "/xero-payroll-uk.yaml", "canPreview": true }, + "practiceManagerV31": { + "path": "/xero-practicemanager-v3-1.yaml", + "canPreview": true + }, "projects": { "path": "/xero-projects.yaml", "canPreview": true diff --git a/xero-practicemanager-v3-1.yaml b/xero-practicemanager-v3-1.yaml new file mode 100644 index 000000000..58fc40dd3 --- /dev/null +++ b/xero-practicemanager-v3-1.yaml @@ -0,0 +1,7348 @@ +openapi: 3.0.0 +info: + title: XPM Public API + description: Xero Practice Manager Public API v3.1 + termsOfService: https://developer.xero.com/xero-developer-platform-terms-conditions/ + contact: + name: Xero Platform Team + url: https://developer.xero.com + email: api@xero.com + version: v3.1 +servers: + - url: https://api.xero.com/practicemanager/ + description: Xero Practice Manager API +paths: + /v3.1/category.api/list: + get: + tags: + - CategoryV31 + summary: Return a list of all categories + operationId: CategoryV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CategoryResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/client.api/list: + get: + tags: + - ClientV31 + summary: Return a list of all clients + operationId: ClientV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: detailed + in: query + description: If true, returns detailed client information including notes, groups, and relationships. + schema: + type: boolean + - name: modifiedSince + in: query + description: 'Return clients modified since this date. Format: yyyy-MM-ddTHH:mm:ss.' + schema: + type: string + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.client + - practicemanager.client.read + /v3.1/client.api/paged-list: + get: + tags: + - ClientV31 + summary: Return a paginated subset of non-archived and non-deleted clients. + operationId: ClientV31_PagedList + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: pageSize + in: query + schema: + type: integer + format: int32 + default: 50 + x-position: 1 + - name: pageToken + in: query + schema: + type: string + nullable: true + x-position: 2 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientPagedListResponseDto' + "400": + description: The request was invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "403": + description: Access to the resource is forbidden. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.client + - practicemanager.client.read + /v3.1/client.api/search: + get: + tags: + - ClientV31 + summary: Return a list of all clients matching search query + operationId: ClientV31_Search + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: query + in: query + description: Search term to find clients by name or other fields. + schema: + type: string + - name: detailed + in: query + description: If true, returns detailed client information including notes, groups, and relationships. + schema: + type: boolean + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.client + - practicemanager.client.read + /v3.1/client.api/get/{identifier}: + get: + tags: + - ClientV31 + summary: Detailed information for a specific client + operationId: ClientV31_GetByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.client + - practicemanager.client.read + /v3.1/client.api/add: + post: + tags: + - ClientV31 + summary: Create a new client and add new contacts to it + operationId: ClientV31_Add + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientAddRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/client.api/update: + put: + tags: + - ClientV31 + summary: Update a client's details + operationId: ClientV31_Update + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientResponseDto' + "409": + description: A conflict occurred with the current state of the resource. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/client.api/contacts: + get: + tags: + - ClientV31 + summary: Return a paginated subset of non-deleted contacts. + operationId: ClientV31_Contacts + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: pageSize + in: query + schema: + type: integer + format: int32 + default: 50 + x-position: 1 + - name: pageToken + in: query + schema: + type: string + nullable: true + x-position: 2 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientContactsResponseDto' + "400": + description: The request was invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "403": + description: Access to the resource is forbidden. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "404": + description: The requested resource was not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.client + - practicemanager.client.read + /v3.1/client.api/contact: + post: + tags: + - ClientV31 + summary: Create a new contact and add it to a client + operationId: ClientV31_ContactPost + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContactRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientContactResponseDto' + "409": + description: A conflict occurred with the current state of the resource. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/client.api/contact/{identifier}: + get: + tags: + - ClientV31 + summary: Detailed information for a specific contact + operationId: ClientV31_ContactGet + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + - name: clientUuid + in: query + schema: + type: string + nullable: true + x-position: 2 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientContactResponseDto' + "409": + description: A conflict occurred with the current state of the resource. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.client + - practicemanager.client.read + put: + tags: + - ClientV31 + summary: Update or delete a contact + operationId: ClientV31_ContactPUT + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + - name: clientUuid + in: query + schema: + type: string + nullable: true + x-position: 2 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContactRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientContactResponseDto' + "409": + description: A conflict occurred with the current state of the resource. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + delete: + tags: + - ClientV31 + summary: Update or delete a contact + operationId: ClientV31_ContactDELETE + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + - name: clientUuid + in: query + schema: + type: string + nullable: true + x-position: 2 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientContactResponseDto' + "409": + description: A conflict occurred with the current state of the resource. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/client.api/client/{identifier}/contacts: + post: + tags: + - ClientV31 + summary: Add contacts to a client. Up to 10 contacts can be added to a client per request. + operationId: ClientV31_ClientContact + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + nullable: true + x-position: 1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientAddContactsRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientAddContactsResponseDto' + "400": + description: The request was invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "409": + description: A conflict occurred with the current state of the resource. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "404": + description: The requested resource was not found. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/client.api/archive: + put: + tags: + - ClientV31 + summary: Archive a client + operationId: ClientV31_Archive + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientArchiveRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientResponseDto' + "409": + description: A conflict occurred with the current state of the resource. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/client.api/delete: + post: + tags: + - ClientV31 + summary: Delete a client + operationId: ClientV31_Delete + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientDeleteRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StatusResponseDto' + "409": + description: A conflict occurred with the current state of the resource. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/client.api/document: + post: + tags: + - ClientV31 + summary: Add a document to a client + operationId: ClientV31_Document + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientDocumentRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/UuidResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/client.api/documents/{identifier}: + get: + tags: + - ClientV31 + summary: Return a list of documents for a client + operationId: ClientV31_Documents + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientDocumentsResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.client + - practicemanager.client.read + /v3.1/client.api/addrelationship: + post: + tags: + - ClientV31 + summary: Add a relationship between clients + operationId: ClientV31_AddRelationship + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientRelationshipAddRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientRelationshipResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/client.api/updaterelationship: + put: + tags: + - ClientV31 + summary: Update the relationship details between clients + operationId: ClientV31_UpdateRelationship + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientRelationshipUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientRelationshipResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/client.api/deleterelationship: + post: + tags: + - ClientV31 + summary: Delete the relationship between clients + operationId: ClientV31_DeleteRelationship + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientRelationshipDeleteRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientRelationshipResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/clientgroup.api/get/{identifier}: + get: + tags: + - ClientGroupV31 + summary: Detailed information for a specific client group + operationId: ClientGroupV31_GetByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientGroupResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.client + - practicemanager.client.read + /v3.1/clientgroup.api/list: + get: + tags: + - ClientGroupV31 + summary: Return a list of all client groups + operationId: ClientGroupV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientGroupListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.client + - practicemanager.client.read + /v3.1/clientgroup.api/add: + post: + tags: + - ClientGroupV31 + summary: Add a client group + operationId: ClientGroupV31_Add + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientGroupAddRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientGroupResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/clientgroup.api/members: + put: + tags: + - ClientGroupV31 + summary: Manage the members of a client group + operationId: ClientGroupV31_Members + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientGroupMembersRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ClientGroupResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/clientgroup.api/delete: + post: + tags: + - ClientGroupV31 + summary: Delete a client group + operationId: ClientGroupV31_Delete + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ClientGroupDeleteRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseBaseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/cost.api/get/{identifier}: + get: + tags: + - CostV31 + summary: Detailed information for a specific cost + operationId: CostV31_GetByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CostResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/cost.api/delete: + post: + tags: + - CostV31 + summary: Delete a cost + operationId: CostV31_Delete + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CostDeleteRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseBaseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + /v3.1/cost.api/deleteall: + post: + tags: + - CostV31 + summary: Delete all costs + operationId: CostV31_DeleteAll + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CostDeleteAllRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseBaseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + /v3.1/cost.api/add: + post: + tags: + - CostV31 + summary: Add a cost + operationId: CostV31_Add + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CostAddRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CostResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + /v3.1/cost.api/update: + put: + tags: + - CostV31 + summary: Update a cost + operationId: CostV31_Update + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CostUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CostResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + /v3.1/cost.api/list: + get: + tags: + - CostV31 + summary: Return a list of all costs + operationId: CostV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: page + in: query + required: true + description: Page number (1-based) for paginated results. + schema: + type: integer + format: int32 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CostListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/client.api/get/{identifier}/customfield: + get: + tags: + - CustomFieldV31 + summary: Retrieve custom field data for a specific client + operationId: CustomFieldV31_GetClientByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValueListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.client + - practicemanager.client.read + /v3.1/client.api/update/{identifier}/customfield: + put: + tags: + - CustomFieldV31 + summary: Update custom field data for a specific client + operationId: CustomFieldV31_UpdateClientByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValuesUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StatusResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/client.api/contact/{identifier}/customfield: + get: + tags: + - CustomFieldV31 + summary: Retrieve custom field data for a specific contact + operationId: CustomFieldV31_GetContactByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValueListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.client + - practicemanager.client.read + put: + tags: + - CustomFieldV31 + summary: Update custom field data for a specific contact + operationId: CustomFieldV31_UpdateContactByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValuesUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StatusResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.client + /v3.1/job.api/get/{jobNumber}/customfield: + get: + tags: + - CustomFieldV31 + summary: Retrieve custom field data for a specific job + operationId: CustomFieldV31_GetJob + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: jobNumber + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValueListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.job + - practicemanager.job.read + /v3.1/job.api/update/{jobNumber}/customfield: + put: + tags: + - CustomFieldV31 + summary: Update custom field data for a specific job + operationId: CustomFieldV31_UpdateJob + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: jobNumber + in: path + required: true + schema: + type: string + x-position: 1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValuesUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StatusResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/time.api/get/{identifier}/customfield: + get: + tags: + - CustomFieldV31 + summary: Retrieve custom field data for a specific time entry + operationId: CustomFieldV31_GetTimeByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValueListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.time + - practicemanager.time.read + /v3.1/time.api/update/{identifier}/customfield: + put: + tags: + - CustomFieldV31 + summary: Update custom field data for a specific time entry + operationId: CustomFieldV31_UpdateTimeByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValuesUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StatusResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.time + /v3.1/job.api/task/{identifier}/customfield: + get: + tags: + - CustomFieldV31 + summary: Retrieve custom field data for a specific job task + operationId: CustomFieldV31_GetJobTaskByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValueListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.job + - practicemanager.job.read + put: + tags: + - CustomFieldV31 + summary: Update custom field data for a specific job task + operationId: CustomFieldV31_UpdateJobTaskByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValuesUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StatusResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/cost/{identifier}/customfield: + get: + tags: + - CustomFieldV31 + summary: Retrieve custom field data for a specific job cost + operationId: CustomFieldV31_GetJobCostByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValueListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.job + - practicemanager.job.read + put: + tags: + - CustomFieldV31 + summary: Update custom field data for a specific job cost + operationId: CustomFieldV31_UpdateJobCostByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldValuesUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StatusResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/customfield.api/definition: + get: + tags: + - CustomFieldV31 + summary: Return a list of all the custom fields + operationId: CustomFieldV31_Definition + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldDefinitionListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/customfield.api/get/{identifier}: + get: + tags: + - CustomFieldV31 + summary: Detailed information for a specific custom field + operationId: CustomFieldV31_GetByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CustomFieldDefinitionResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/customfield.api/add: + post: + tags: + - CustomFieldV31 + summary: Add a new custom field + operationId: CustomFieldV31_Add + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AddCustomFieldDefinitionRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/UuidResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + /v3.1/customfield.api/update: + put: + tags: + - CustomFieldV31 + summary: Update data for a specific custom field + operationId: CustomFieldV31_Update + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateCustomFieldDefinitionRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/UuidResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + /v3.1/customfield.api/delete: + post: + tags: + - CustomFieldV31 + summary: Delete a custom field + operationId: CustomFieldV31_Delete + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DeleteCustomFieldDefinitionRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StatusResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + /v3.1/invoice.api/current: + get: + tags: + - InvoiceV31 + summary: Return a list of current invoices + operationId: InvoiceV31_Current + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: detailed + in: query + description: If true, returns detailed invoice information including jobs, tasks, and costs. + schema: + type: boolean + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/InvoiceListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/invoice.api/draft: + get: + tags: + - InvoiceV31 + summary: Return a list of draft invoices + operationId: InvoiceV31_Draft + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: detailed + in: query + description: If true, returns detailed invoice information including jobs, tasks, and costs. + schema: + type: boolean + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/InvoiceListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/invoice.api/list: + get: + tags: + - InvoiceV31 + summary: Return a list of current and archived invoices + operationId: InvoiceV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: from + in: query + required: true + description: 'Start date for the date range filter. Format: yyyyMMdd.' + schema: + type: string + - name: to + in: query + required: true + description: 'End date for the date range filter. Format: yyyyMMdd.' + schema: + type: string + - name: detailed + in: query + description: If true, returns detailed invoice information including jobs, tasks, and costs. + schema: + type: boolean + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/InvoiceListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/invoice.api/job/{jobNumber}: + get: + tags: + - InvoiceV31 + summary: Returns a list of invoices for a specific job + operationId: InvoiceV31_Job + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: jobNumber + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/InvoiceListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/invoice.api/get/{invoiceNumber}: + get: + tags: + - InvoiceV31 + summary: Detailed information for a specific invoice + operationId: InvoiceV31_Get + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: invoiceNumber + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/InvoiceResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/invoice.api/payments/{invoiceNumber}: + get: + tags: + - InvoiceV31 + summary: Return a list of payments for an invoice + operationId: InvoiceV31_Payments + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: invoiceNumber + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/InvoicePaymentsResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/job.api/current: + get: + tags: + - JobV31 + summary: Returns a list of current jobs + operationId: JobV31_Current + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: detailed + in: query + description: If true, returns detailed job information including tasks, milestones, and notes. + schema: + type: boolean + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.job + - practicemanager.job.read + /v3.1/job.api/list: + get: + tags: + - JobV31 + summary: Return a list of all jobs + operationId: JobV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: from + in: query + required: true + description: 'Start date for the date range filter. Format: yyyyMMdd.' + schema: + type: string + - name: to + in: query + required: true + description: 'End date for the date range filter. Format: yyyyMMdd.' + schema: + type: string + - name: detailed + in: query + description: If true, returns detailed job information including tasks, milestones, and notes. + schema: + type: boolean + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.job + - practicemanager.job.read + /v3.1/job.api/client/{identifier}: + get: + tags: + - JobV31 + summary: Return a list of all jobs assigned for a specific client + operationId: JobV31_ClientByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + - name: detailed + in: query + description: If true, returns detailed job information including tasks, milestones, and notes. + schema: + type: boolean + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.job + - practicemanager.job.read + /v3.1/job.api/get/{jobNumber}: + get: + tags: + - JobV31 + summary: Detailed information for a specific job + operationId: JobV31_Get + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: jobNumber + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.job + - practicemanager.job.read + /v3.1/job.api/state: + put: + tags: + - JobV31 + summary: Update the state of a specific job + operationId: JobV31_State + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobStateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/add: + post: + tags: + - JobV31 + summary: Add a job + operationId: JobV31_Add + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobAddRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/update: + put: + tags: + - JobV31 + summary: Update a job + operationId: JobV31_Update + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/reordertasks: + put: + tags: + - JobV31 + summary: Reorder the tasks on a job + operationId: JobV31_ReOrderTasks + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobReOrderTasksRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/note: + post: + tags: + - JobV31 + summary: Add a note to a job + operationId: JobV31_Note + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobNoteRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/document: + post: + tags: + - JobV31 + summary: Add a document to a job + operationId: JobV31_Document + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobDocumentRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/tasks: + get: + tags: + - JobV31 + summary: Return a list of jobs and their tasks matching the specified criteria + operationId: JobV31_Tasks + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: complete + in: query + description: 'Filter tasks by completion status. Values: ''true'' or ''false''.' + schema: + type: string + - name: due + in: query + description: 'Filter tasks due on or before this date. Format: yyyyMMdd.' + schema: + type: string + - name: start + in: query + description: 'Filter tasks starting on or after this date. Format: yyyyMMdd.' + schema: + type: string + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.job + - practicemanager.job.read + /v3.1/job.api/assign: + put: + tags: + - JobV31 + summary: Assign staff to a job + operationId: JobV31_Assign + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobAssignRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/delete: + post: + tags: + - JobV31 + summary: Delete a job + operationId: JobV31_Delete + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobDeleteRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/task: + post: + tags: + - JobV31 + summary: Add a task to a job + operationId: JobV31_TaskAdd + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobTaskAddRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/UuidResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + put: + tags: + - JobV31 + summary: Update a task on a job + operationId: JobV31_TaskUpdate + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobTaskUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/UuidResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/costs/{jobNumber}: + get: + tags: + - JobV31 + summary: Return a list of costs for a job + operationId: JobV31_Costs + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: jobNumber + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobCostListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.job + - practicemanager.job.read + /v3.1/job.api/cost: + post: + tags: + - JobV31 + summary: Add a cost to a job + operationId: JobV31_CostAdd + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobCostAddRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/UuidResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + put: + tags: + - JobV31 + summary: Update a cost on a job + operationId: JobV31_CostUpdate + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobCostUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/UuidResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/applytemplate: + post: + tags: + - JobV31 + summary: Apply an additional template to a job + operationId: JobV31_ApplyTemplate + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JobApplyTemplateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/documents/{id}: + get: + tags: + - JobV31 + summary: Return a list of documents for a job + operationId: JobV31_Documents + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: id + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobDocumentsResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.job + - practicemanager.job.read + /v3.1/job.api/task/{identifier}/complete: + put: + tags: + - JobV31 + summary: Complete a task on a job + operationId: JobV31_CompleteTask + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/task/{identifier}/reopen: + put: + tags: + - JobV31 + summary: Re-open a task on a job + operationId: JobV31_ReOpenTask + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/createquote/{jobNumber}: + post: + tags: + - JobV31 + summary: Create a quote based on the job + operationId: JobV31_CreateQuote + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: jobNumber + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CreateQuoteResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/createestimate/{jobNumber}: + post: + tags: + - JobV31 + summary: Create an estimate based on the job + operationId: JobV31_CreateEstimate + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: jobNumber + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/CreateEstimateResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.job + /v3.1/job.api/staff/{identifier}: + get: + tags: + - Job2V31 + summary: Return a list of all current jobs assigned to a staff member + operationId: Job2V31_StaffByIdentifier + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/Job2ResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager.job + - practicemanager.job.read + /v3.1/jobstate.api/list: + get: + tags: + - JobStateV31 + summary: Return a list of all job states + operationId: JobStateV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/JobStateListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.job + - practicemanager.job.read + /v3.1/quote.api/current: + get: + tags: + - QuoteV31 + summary: Return a list of current quotes + operationId: QuoteV31_Current + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: detailed + in: query + schema: + type: boolean + default: false + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/QuoteListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/quote.api/draft: + get: + tags: + - QuoteV31 + summary: Return a list of draft quotes + operationId: QuoteV31_Draft + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: detailed + in: query + schema: + type: boolean + default: false + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/QuoteListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/quote.api/list: + get: + tags: + - QuoteV31 + summary: Return a list of current and archived quotes + operationId: QuoteV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: from + in: query + required: true + description: 'Start date for the date range filter. Format: yyyyMMdd.' + schema: + type: string + - name: to + in: query + required: true + description: 'End date for the date range filter. Format: yyyyMMdd.' + schema: + type: string + - name: detailed + in: query + description: If true, returns detailed quote information including tasks, costs, and options. + schema: + type: boolean + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/QuoteListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/quote.api/get/{quoteNumber}: + get: + tags: + - QuoteV31 + summary: Detailed information for a specific quote + operationId: QuoteV31_Get + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: quoteNumber + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/QuoteResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/staff.api/list: + get: + tags: + - StaffV31 + summary: Return a list of all staff members + operationId: StaffV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StaffListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.staff + - practicemanager.staff.read + /v3.1/staff.api/get/{identifier}: + get: + tags: + - StaffV31 + summary: Details for a specific staff member + operationId: StaffV31_GetByUuid + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StaffResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.staff + - practicemanager.staff.read + /v3.1/staff.api/add: + post: + tags: + - StaffV31 + summary: Add a staff member + operationId: StaffV31_Add + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/StaffAddRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StaffResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.staff + /v3.1/staff.api/update: + put: + tags: + - StaffV31 + summary: Update a staff member's details + operationId: StaffV31_Update + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/StaffUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/StaffResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.staff + /v3.1/staff.api/delete: + post: + tags: + - StaffV31 + summary: Delete a staff member + operationId: StaffV31_Delete + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/StaffIdentifierRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseBaseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.staff + /v3.1/staff.api/enable: + post: + tags: + - StaffV31 + summary: Enable a staff member so they can log into Practice Manager + operationId: StaffV31_Enable + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/StaffIdentifierRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseBaseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.staff + /v3.1/staff.api/disable: + post: + tags: + - StaffV31 + summary: Disable a staff member so they can no longer log into Practice Manager + operationId: StaffV31_Disable + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/StaffIdentifierRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseBaseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.staff + /v3.1/staff.api/forgottenpassword: + post: + tags: + - StaffV31 + summary: Reset a staff member's password + operationId: StaffV31_ForgottenPassword + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/StaffIdentifierRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseBaseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.staff + /v3.1/task.api/list: + get: + tags: + - TaskV31 + summary: Return a list of all tasks + operationId: TaskV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/TaskListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/task.api/get/{identifier}: + get: + tags: + - TaskV31 + summary: Details for a specific task + operationId: TaskV31_Get + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/TaskResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/template.api/list: + get: + tags: + - TemplateV31 + summary: Return a list of all templates + operationId: TemplateV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/TemplateResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + /v3.1/time.api/job/{jobNumber}: + get: + tags: + - TimeV31 + summary: Returns a list of time sheet entries for a specific job + operationId: TimeV31_Job + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: jobNumber + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/TimeListResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.time + - practicemanager.time.read + /v3.1/time.api/list: + get: + tags: + - TimeV31 + summary: Return a list of time sheet entries + operationId: TimeV31_List + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: from + in: query + required: true + description: 'Start date for the date range filter. Format: yyyyMMdd.' + schema: + type: string + - name: to + in: query + required: true + description: 'End date for the date range filter. Format: yyyyMMdd.' + schema: + type: string + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/TimeListResponseDto' + "400": + description: The request was invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.time + - practicemanager.time.read + /v3.1/time.api/staff/{identifier}: + get: + tags: + - TimeV31 + summary: Return a list of time sheet entries for a specific staff member + operationId: TimeV31_Staff + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + - name: from + in: query + required: true + description: 'Start date for the date range filter. Format: yyyyMMdd.' + schema: + type: string + - name: to + in: query + required: true + description: 'End date for the date range filter. Format: yyyyMMdd.' + schema: + type: string + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/TimeListResponseDto' + "400": + description: The request was invalid. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.time + - practicemanager.time.read + /v3.1/time.api/get/{identifier}: + get: + tags: + - TimeV31 + summary: Detailed information for a specific time entry + operationId: TimeV31_Get + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/TimeResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.read + - practicemanager.time + - practicemanager.time.read + /v3.1/time.api/add: + post: + tags: + - TimeV31 + summary: Add a time sheet entry to a job + operationId: TimeV31_Add + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TimeAddRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/TimeResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.time + /v3.1/time.api/update: + put: + tags: + - TimeV31 + summary: Update a time sheet entry on a job + operationId: TimeV31_Update + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TimeUpdateRequestDto' + required: true + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/TimeResponseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.time + /v3.1/time.api/delete/{identifier}: + delete: + tags: + - TimeV31 + summary: Delete a specific time sheet entry + operationId: TimeV31_Delete + parameters: + - name: Xero-Features + in: header + description: Comma-separated feature flags. Include 'practice-strict-content-type' to enable strict Accept/Content-Type negotiation. + schema: + type: string + - name: fields + in: query + description: Comma-separated list of fields to include in the response. When omitted, all fields are returned. + schema: + type: string + - name: identifier + in: path + required: true + schema: + type: string + x-position: 1 + responses: + "200": + description: The request was successful. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseBaseDto' + "500": + description: An unexpected error occurred. + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseErrorDto' + security: + - OAuth2: + - practicemanager + - practicemanager.time +components: + schemas: + CategoryResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + categories: + type: array + nullable: true + items: + $ref: '#/components/schemas/NamedEntityDto' + NamedEntityDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + ResponseBaseDto: + type: object + additionalProperties: false + properties: + status: + type: string + nullable: true + ResponseErrorDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + errorDescription: + type: string + nullable: true + ClientListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + clients: + type: array + nullable: true + items: + $ref: '#/components/schemas/ClientDetailedDto' + ClientDetailedDto: + allOf: + - $ref: '#/components/schemas/ClientDto' + - type: object + additionalProperties: false + properties: + notes: + type: array + nullable: true + items: + $ref: '#/components/schemas/ClientNoteDto' + groups: + type: array + nullable: true + items: + $ref: '#/components/schemas/NamedEntityDto' + relationships: + type: array + nullable: true + items: + $ref: '#/components/schemas/ClientRelationshipDto' + ClientNoteDto: + type: object + additionalProperties: false + properties: + title: + type: string + nullable: true + text: + type: string + nullable: true + folder: + type: string + nullable: true + date: + type: string + nullable: true + createdBy: + type: string + nullable: true + tags: + type: string + nullable: true + ClientRelationshipDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + type: + type: string + nullable: true + relatedClient: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + numberOfShares: + type: integer + format: int32 + nullable: true + percentage: + type: number + format: decimal + nullable: true + startDate: + type: string + nullable: true + endDate: + type: string + nullable: true + ClientDto: + allOf: + - $ref: '#/components/schemas/ClientBaseDto' + - type: object + additionalProperties: false + properties: + contacts: + type: array + nullable: true + items: + $ref: '#/components/schemas/ClientContactDto' + ClientContactDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + salutation: + type: string + nullable: true + addressee: + type: string + nullable: true + mobile: + type: string + nullable: true + email: + type: string + nullable: true + phone: + type: string + nullable: true + isDeleted: + type: string + nullable: true + isPrimary: + type: string + nullable: true + position: + type: string + nullable: true + ClientBaseDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + title: + type: string + nullable: true + gender: + type: string + nullable: true + firstName: + type: string + nullable: true + middleName: + type: string + nullable: true + lastName: + type: string + nullable: true + otherName: + type: string + nullable: true + email: + type: string + nullable: true + dateOfBirth: + type: string + nullable: true + dateOfDeath: + type: string + nullable: true + placeOfBirthCity: + type: string + nullable: true + placeOfBirthCountryCode: + type: string + nullable: true + address: + type: string + nullable: true + city: + type: string + nullable: true + region: + type: string + nullable: true + postCode: + type: string + nullable: true + country: + type: string + nullable: true + postalAddress: + type: string + nullable: true + postalCity: + type: string + nullable: true + postalRegion: + type: string + nullable: true + postalPostCode: + type: string + nullable: true + postalCountry: + type: string + nullable: true + phone: + type: string + nullable: true + fax: + type: string + nullable: true + website: + type: string + nullable: true + referralSource: + type: string + nullable: true + exportCode: + type: string + nullable: true + industry: + type: string + nullable: true + isProspect: + type: string + nullable: true + isArchived: + type: string + nullable: true + isDeleted: + type: string + nullable: true + accountManager: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + jobManager: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + type: + nullable: true + oneOf: + - $ref: '#/components/schemas/ClientTypeDto' + billingClient: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + taxNumber: + type: string + nullable: true + companyNumber: + type: string + nullable: true + businessNumber: + type: string + nullable: true + businessStructure: + type: string + nullable: true + balanceMonth: + type: integer + format: int32 + nullable: true + prepareGst: + type: string + nullable: true + gstRegistered: + type: string + nullable: true + gstPeriod: + type: string + nullable: true + gstBasis: + type: string + nullable: true + provisionalTaxBasis: + type: string + nullable: true + provisionalTaxRatio: + type: number + format: decimal + nullable: true + signedTaxAuthority: + type: string + nullable: true + taxAgent: + type: string + nullable: true + agencyStatus: + type: string + nullable: true + returnType: + type: string + nullable: true + prepareActivityStatement: + type: string + nullable: true + prepareTaxReturn: + type: string + nullable: true + branchNumber: + type: string + nullable: true + bankBsb: + type: string + nullable: true + bankAccountName: + type: string + nullable: true + bankAccountNumber: + type: string + nullable: true + bankName: + type: string + nullable: true + activeAtoClient: + type: string + nullable: true + clientCode: + type: string + nullable: true + autoBasOptInCriteria: + nullable: true + oneOf: + - $ref: '#/components/schemas/AutoBasOptInCriteriaDto' + webUrl: + type: string + nullable: true + ClientTypeDto: + type: object + additionalProperties: false + properties: + name: + type: string + nullable: true + costMarkup: + type: number + format: decimal + nullable: true + paymentTerm: + type: string + nullable: true + paymentDay: + type: integer + format: int32 + nullable: true + AutoBasOptInCriteriaDto: + type: object + additionalProperties: false + properties: + annually: + type: string + nullable: true + monthly: + type: string + nullable: true + quarterly: + type: string + nullable: true + opt-out: + type: string + nullable: true + ClientPagedListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + clients: + type: array + nullable: true + items: + $ref: '#/components/schemas/ClientBaseDto' + pagination: + nullable: true + oneOf: + - $ref: '#/components/schemas/PaginationDto' + PaginationDto: + type: object + additionalProperties: false + properties: + links: + nullable: true + oneOf: + - $ref: '#/components/schemas/PaginationLinksDto' + PaginationLinksDto: + type: object + additionalProperties: false + properties: + first: + type: string + nullable: true + next: + type: string + nullable: true + ClientResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + client: + nullable: true + oneOf: + - $ref: '#/components/schemas/ClientDetailedDto' + ClientAddRequestDto: + type: object + additionalProperties: false + properties: + name: + type: string + nullable: true + firstName: + type: string + nullable: true + lastName: + type: string + nullable: true + otherName: + type: string + nullable: true + middleName: + type: string + nullable: true + title: + type: string + nullable: true + gender: + type: string + nullable: true + email: + type: string + nullable: true + dateOfBirth: + type: string + nullable: true + dateOfDeath: + type: string + nullable: true + placeOfBirthCity: + type: string + nullable: true + placeOfBirthCountryCode: + type: string + nullable: true + address: + type: string + nullable: true + city: + type: string + nullable: true + region: + type: string + nullable: true + postCode: + type: string + nullable: true + country: + type: string + nullable: true + postalAddress: + type: string + nullable: true + postalCity: + type: string + nullable: true + postalRegion: + type: string + nullable: true + postalPostCode: + type: string + nullable: true + postalCountry: + type: string + nullable: true + phone: + type: string + nullable: true + fax: + type: string + nullable: true + webSite: + type: string + nullable: true + referralSource: + type: string + nullable: true + exportCode: + type: string + nullable: true + isProspect: + type: string + nullable: true + billingClientUuid: + type: string + nullable: true + accountManagerUuid: + type: string + nullable: true + jobManagerUuid: + type: string + nullable: true + taxNumber: + type: string + nullable: true + companyNumber: + type: string + nullable: true + businessNumber: + type: string + nullable: true + branchNumber: + type: string + nullable: true + businessStructure: + type: string + nullable: true + balanceMonth: + type: string + nullable: true + gstRegistered: + type: string + nullable: true + prepareGst: + type: string + nullable: true + gstPeriod: + type: integer + format: int32 + nullable: true + gstBasis: + type: string + nullable: true + provisionalTaxBasis: + type: string + nullable: true + provisionalTaxRatio: + type: number + format: decimal + nullable: true + signedTaxAuthority: + type: string + nullable: true + taxAgent: + type: string + nullable: true + agencyStatus: + type: string + nullable: true + prepareActivityStatement: + type: string + nullable: true + prepareTaxReturn: + type: string + nullable: true + autoBasOptInCriteria: + nullable: true + oneOf: + - $ref: '#/components/schemas/AutoBasOptInCriteriaDto' + returnType: + type: string + nullable: true + activeAtoClient: + type: string + nullable: true + clientCode: + type: string + nullable: true + contacts: + type: array + nullable: true + items: + $ref: '#/components/schemas/ContactInsertItemDto' + ContactInsertItemDto: + type: object + additionalProperties: false + properties: + name: + type: string + nullable: true + phone: + type: string + nullable: true + mobile: + type: string + nullable: true + email: + type: string + nullable: true + position: + type: string + nullable: true + salutation: + type: string + nullable: true + addressee: + type: string + nullable: true + isPrimary: + type: string + nullable: true + ClientUpdateRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + firstName: + type: string + nullable: true + lastName: + type: string + nullable: true + otherName: + type: string + nullable: true + middleName: + type: string + nullable: true + title: + type: string + nullable: true + gender: + type: string + nullable: true + email: + type: string + nullable: true + dateOfBirth: + type: string + nullable: true + dateOfDeath: + type: string + nullable: true + placeOfBirthCity: + type: string + nullable: true + placeOfBirthCountryCode: + type: string + nullable: true + address: + type: string + nullable: true + city: + type: string + nullable: true + region: + type: string + nullable: true + postCode: + type: string + nullable: true + country: + type: string + nullable: true + postalAddress: + type: string + nullable: true + postalCity: + type: string + nullable: true + postalRegion: + type: string + nullable: true + postalPostCode: + type: string + nullable: true + postalCountry: + type: string + nullable: true + phone: + type: string + nullable: true + fax: + type: string + nullable: true + webSite: + type: string + nullable: true + referralSource: + type: string + nullable: true + exportCode: + type: string + nullable: true + isProspect: + type: string + nullable: true + billingClientUuid: + type: string + nullable: true + accountManagerUuid: + type: string + nullable: true + jobManagerUuid: + type: string + nullable: true + taxNumber: + type: string + nullable: true + companyNumber: + type: string + nullable: true + businessNumber: + type: string + nullable: true + branchNumber: + type: string + nullable: true + businessStructure: + type: string + nullable: true + balanceMonth: + type: string + nullable: true + gstRegistered: + type: string + nullable: true + prepareGst: + type: string + nullable: true + gstPeriod: + type: integer + format: int32 + nullable: true + gstBasis: + type: string + nullable: true + provisionalTaxBasis: + type: string + nullable: true + provisionalTaxRatio: + type: number + format: decimal + nullable: true + signedTaxAuthority: + type: string + nullable: true + taxAgent: + type: string + nullable: true + agencyStatus: + type: string + nullable: true + prepareActivityStatement: + type: string + nullable: true + prepareTaxReturn: + type: string + nullable: true + autoBasOptInCriteria: + nullable: true + oneOf: + - $ref: '#/components/schemas/AutoBasOptInCriteriaDto' + returnType: + type: string + nullable: true + activeAtoClient: + type: string + nullable: true + clientCode: + type: string + nullable: true + ClientContactsResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + contacts: + type: array + nullable: true + items: + $ref: '#/components/schemas/ClientContactDto' + pagination: + nullable: true + oneOf: + - $ref: '#/components/schemas/PaginationDto' + ClientContactResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + contact: + nullable: true + oneOf: + - $ref: '#/components/schemas/ClientContactDto' + ContactRequestDto: + type: object + additionalProperties: false + properties: + name: + type: string + nullable: true + mobile: + type: string + nullable: true + email: + type: string + nullable: true + phone: + type: string + nullable: true + salutation: + type: string + nullable: true + addressee: + type: string + nullable: true + position: + type: string + nullable: true + isPrimary: + type: string + nullable: true + client: + nullable: true + oneOf: + - $ref: '#/components/schemas/ContactRequestClientDto' + ContactRequestClientDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + ClientAddContactsResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + client: + nullable: true + oneOf: + - $ref: '#/components/schemas/ClientAddContactsClientDto' + ClientAddContactsClientDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + contacts: + type: array + nullable: true + items: + $ref: '#/components/schemas/ClientAddContactsContactDto' + ClientAddContactsContactDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + position: + type: string + nullable: true + isPrimary: + type: string + nullable: true + ClientAddContactsRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + contacts: + type: array + nullable: true + items: + $ref: '#/components/schemas/ContactLinkItemDto' + ContactLinkItemDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + position: + type: string + nullable: true + isPrimary: + type: string + nullable: true + ClientArchiveRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + StatusResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + ClientDeleteRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + UuidResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + ClientDocumentRequestDto: + type: object + additionalProperties: false + properties: + clientUuid: + type: string + nullable: true + title: + type: string + nullable: true + text: + type: string + nullable: true + folder: + type: string + nullable: true + fileName: + type: string + nullable: true + content: + type: string + nullable: true + ClientDocumentsResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + documents: + type: array + nullable: true + items: + $ref: '#/components/schemas/ClientDocumentDto' + ClientDocumentDto: + type: object + additionalProperties: false + properties: + title: + type: string + nullable: true + text: + type: string + nullable: true + folder: + type: string + nullable: true + date: + type: string + nullable: true + createdBy: + type: string + nullable: true + fileName: + type: string + nullable: true + url: + type: string + nullable: true + ClientRelationshipResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + clientRelationship: + nullable: true + oneOf: + - $ref: '#/components/schemas/ClientRelationshipDetailDto' + ClientRelationshipDetailDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + client: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + relatedClient: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + relationshipType: + nullable: true + oneOf: + - $ref: '#/components/schemas/ClientRelationshipTypeDto' + numberOfShares: + type: integer + format: int32 + nullable: true + percentage: + type: number + format: decimal + nullable: true + startDate: + type: string + nullable: true + endDate: + type: string + nullable: true + ClientRelationshipTypeDto: + type: object + additionalProperties: false + properties: + name: + type: string + nullable: true + ClientRelationshipAddRequestDto: + type: object + additionalProperties: false + properties: + clientUuid: + type: string + nullable: true + relatedClientUuid: + type: string + nullable: true + type: + type: string + nullable: true + numberOfShares: + type: integer + format: int32 + nullable: true + percentage: + type: number + format: decimal + nullable: true + startDate: + type: string + nullable: true + endDate: + type: string + nullable: true + ClientRelationshipUpdateRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + numberOfShares: + type: integer + format: int32 + nullable: true + percentage: + type: number + format: decimal + nullable: true + startDate: + type: string + nullable: true + endDate: + type: string + nullable: true + ClientRelationshipDeleteRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + ClientGroupResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + group: + nullable: true + oneOf: + - $ref: '#/components/schemas/ClientGroupDetailDto' + ClientGroupDetailDto: + allOf: + - $ref: '#/components/schemas/ClientGroupDto' + - type: object + additionalProperties: false + properties: + clients: + type: array + nullable: true + items: + $ref: '#/components/schemas/NamedEntityDto' + ClientGroupDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + webUrl: + type: string + nullable: true + taxable: + type: string + nullable: true + ClientGroupListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + groups: + type: array + nullable: true + items: + $ref: '#/components/schemas/ClientGroupDto' + ClientGroupAddRequestDto: + type: object + additionalProperties: false + properties: + clientUuid: + type: string + nullable: true + name: + type: string + nullable: true + taxable: + type: string + nullable: true + ClientGroupMembersRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + add: + type: array + nullable: true + items: + $ref: '#/components/schemas/ClientGroupMemberActionDto' + remove: + type: array + nullable: true + items: + $ref: '#/components/schemas/ClientGroupMemberActionDto' + ClientGroupMemberActionDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + ClientGroupDeleteRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + CostResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + cost: + nullable: true + oneOf: + - $ref: '#/components/schemas/CostDto' + CostDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + description: + type: string + nullable: true + code: + type: string + nullable: true + note: + type: string + nullable: true + unitCost: + type: number + format: decimal + nullable: true + unitPrice: + type: number + format: decimal + nullable: true + incomeAccount: + type: string + nullable: true + costOfSaleAccount: + type: string + nullable: true + supplier: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + CostDeleteRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + CostDeleteAllRequestDto: + type: object + additionalProperties: false + CostAddRequestDto: + type: object + additionalProperties: false + properties: + description: + type: string + nullable: true + code: + type: string + nullable: true + note: + type: string + nullable: true + unitCost: + type: number + format: decimal + nullable: true + unitPrice: + type: number + format: decimal + nullable: true + supplierUuid: + type: string + nullable: true + CostUpdateRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + description: + type: string + nullable: true + code: + type: string + nullable: true + note: + type: string + nullable: true + unitCost: + type: number + format: decimal + nullable: true + unitPrice: + type: number + format: decimal + nullable: true + supplierUuid: + type: string + nullable: true + CostListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + records: + type: integer + format: int32 + nullable: true + costs: + type: array + nullable: true + items: + $ref: '#/components/schemas/CostDto' + CustomFieldValueListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + customFields: + type: array + nullable: true + items: + $ref: '#/components/schemas/CustomFieldValueDto' + CustomFieldValueDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + text: + type: string + nullable: true + date: + type: string + nullable: true + number: + type: number + format: decimal + nullable: true + decimal: + type: number + format: decimal + nullable: true + boolean: + type: boolean + nullable: true + CustomFieldValuesUpdateRequestDto: + type: object + additionalProperties: false + properties: + customFields: + type: array + nullable: true + items: + $ref: '#/components/schemas/CustomFieldValueRequestDto' + CustomFieldValueRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + text: + type: string + nullable: true + date: + type: string + nullable: true + number: + type: integer + format: int32 + nullable: true + decimal: + type: number + format: decimal + nullable: true + boolean: + type: boolean + nullable: true + CustomFieldDefinitionListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + customFieldDefinitions: + type: array + nullable: true + items: + $ref: '#/components/schemas/CustomFieldDefinitionDto' + CustomFieldDefinitionDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + linkUrl: + type: string + nullable: true + options: + type: string + nullable: true + useClient: + type: boolean + nullable: true + useContact: + type: boolean + nullable: true + useJob: + type: boolean + nullable: true + useLead: + type: boolean + nullable: true + useSupplier: + type: boolean + nullable: true + useJobTask: + type: boolean + nullable: true + useJobCost: + type: boolean + nullable: true + useJobTime: + type: boolean + nullable: true + type: + type: string + nullable: true + valueElement: + type: string + nullable: true + CustomFieldDefinitionResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + customFieldDefinition: + nullable: true + oneOf: + - $ref: '#/components/schemas/CustomFieldDefinitionDto' + AddCustomFieldDefinitionRequestDto: + type: object + additionalProperties: false + properties: + name: + type: string + nullable: true + linkUrl: + type: string + nullable: true + options: + type: array + nullable: true + items: + type: string + useClient: + type: boolean + nullable: true + useContact: + type: boolean + nullable: true + useJob: + type: boolean + nullable: true + useLead: + type: boolean + nullable: true + useSupplier: + type: boolean + nullable: true + useJobTask: + type: boolean + nullable: true + useJobCost: + type: boolean + nullable: true + useJobTime: + type: boolean + nullable: true + type: + type: string + nullable: true + UpdateCustomFieldDefinitionRequestDto: + allOf: + - $ref: '#/components/schemas/AddCustomFieldDefinitionRequestDto' + - type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + DeleteCustomFieldDefinitionRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + InvoiceListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + invoices: + type: array + nullable: true + items: + nullable: true + oneOf: + - $ref: '#/components/schemas/InvoiceDto' + InvoiceDto: + type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + uuid: + type: string + nullable: true + type: + type: string + nullable: true + jobText: + type: string + nullable: true + description: + type: string + nullable: true + date: + type: string + nullable: true + dueDate: + type: string + nullable: true + amount: + type: number + format: decimal + nullable: true + amountTax: + type: number + format: decimal + nullable: true + amountIncludingTax: + type: number + format: decimal + nullable: true + amountPaid: + type: number + format: decimal + nullable: true + amountOutstanding: + type: number + format: decimal + nullable: true + status: + type: string + nullable: true + client: + nullable: true + oneOf: + - $ref: '#/components/schemas/InvoicePartyDto' + contact: + nullable: true + oneOf: + - $ref: '#/components/schemas/InvoicePartyDto' + jobs: + type: array + nullable: true + items: + $ref: '#/components/schemas/InvoiceJobDto' + tasks: + type: array + nullable: true + items: + $ref: '#/components/schemas/InvoiceTaskDto' + costs: + type: array + nullable: true + items: + $ref: '#/components/schemas/InvoiceCostDto' + InvoicePartyDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + InvoiceJobDto: + type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + name: + type: string + nullable: true + description: + type: string + nullable: true + clientOrderNumber: + type: string + nullable: true + tasks: + type: array + nullable: true + items: + $ref: '#/components/schemas/InvoiceTaskDto' + costs: + type: array + nullable: true + items: + $ref: '#/components/schemas/InvoiceCostDto' + InvoiceTaskDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + description: + type: string + nullable: true + minutes: + type: integer + format: int32 + nullable: true + billableRate: + type: number + format: decimal + nullable: true + billable: + type: string + nullable: true + amount: + type: number + format: decimal + nullable: true + amountTax: + type: number + format: decimal + nullable: true + amountIncludingTax: + type: number + format: decimal + nullable: true + InvoiceCostDto: + type: object + additionalProperties: false + properties: + description: + type: string + nullable: true + note: + type: string + nullable: true + code: + type: string + nullable: true + billable: + type: string + nullable: true + quantity: + type: number + format: decimal + nullable: true + unitCost: + type: number + format: decimal + nullable: true + unitPrice: + type: number + format: decimal + nullable: true + amount: + type: number + format: decimal + nullable: true + amountTax: + type: number + format: decimal + nullable: true + amountIncludingTax: + type: number + format: decimal + nullable: true + InvoiceResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + invoice: + nullable: true + oneOf: + - $ref: '#/components/schemas/InvoiceDto' + InvoicePaymentsResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + payments: + type: array + nullable: true + items: + nullable: true + oneOf: + - $ref: '#/components/schemas/InvoicePaymentDto' + InvoicePaymentDto: + type: object + additionalProperties: false + properties: + amount: + type: number + format: decimal + nullable: true + date: + type: string + nullable: true + reference: + type: string + nullable: true + JobListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + jobs: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobDto' + JobDto: + type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + uuid: + type: string + nullable: true + name: + type: string + nullable: true + description: + type: string + nullable: true + client: + nullable: true + oneOf: + - $ref: '#/components/schemas/JobPartyDto' + clientOrderNumber: + type: string + nullable: true + budget: + type: number + format: decimal + nullable: true + state: + type: string + nullable: true + type: + type: string + nullable: true + startDate: + type: string + nullable: true + dueDate: + type: string + nullable: true + completedDate: + type: string + nullable: true + contact: + nullable: true + oneOf: + - $ref: '#/components/schemas/JobPartyDto' + internalId: + type: string + nullable: true + manager: + nullable: true + oneOf: + - $ref: '#/components/schemas/JobPartyDto' + partner: + nullable: true + oneOf: + - $ref: '#/components/schemas/JobPartyDto' + assigned: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobStaffDto' + tasks: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobTaskDto' + milestones: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobMilestoneDto' + notes: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobNoteDto' + webUrl: + type: string + nullable: true + JobPartyDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + JobStaffDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + allocatedMinutes: + type: integer + format: int32 + nullable: true + JobTaskDto: + allOf: + - $ref: '#/components/schemas/SimpleEntityDto' + - type: object + additionalProperties: false + properties: + taskUuid: + type: string + nullable: true + taskId: + type: string + nullable: true + estimatedMinutes: + type: integer + format: int32 + nullable: true + actualMinutes: + type: integer + format: int32 + nullable: true + completed: + type: boolean + nullable: true + billable: + type: boolean + nullable: true + folder: + type: string + nullable: true + startDate: + type: string + nullable: true + dueDate: + type: string + nullable: true + assigned: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobStaffDto' + SimpleEntityDto: + allOf: + - $ref: '#/components/schemas/NamedEntityDto' + - type: object + additionalProperties: false + properties: + description: + type: string + nullable: true + JobMilestoneDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + date: + type: string + nullable: true + description: + type: string + nullable: true + completed: + type: boolean + nullable: true + folder: + type: string + nullable: true + JobNoteDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + title: + type: string + nullable: true + text: + type: string + nullable: true + folder: + type: string + nullable: true + date: + type: string + nullable: true + createdBy: + type: string + nullable: true + comments: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobNoteCommentDto' + JobNoteCommentDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + text: + type: string + nullable: true + date: + type: string + nullable: true + createdBy: + type: string + nullable: true + JobResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + job: + nullable: true + oneOf: + - $ref: '#/components/schemas/JobDto' + JobStateRequestDto: + type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + state: + type: string + nullable: true + JobAddRequestDto: + type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + name: + type: string + nullable: true + description: + type: string + nullable: true + clientUuid: + type: string + nullable: true + contactUuid: + type: string + nullable: true + startDate: + type: string + nullable: true + dueDate: + type: string + nullable: true + categoryUuid: + type: string + nullable: true + budget: + type: number + format: decimal + nullable: true + clientNumber: + type: string + nullable: true + templateUuid: + type: string + nullable: true + JobUpdateRequestDto: + type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + name: + type: string + nullable: true + description: + type: string + nullable: true + startDate: + type: string + nullable: true + dueDate: + type: string + nullable: true + categoryUuid: + type: string + nullable: true + budget: + type: number + format: decimal + nullable: true + clientNumber: + type: string + nullable: true + JobReOrderTasksRequestDto: + type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + tasks: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobTaskReorderItemDto' + JobTaskReorderItemDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + JobNoteRequestDto: + type: object + additionalProperties: false + properties: + job: + type: string + nullable: true + title: + type: string + nullable: true + text: + type: string + nullable: true + folder: + type: string + nullable: true + public: + type: boolean + nullable: true + JobDocumentRequestDto: + type: object + additionalProperties: false + properties: + job: + type: string + nullable: true + title: + type: string + nullable: true + text: + type: string + nullable: true + folder: + type: string + nullable: true + public: + type: boolean + nullable: true + fileName: + type: string + nullable: true + content: + type: string + nullable: true + JobAssignRequestDto: + type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + add-manager: + nullable: true + oneOf: + - $ref: '#/components/schemas/JobAssignStaffOperationDto' + remove-manager: + nullable: true + oneOf: + - $ref: '#/components/schemas/JobAssignEmptyOperationDto' + add-partner: + nullable: true + oneOf: + - $ref: '#/components/schemas/JobAssignStaffOperationDto' + remove-partner: + nullable: true + oneOf: + - $ref: '#/components/schemas/JobAssignEmptyOperationDto' + add: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobAssignStaffTaskOperationDto' + remove: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobAssignStaffTaskOperationDto' + JobAssignStaffOperationDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + JobAssignEmptyOperationDto: + type: object + additionalProperties: false + JobAssignStaffTaskOperationDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + task-uuid: + type: string + nullable: true + JobDeleteRequestDto: + type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + JobTaskAddRequestDto: + type: object + additionalProperties: false + properties: + job: + type: string + nullable: true + taskUuid: + type: string + nullable: true + label: + type: string + nullable: true + description: + type: string + nullable: true + estimatedMinutes: + type: integer + format: int32 + nullable: true + startDate: + type: string + nullable: true + dueDate: + type: string + nullable: true + JobTaskUpdateRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + label: + type: string + nullable: true + description: + type: string + nullable: true + estimatedMinutes: + type: integer + format: int32 + nullable: true + startDate: + type: string + nullable: true + dueDate: + type: string + nullable: true + JobCostListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + costs: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobCostDto' + JobCostDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + description: + type: string + nullable: true + quantity: + type: number + format: decimal + nullable: true + unitCost: + type: number + format: decimal + nullable: true + unitPrice: + type: number + format: decimal + nullable: true + date: + type: string + nullable: true + code: + type: string + nullable: true + note: + type: string + nullable: true + billable: + type: boolean + nullable: true + supplier: + nullable: true + oneOf: + - $ref: '#/components/schemas/JobCostSupplierDto' + JobCostSupplierDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + JobCostAddRequestDto: + type: object + additionalProperties: false + properties: + job: + type: string + nullable: true + description: + type: string + nullable: true + code: + type: string + nullable: true + note: + type: string + nullable: true + date: + type: string + nullable: true + quantity: + type: number + format: decimal + nullable: true + unitCost: + type: number + format: decimal + nullable: true + unitPrice: + type: number + format: decimal + nullable: true + billable: + type: boolean + nullable: true + supplierUuid: + type: string + nullable: true + JobCostUpdateRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + description: + type: string + nullable: true + code: + type: string + nullable: true + note: + type: string + nullable: true + date: + type: string + nullable: true + quantity: + type: number + format: decimal + nullable: true + unitCost: + type: number + format: decimal + nullable: true + unitPrice: + type: number + format: decimal + nullable: true + billable: + type: boolean + nullable: true + supplierUuid: + type: string + nullable: true + JobApplyTemplateRequestDto: + type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + templateUuid: + type: string + nullable: true + taskMode: + type: string + nullable: true + JobDocumentsResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + documents: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobDocumentDto' + JobDocumentDto: + type: object + additionalProperties: false + properties: + title: + type: string + nullable: true + text: + type: string + nullable: true + folder: + type: string + nullable: true + date: + type: string + nullable: true + createdBy: + type: string + nullable: true + fileName: + type: string + nullable: true + url: + type: string + nullable: true + CreateQuoteResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + CreateEstimateResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + Job2ResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + jobs: + type: array + nullable: true + items: + $ref: '#/components/schemas/Job2Dto' + Job2Dto: + allOf: + - $ref: '#/components/schemas/SimpleEntityDto' + - type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + client: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + clientOrderNumber: + type: string + nullable: true + budget: + type: number + format: decimal + nullable: true + state: + type: string + nullable: true + type: + type: string + nullable: true + startDate: + type: string + nullable: true + dueDate: + type: string + nullable: true + completedDate: + type: string + nullable: true + contact: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + manager: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + assigned: + type: array + nullable: true + items: + $ref: '#/components/schemas/NamedEntityDto' + tasks: + type: array + nullable: true + items: + $ref: '#/components/schemas/JobTaskDto' + JobStateListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + jobStates: + type: array + nullable: true + items: + $ref: '#/components/schemas/NamedEntityDto' + QuoteListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + quotes: + type: array + nullable: true + items: + $ref: '#/components/schemas/QuoteDto' + QuoteDto: + type: object + additionalProperties: false + properties: + name: + type: string + nullable: true + description: + type: string + nullable: true + id: + type: string + nullable: true + type: + type: string + nullable: true + state: + type: string + nullable: true + budget: + type: number + format: decimal + nullable: true + optionExplanation: + type: string + nullable: true + date: + type: string + nullable: true + validDate: + type: string + nullable: true + estimatedCost: + type: number + format: decimal + nullable: true + estimatedCostTax: + type: number + format: decimal + nullable: true + estimatedCostIncludingTax: + type: number + format: decimal + nullable: true + amount: + type: number + format: decimal + nullable: true + amountTax: + type: number + format: decimal + nullable: true + amountIncludingTax: + type: number + format: decimal + nullable: true + client: + nullable: true + oneOf: + - $ref: '#/components/schemas/QuotePartyDto' + contact: + nullable: true + oneOf: + - $ref: '#/components/schemas/QuotePartyDto' + tasks: + type: array + nullable: true + items: + $ref: '#/components/schemas/QuoteTaskDto' + costs: + type: array + nullable: true + items: + $ref: '#/components/schemas/QuoteCostDto' + options: + type: array + nullable: true + items: + $ref: '#/components/schemas/QuoteOptionDto' + QuotePartyDto: + allOf: + - $ref: '#/components/schemas/NamedEntityDto' + - type: object + additionalProperties: false + QuoteTaskDto: + type: object + additionalProperties: false + properties: + name: + type: string + nullable: true + description: + type: string + nullable: true + estimatedMinutes: + type: integer + format: int32 + nullable: true + billableRate: + type: number + format: decimal + nullable: true + billable: + type: string + nullable: true + amount: + type: number + format: decimal + nullable: true + amountTax: + type: number + format: decimal + nullable: true + amountIncludingTax: + type: number + format: decimal + nullable: true + QuoteCostDto: + type: object + additionalProperties: false + properties: + description: + type: string + nullable: true + note: + type: string + nullable: true + code: + type: string + nullable: true + billable: + type: string + nullable: true + quantity: + type: number + format: decimal + nullable: true + unitCost: + type: number + format: decimal + nullable: true + unitPrice: + type: number + format: decimal + nullable: true + amount: + type: number + format: decimal + nullable: true + amountTax: + type: number + format: decimal + nullable: true + amountIncludingTax: + type: number + format: decimal + nullable: true + QuoteOptionDto: + type: object + additionalProperties: false + properties: + description: + type: string + nullable: true + note: + type: string + nullable: true + code: + type: string + nullable: true + quantity: + type: number + format: decimal + nullable: true + unitCost: + type: number + format: decimal + nullable: true + unitPrice: + type: number + format: decimal + nullable: true + amount: + type: number + format: decimal + nullable: true + amountTax: + type: number + format: decimal + nullable: true + amountIncludingTax: + type: number + format: decimal + nullable: true + QuoteResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + quote: + nullable: true + oneOf: + - $ref: '#/components/schemas/QuoteDto' + StaffListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + staffList: + type: array + nullable: true + items: + $ref: '#/components/schemas/StaffDto' + StaffDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + name: + type: string + nullable: true + email: + type: string + nullable: true + phone: + type: string + nullable: true + mobile: + type: string + nullable: true + address: + type: string + nullable: true + payrollCode: + type: string + nullable: true + webUrl: + type: string + nullable: true + StaffResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + staff: + nullable: true + oneOf: + - $ref: '#/components/schemas/StaffDto' + StaffAddRequestDto: + type: object + additionalProperties: false + properties: + name: + type: string + nullable: true + payrollCode: + type: string + nullable: true + address: + type: string + nullable: true + phone: + type: string + nullable: true + mobile: + type: string + nullable: true + email: + type: string + nullable: true + StaffUpdateRequestDto: + allOf: + - $ref: '#/components/schemas/StaffAddRequestDto' + - type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + StaffIdentifierRequestDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + TaskListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + taskList: + type: array + nullable: true + items: + $ref: '#/components/schemas/TaskDto' + TaskDto: + allOf: + - $ref: '#/components/schemas/SimpleEntityDto' + - type: object + additionalProperties: false + TaskResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + task: + nullable: true + oneOf: + - $ref: '#/components/schemas/TaskDto' + TemplateResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + templates: + type: array + nullable: true + items: + $ref: '#/components/schemas/TemplateDto' + TemplateDto: + allOf: + - $ref: '#/components/schemas/NamedEntityDto' + - type: object + additionalProperties: false + TimeListResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + times: + type: array + nullable: true + items: + $ref: '#/components/schemas/TimeDto' + TimeDto: + type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + job: + nullable: true + oneOf: + - $ref: '#/components/schemas/JobReferenceDto' + task: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + staff: + nullable: true + oneOf: + - $ref: '#/components/schemas/NamedEntityDto' + date: + type: string + nullable: true + minutes: + type: integer + format: int32 + nullable: true + note: + type: string + nullable: true + billable: + type: boolean + nullable: true + start: + type: string + nullable: true + end: + type: string + nullable: true + invoiceTaskUuid: + type: string + nullable: true + webUrl: + type: string + nullable: true + JobReferenceDto: + type: object + additionalProperties: false + properties: + id: + type: string + nullable: true + name: + type: string + nullable: true + TimeResponseDto: + allOf: + - $ref: '#/components/schemas/ResponseBaseDto' + - type: object + additionalProperties: false + properties: + time: + nullable: true + oneOf: + - $ref: '#/components/schemas/TimeDto' + TimeAddRequestDto: + type: object + additionalProperties: false + properties: + job: + type: string + nullable: true + staffUuid: + type: string + nullable: true + taskUuid: + type: string + nullable: true + date: + type: string + nullable: true + minutes: + type: string + nullable: true + start: + type: string + nullable: true + end: + type: string + nullable: true + note: + type: string + nullable: true + TimeUpdateRequestDto: + allOf: + - $ref: '#/components/schemas/TimeAddRequestDto' + - type: object + additionalProperties: false + properties: + uuid: + type: string + nullable: true + securitySchemes: + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: https://login.xero.com/identity/connect/authorize + tokenUrl: https://identity.xero.com/connect/token + scopes: + openid: Your application intends to use the user's identity + profile: First name, last name, full name and Xero user id + email: Email address + practicemanager: View and manage your Practice Manager data + practicemanager.read: View your Practice Manager data + practicemanager.client: View and manage your Practice Manager client data + practicemanager.client.read: View your Practice Manager client data + practicemanager.job: View and manage your Practice Manager job data + practicemanager.job.read: View your Practice Manager job data + practicemanager.staff: View and manage your Practice Manager staff data + practicemanager.staff.read: View your Practice Manager staff data + practicemanager.time: View and manage your Practice Manager time data + practicemanager.time.read: View your Practice Manager time data