Introduction to our API
The ChiDesk API is a modern REST based API that grants access to ChiDesk client databases. All data is returned in a standard JSON format, which allows your developers to utilise this information on whatever platform it is needed.
Developers can access information such as appointment availability, class schedules, prices and other details. They can use this information to create a variety of applications for your business.
API Endpoints
All API URLs listed in this documentation are client account specific, and relative to https://[account].chidesk.com/api/. For example, the /services API call is reachable at https://[account].chidesk.com/api/services
Security and Authentication
All calls to our API require HTTPS and must include a custom header key named ChiDeskApiKey with it's value containing a generated API Key from the clients instance of ChiDesk.
Conventions
All date or time values and parameters are in UTC.
Date and time format should follow yyyy-MM-dd hh:mm.
For new items use an empty guid for any primary keys eg. 00000000-0000-0000-0000-000000000000.
Rate Limiting
To guarantee performance for all users calls are limited to a maximum of 8 per second, after which requests will fail with an HTTP status 429 - Too Many Requests.
Available methods
Appointments
GET /appointments
List appointments for a given date range
Parameters
SiteId |
Guid |
The site to list appointments from |
StateId |
Guid |
Filter appointments by a specific state. Use an empty Guid for all active appointments |
Start |
DateTime |
Start date |
End |
DateTime |
End date |
Find |
String |
Filter results based on client or service name |
ClientId |
Guid |
Fitler results to a specific client |
POST /appointments/availableTimes
List available start times for a given service
Parameters
SiteId |
Guid |
The site to list appointments from |
Day |
DateTime |
Date |
Services |
Guid array |
Find start times for a selection of Services |
PackageId |
Guid |
Find start times for a specific Package |
EmployeeIds |
Guid array |
Find start times for a specific Employee |
ClientId |
Guid |
Find start times for a specific Client |
CartItems |
Array of AppointmentService objects |
An array of existing AppointmentService objects that form part of a cart |
ServiceSequence |
Byte |
Sequential = 1, Same Start Time = 2 |
POST /appointments/validate
Validate a cart of items to ensure they are still available. Use this before posting a new appointment.
Parameters
SiteId |
Guid |
The site for this appointment |
CartItems |
Array of AppointmentService objects |
An array of existing AppointmentService objects that form part of a cart |
GET /appointments
Fetch an existing appointment
Parameters
AppointmentId |
Guid |
The appointment to fetch |
POST /appointments
Create a new appointment
Parameters
SiteId |
Guid |
The site this appointment belongs to |
Appointment |
Appointment |
An appointment object containing details of the new appointment |
PUT /appointments
Update an existing appointment
Parameters
AppointmentId |
Guid |
The appointment to update |
Appointment |
Appointment |
An appointment object containing details of the updated appointment |
POST /appointments/SetState
Update an existing appointment state
Parameters
AppointmentId |
Guid |
The appointment to update |
AppointmentStateId |
Guid |
The appointment state to use |
Classes
GET /classes/classschedules
List classes for a given date range
Parameters
SiteId |
Guid |
The site to list appointments from |
ClassType |
byte |
All = 0, Class = 1, Event = 2 |
Start |
DateTime |
Start date |
End |
DateTime |
End date |
Find |
String |
Filter results based on client or service name |
EmployeeId |
Guid |
Filter classes to a specific employee |
BookOnline |
Boolean |
Only return classes that can be booked online |
GET /classbookings
List all class bookings for a given date range
Parameters
SiteId |
Guid |
The site to list appointments from |
Start |
DateTime |
Start date |
End |
DateTime |
End date |
POST /classbookings
Create a new class booking
Parameters
ClassBooking |
ClassBooking |
A class booking object containing details of the new class booking |
PUT /classbookings
Update an existing class booking
Parameters
ClassBookingId |
Guid |
The class booking to update |
ClassBooking |
ClassBooking |
A class booking object containing details of the class booking |
Clients
GET /clients
List clients
Parameters
SiteId |
Guid |
The site to list appointments from |
ItemState |
Byte |
Client state. Active = 1, Inactive = 2 |
Find |
String |
Filter results based on client or service name |
CreationDate |
Date |
Filter results based on client creation date |
GET /clients
Fetch a client
Parameters
Id |
Guid |
The client to fetch |
GET /clients/emailexists
Checks if a client with the specified email exists
Parameters
SiteId |
Guid |
The site the client is assigned to |
Email |
String |
The email address to search for |
GET /clients/mobileexists
Checks if a client with the specified mobile number exists
Parameters
SiteId |
Guid |
The site the client is assigned to |
Mobile |
String |
The mobile number to search for |
GET /clients/appointmenthistory
List a history of appointments the client has booked
Parameters
ClientId |
Guid |
The client to list appointments history for |
SiteId |
Guid |
The site to list appointments from |
Start |
DateTime |
Start date |
End |
DateTime |
End date |
POST /clients
Create a new client
Parameters
Client |
Client |
A client object containing details of the new client |
PUT /clients
Update an existing client
Parameters
ClientId |
Guid |
The client to update |
Client |
Client |
A client object containing details of the client |
GET /clients/authenticate
Check if the email and password for a client are valid
Parameters
ClientId |
Guid |
The id of the client retrieved using the EmailExists end-point |
Email |
String |
The email address to check |
Password |
String |
The plain-text password to check |
Courses
GET /courses
List courses
Parameters
SiteId |
Guid |
The site to list courses from |
ItemState |
Byte |
Course state. Active = 1, Inactive = 2 |
Find |
String |
Filter results based on course name |
GET /clientcustomforms
List client custom form data
Parameters
SiteId |
Guid |
The site to list data from |
Start |
DateTime |
Start date |
End |
DateTime |
End date |
Employees
GET /employees
List employees
Parameters
SiteId |
Guid |
The site to list employees from |
ItemState |
Byte |
Employee state. Active = 1, Inactive = 2 |
Find |
String |
Filter results based on employee name |
GET /employees/schedules
List employee schedules
Parameters
SiteId |
Guid |
The site to list from |
Start |
DateTime |
Start date |
End |
DateTime |
End date |
Memberships
GET /memberships
List memberships
Parameters
SiteId |
Guid |
The site to list memberships from |
ItemState |
Byte |
Membership state. Active = 1, Inactive = 2 |
Find |
String |
Filter results based on membership name |
Products
GET /products
List products
Parameters
SiteId |
Guid |
The site to list products from |
ItemState |
Byte |
Product state. Active = 1, Inactive = 2 |
Find |
String |
Filter results based on product name |
AllowSale |
Boolean |
Only show products marked as sellable |
Receipts
GET /accountingentries
List receipts or payments
Parameters
SiteId |
Guid |
The site to list from |
EntryType |
Byte |
Type of entry. Receipt = 1, Payment = 2 |
Start |
DateTime |
Start date |
End |
DateTime |
End date |
Find |
String |
Filter results based on entry number, client name or document number |
POST /accountingentries
Create a new receipt or payment
Parameters
SiteId |
Guid |
The site you are creating the receipt for |
AccountingEntry |
AccountingEntry |
An AccountingEntry object |
PUT /accountingentries
Update an existing receipt or payment
Parameters
AccountingEntryId |
Guid |
The entry you are updating |
AccountingEntry |
AccountingEntry |
An AccountingEntry object |
Reports
GET /reports/sales
List all sales that took place over a given date range
Parameters
SiteId |
Guid |
Pass a null value for all sites |
Start |
DateTime |
Start date |
End |
DateTime |
End date |
Sales
GET /accountingdocuments
List accounting documents
Parameters
SiteId |
Guid |
The site to list documents from |
ClientDocuments |
Boolean |
Filter to Client or Supplier documents |
Start |
DateTime |
Start date |
End |
DateTime |
End date |
Find |
String |
Filter results based on document number or client name |
GET /accountingdocuments
Fetch a specific accounting document
Parameters
AccountingDocumentId |
Guid |
The document to fetch |
Services
GET /services
List services
Parameters
SiteId |
Guid |
The site to list services from |
ItemState |
Byte |
Service state. Active = 1, Inactive = 2 |
Find |
String |
Filter results based on service name |
ShowPackageServices |
Boolean |
Show services that are marked as package services only |
Sites
GET /sites
List sites
Time Records
GET /timerecords
List time records for a given date range
Parameters
SiteId |
Guid |
The site to list time records from |
Start |
DateTime |
Start date |
End |
DateTime |
End date |
Find |
String |
Filter results |
Vouchers
GET /vouchers
List vouchers
Parameters
SiteId |
Guid |
The site to list from |
ItemState |
Byte |
Client state. Active = 1, Inactive = 2 |
Find |
String |
Filter results based on entry number, client name or document number |
POST /vouchers
Create a new voucher
Parameters
SiteId |
Guid |
The site you are creating the voucher for |
Voucher |
Voucher |
A Voucher object |
PUT /vouchers
Update an existing voucher
Parameters
VoucherId |
Guid |
The voucher you are updating |
Voucher |
Voucher |
A Voucher object |
Objects
Client
ClientId |
Guid |
|
SiteId |
Guid |
The site the client belongs to |
State |
Byte |
Active = 1, Inactive = 2 |
FirstName |
String |
First name |
LastName |
String |
Last name |
Email |
String |
Email address |
MobilePhone |
String |
Mobile phone number |
Gender |
Byte |
Female = 1, Male = 2 |
MembershipId |
Guid |
The membership the client belongs to |
AccountPassword |
String |
A plain-text password for their members area access. |
NewAccountPassword |
String |
A new plain-text password for their members area access. |
MembershipStart |
DateTime |
Membership start date |
MembershipEnd |
DateTime |
Membership end date |
PhysicalAddress |
Address Object |
|
BillingAddress |
Address Object |
|
PostalAddress |
Address Object |
|
ClientNotes |
Array of Client Notes |
A list of Client Notes attached to this Client |
Client Note
ClientNoteId |
Guid |
|
ClientId |
Guid |
|
ClientNoteType |
Byte |
General = 1, Appointment = 2, Invoice = 3, Medical = 4 |
Body |
String |
|
Category |
String |
|
ObjectState |
Byte |
Unchanged = 0, Created = 1, Updated = 2, Deleted = 3 |
Address
Street |
String |
|
City |
String |
|
State |
String |
|
Code |
String |
|
Country |
String |
|
Appointment
AppointmentId |
Guid |
|
SiteId |
Guid |
The site the client belongs to |
ClientId |
Guid |
The client this appointment belongs to |
ClientTypeId |
Guid |
The client type for this appointment |
AppointmentNumber |
String |
Unique friendly reference for the appointment |
AppointmentStateId |
Guid |
The state of the appointment |
Notes |
String |
|
SourceId |
Guid |
The source of this appointment |
UserId |
Guid |
The user who created this appointment |
VIP |
Boolean |
Mark this appointment very important |
SeriesId |
Guid |
A unique identifier that links copied appointments together |
AppointmentServices |
Array of Appointment Services |
A list of Appointment Services that make up this appointment |
Appointment Service
AppointmentServiceId |
Guid |
|
AppointmentId |
Guid |
|
ClientId |
Guid |
The client this service is being performed for |
ServiceId |
Guid |
The service being performed |
PackageId |
Guid |
The package this service belongs to |
PackageGroupId |
Guid |
Links all services of a specific package together |
Start |
DateTime |
The start time of the service |
End |
DateTime |
The end time of the service |
Description |
String |
Name of the service or custom item |
Employees |
Array of Appointment Service Employees |
A list of Employees performing this service |
Resources |
Array of Appointment Service Resources |
A list of Resources being used to perform this service |
Appointment Service Employee
EmployeeId |
Guid |
|
FirstName |
String |
Required |
LastName |
String |
Required |
Appointment Service Resource
ResourceId |
Guid |
|
Name |
String |
Required |
Class Booking
ClassBookingId |
Guid |
A unique identifier for this booking |
ClassScheduleId |
Guid |
The class scheduled for this booking |
ClientId |
Guid |
The client of this booking |
OnlineBooking |
Boolean |
Indicates if this is an online booking or manual booking |
ClassBookingState |
Byte |
Booked = 1, CheckedIn = 2, NoShow = 3, LateCancelled = 4, Cancelled = 5 |
Accounting Entry
AccountingEntryId |
Guid |
Required |
SiteId |
Guid |
Required |
ClientId |
Guid |
Required for receipts |
SupplierId |
Guid |
Required for payments |
EntryNumber |
String |
Leave empty for auto-generation |
Reference |
String |
|
Description |
String |
|
EntryDate |
DateTime |
|
AccountingEntryTypeId |
Byte |
Receipt = 1, Payment = 2 |
AccountingDocumentId |
Guid |
Optional link to invoice |
AmountDue |
Decimal |
Required |
Received |
Decimal |
Required |
Gratuity |
Decimal |
Required |
Change |
Decimal |
Required |
Total |
Decimal |
Required |
PaymentTypeId |
Guid |
Required |
VoucherId |
Guid |
Optional link to used Voucher |
UserId |
Guid |
|
CashDrawerId |
Guid |
Required |
Gratuities |
Array of AccountingEntryGratuity objects |
Specify which employees receive the gratuity specified |
Accounting Entry Gratuity
AccountingEntryId |
Guid |
Required |
EmployeeId |
Guid |
Required |
Voucher
VoucherId |
Guid |
Required |
SiteId |
Guid |
Leave empty for a shared voucher |
State |
Byte |
Voucher state. Active = 1, Inactive = 2 |
VoucherType |
Byte |
Voucher = 1, Gift Card = 2 |
VoucherNumber |
String |
Leave empty for auto-generation |
ExpiryDate |
DateTime |
Required |
DeliveryDate |
DateTime |
Optional |
ActivationDate |
DateTime |
Optional |
AccountingEntryTypeId |
Byte |
Receipt = 1, Payment = 2 |
ClientId |
Guid |
Optional link to client |
SourceId |
Guid |
Optional link to source |
CreatedSiteId |
Guid |
Optional link to site on which voucher was created |
Description |
String |
|
Recipient |
String |
|
RecipientEmail |
String |
|
RecipientMessage |
String |
|
Template |
Byte |
General = 0, Birthday = 1, WithLove = 2, ThankYou = 3, Congratulations = 4 |
Notes |
String |
|
BarCode |
String |
|
Category |
String |
|
From |
String |
|
Amount |
Decimal |
Required |
Error messages and troubleshooting
No HTTP resource was found that matches the request URI
Make sure you are passing through all parameters to the function, even empty ones. For example:
/api/Appointments/AvailableTimes?SiteId=c231e3aa-a317-4321-88ef-fe989356babc&Day=2020-07-08&Services[0]=99677d88-3ed2-4b47-a222-0389adb808ce&PackageId=&ClientId=&CartItems&ServiceSequence=1