Commusoft Customers API
Manage customer records including addresses, contacts, and property details
Manage customer records including addresses, contacts, and property details
openapi: 3.0.3
info:
title: Commusoft Authentication Customers 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: Customers
description: Manage customer records including addresses, contacts, and property details
paths:
/customers:
get:
operationId: listCustomers
summary: List Customers
description: Retrieve a list of customers from the Commusoft system.
tags:
- Customers
parameters:
- $ref: '#/components/parameters/UuidParam'
responses:
'200':
description: List of customers
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Customer'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createCustomer
summary: Create Customer
description: Add a new customer record to the Commusoft system.
tags:
- Customers
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerInput'
responses:
'201':
description: Customer created
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/customers/{uuid}:
get:
operationId: getCustomer
summary: Get Customer
description: Retrieve a specific customer record by UUID.
tags:
- Customers
parameters:
- $ref: '#/components/parameters/UuidPath'
responses:
'200':
description: Customer record
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: updateCustomer
summary: Update Customer
description: Edit an existing customer record identified by UUID.
tags:
- Customers
parameters:
- $ref: '#/components/parameters/UuidPath'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerInput'
responses:
'200':
description: Customer updated
content:
application/json:
schema:
$ref: '#/components/schemas/Customer'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteCustomer
summary: Delete Customer
description: Soft-delete a customer record. Commusoft never permanently deletes a customer; instead the record's Deleted field is set to 1.
tags:
- Customers
parameters:
- $ref: '#/components/parameters/UuidPath'
responses:
'200':
description: Customer soft-deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
schemas:
Customer:
type: object
properties:
id:
type: integer
description: Internal numeric ID
readOnly: true
uuid:
type: string
format: uuid
description: Universally unique identifier for the customer
readOnly: true
title:
type: string
description: Title (Mr, Mrs, Dr, etc.)
firstName:
type: string
description: Customer first name
lastName:
type: string
description: Customer last name
companyName:
type: string
description: Company name for business customers
email:
type: string
format: email
description: Primary email address
telephone:
type: string
description: Primary telephone number
mobile:
type: string
description: Mobile telephone number
address:
$ref: '#/components/schemas/Address'
propertyDetails:
$ref: '#/components/schemas/PropertyDetails'
accountingSettings:
$ref: '#/components/schemas/AccountingSettings'
deleted:
type: integer
enum:
- 0
- 1
description: Soft-delete flag; 1 indicates the record has been deleted
readOnly: true
createdAt:
type: string
format: date-time
readOnly: true
updatedAt:
type: string
format: date-time
readOnly: true
Error:
type: object
properties:
message:
type: string
description: Human-readable error message
code:
type: integer
description: Error code
PropertyDetails:
type: object
properties:
propertyType:
type: string
description: Type of property (residential, commercial, etc.)
numberOfBedrooms:
type: integer
description: Number of bedrooms
yearBuilt:
type: integer
description: Year the property was built
boilerMake:
type: string
description: Make of the boiler installed
boilerModel:
type: string
description: Model of the boiler installed
AccountingSettings:
type: object
properties:
accountingReference:
type: string
description: External accounting system reference code
vatNumber:
type: string
description: VAT registration number
paymentTerms:
type: integer
description: Payment terms in days
CustomerInput:
type: object
required:
- uuid
- lastName
properties:
uuid:
type: string
format: uuid
description: UUID for the new customer record
title:
type: string
description: Title (Mr, Mrs, Dr, etc.)
firstName:
type: string
description: Customer first name
lastName:
type: string
description: Customer last name
companyName:
type: string
description: Company name for business customers
email:
type: string
format: email
description: Primary email address
telephone:
type: string
description: Primary telephone number
mobile:
type: string
description: Mobile telephone number
address:
$ref: '#/components/schemas/Address'
propertyDetails:
$ref: '#/components/schemas/PropertyDetails'
accountingSettings:
$ref: '#/components/schemas/AccountingSettings'
Address:
type: object
properties:
addressLine1:
type: string
description: First line of the address
addressLine2:
type: string
description: Second line of the address
town:
type: string
description: Town or city
county:
type: string
description: County or region
postcode:
type: string
description: Postcode or zip code
country:
type: string
description: Country
parameters:
UuidParam:
name: uuid
in: query
required: false
description: Filter by UUID
schema:
type: string
format: uuid
UuidPath:
name: uuid
in: path
required: true
description: Unique identifier (UUID) of the record
schema:
type: string
format: uuid
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'
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