openapi: 3.0.3 info: title: Commusoft Authentication Diary Events API description: The Commusoft API is a RESTful JSON-based API designed to allow third parties to integrate products and applications with Commusoft's field service management platform. It enables programmatic management of jobs, customers, engineers, quotes, invoices, parts, and service histories for trades businesses including HVAC, plumbing, electrical, and building maintenance contractors. The API supports integrations with accounting tools (QuickBooks, Xero, Sage), payment processors (Stripe, GoCardless), and workflow automation platforms (Zapier). version: 1.0.0 contact: url: https://www.commusoft.com/ x-api-id: commusoft-api x-audience: external-partner servers: - url: https://api.commusoft.com/api/v1 description: Commusoft production API server security: - ApiTokenHeader: [] - ApiTokenQuery: [] tags: - name: Diary Events description: Manage calendar and scheduling diary events paths: /diary: get: operationId: listDiaryEvents summary: List Diary Events description: Retrieve calendar and scheduling diary events. tags: - Diary Events responses: '200': description: List of diary events content: application/json: schema: type: array items: $ref: '#/components/schemas/DiaryEvent' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createDiaryEvent summary: Create Diary Event description: Add a new diary event entry. tags: - Diary Events requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DiaryEventInput' responses: '201': description: Diary event created content: application/json: schema: $ref: '#/components/schemas/DiaryEvent' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /diary/{uuid}: get: operationId: getDiaryEvent summary: Get Diary Event description: Retrieve a specific diary event by UUID. tags: - Diary Events parameters: - $ref: '#/components/parameters/UuidPath' responses: '200': description: Diary event record content: application/json: schema: $ref: '#/components/schemas/DiaryEvent' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updateDiaryEvent summary: Update Diary Event description: Edit an existing diary event identified by UUID. tags: - Diary Events parameters: - $ref: '#/components/parameters/UuidPath' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DiaryEventInput' responses: '200': description: Diary event updated content: application/json: schema: $ref: '#/components/schemas/DiaryEvent' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: schemas: Error: type: object properties: message: type: string description: Human-readable error message code: type: integer description: Error code DiaryEventInput: type: object required: - title - startDateTime - endDateTime properties: uuid: type: string format: uuid title: type: string description: type: string startDateTime: type: string format: date-time endDateTime: type: string format: date-time engineerUuid: type: string format: uuid customerUuid: type: string format: uuid jobUuid: type: string format: uuid eventType: type: string DiaryEvent: type: object properties: id: type: integer readOnly: true uuid: type: string format: uuid readOnly: true title: type: string description: Title of the diary event description: type: string description: Detailed description of the event startDateTime: type: string format: date-time description: Event start date and time endDateTime: type: string format: date-time description: Event end date and time engineerUuid: type: string format: uuid description: UUID of the engineer assigned to this event customerUuid: type: string format: uuid description: UUID of the related customer jobUuid: type: string format: uuid description: UUID of the related job eventType: type: string description: Type/category of the diary event createdAt: type: string format: date-time readOnly: true updatedAt: type: string format: date-time readOnly: true responses: Unauthorized: description: Authentication token missing or invalid content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: Invalid request body or parameters content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/Error' parameters: UuidPath: name: uuid in: path required: true description: Unique identifier (UUID) of the record schema: type: string format: uuid securitySchemes: ApiTokenHeader: type: apiKey in: header name: X-Auth-Token description: API token obtained from the /getToken endpoint ApiTokenQuery: type: apiKey in: query name: token description: API token passed as a query parameter