This is the official PracSuite API.
It follows standard REST conventions, so you can work with it using any HTTP client and any programming language that can send HTTP requests.
All responses are returned in JSON format.
This is the official PracSuite API.
It follows standard REST conventions, so you can work with it using any HTTP client and any programming language that can send HTTP requests.
All responses are returned in JSON format.
{ "links": { "self": "https://api.pracsuite.com/v1/appointment/1", "resources": "https://api.pracsuite.com/v1/appointment/1/resource" }, "tenant_id": 0, "appointment_id": 0, "client_id": 0, "app_time": "2019-08-24T14:15:22Z", "description": "string", "appointment_type_id": 0, "appointment_status_id": 0, "category": "string", "duration": 0, "notes": "string", "practitioner_id": 0, "business_id": 0, "profession_id": 0, "item_id": 0, "account_id": 0, "created": "2019-08-24T14:15:22Z", "modified": "2019-08-24T14:15:22Z", "item_group_id": 0, "telehealth_patient_link": "string", "telehealth_practitioner_link": "string", "resource_ids": [ 0 ] }
curl -i -X GET \
'https://api.pracsuite.com/v1/appointment?page=1&page_size=50&sort_by=%5B%22appointment_id%22%2C%22app_time%22%5D&q%5B%5D=string' \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'x-api-key: YOUR_API_KEY_HERE'{ "appointments": [ { … } ], "total_entries": 0, "links": { "self": "https://api.pracsuite.com/v1/appointment?page=2", "previous": "https://api.pracsuite.com/v1/appointment?page=1", "next": "https://api.pracsuite.com/v1/appointment?page=3" } }
We recommend using Available Appointment to discover available times for a practitioner. After a time is found, use Reserve (optional) and Finalise Appointment to complete the booking process.
Alternatively, you can use Create Appointment, which requires you to pass in start and end times for the appointment.
The API will apply the default Appointment Type configuration for the following, unless specified in the request body:
For practitioner records with multiple active professions, their default profession will be used unless profession_id is specified in the body.
Practitioners can have multiple appointment book columns as defined in Practitioner object. Supply the column number to control which column the appointment is booked in. The specified column_number must not exceed the number of columns enabled on the practitioner record. Requests that specify an invalid column number will be rejected.
Required. ISO datetime in the tenant's timezone. Format: yyyy-MM-dd'T'HH:mm:ss
curl -i -X POST \
https://api.pracsuite.com/v1/appointment \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-d '{
"client_id": 0,
"appointment_type_id": 0,
"app_time": "2025-01-01T12:00:00",
"practitioner_id": 0,
"business_id": 0,
"duration": 5,
"appointment_status_id": 0,
"account_id": 0,
"profession_id": 0,
"item_id": 0,
"item_group_id": 0,
"column_number": 1,
"width": 1,
"resource_ids": [
1,
2
],
"sms_reminder": true,
"email_reminder": true,
"sms_confirmation": true,
"email_confirmation": true,
"sms_follow_up": true,
"email_follow_up": true
}'{ "row_num": 0, "total_rows": 0, "links": { "self": "https://api.pracsuite.com/v1/appointment/1", "resources": "https://api.pracsuite.com/v1/appointment/1/resource" }, "tenant_id": 0, "appointment_id": 0, "client_id": 0, "app_time": "2019-08-24T14:15:22Z", "description": "string", "appointment_type_id": 0, "appointment_status_id": 0, "category": "string", "duration": 0, "notes": "string", "practitioner_id": 0, "business_id": 0, "profession_id": 0, "item_id": 0, "account_id": 0, "created": "2019-08-24T14:15:22Z", "modified": "2019-08-24T14:15:22Z", "item_group_id": 0, "telehealth_patient_link": "string", "telehealth_practitioner_link": "string", "resource_ids": [ 0 ] }
After a time is identified using Available Appointment, it may be temporarily reserved for 15 minutes.
This is intended for workflows where additional information must be collected before completing the booking, such as capturing patient details to create a new client record.
Use Finalise Appointment to complete the booking.
Required. ISO datetime in the tenant's timezone. Format: yyyy-MM-dd'T'HH:mm:ss
curl -i -X POST \
https://api.pracsuite.com/v1/reserve_appointment \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-d '{
"app_time": "2025-01-01T12:00:00",
"practitioner_id": 0,
"business_id": 0,
"duration": 5,
"column_number": 1,
"width": 1
}'{ "appointment_id": 0, "app_time": "2025-01-01T12:00:00", "practitioner_id": 0, "business_id": 0, "duration": 5, "column_number": 1, "width": 1, "category": "Reserved" }
curl -i -X GET \
'https://api.pracsuite.com/v1/appointment/{appointment_id}' \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'x-api-key: YOUR_API_KEY_HERE'{ "row_num": 0, "total_rows": 0, "links": { "self": "https://api.pracsuite.com/v1/appointment/1", "resources": "https://api.pracsuite.com/v1/appointment/1/resource" }, "tenant_id": 0, "appointment_id": 0, "client_id": 0, "app_time": "2019-08-24T14:15:22Z", "description": "string", "appointment_type_id": 0, "appointment_status_id": 0, "category": "string", "duration": 0, "notes": "string", "practitioner_id": 0, "business_id": 0, "profession_id": 0, "item_id": 0, "account_id": 0, "created": "2019-08-24T14:15:22Z", "modified": "2019-08-24T14:15:22Z", "item_group_id": 0, "telehealth_patient_link": "string", "telehealth_practitioner_link": "string", "resource_ids": [ 0 ] }
Used to complete a booking after a time has been identified via Available Appointment or temporarily held using Reserve Appointment.
Unless explicitly overridden in the request body, the API will apply the default Appointment Type configuration for:
Item or Item Group
Duration
Width
Profession
Resource
curl -i -X POST \
'https://api.pracsuite.com/v1/appointment/{appointment_id}' \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-d '{
"client_id": 0,
"appointment_type_id": 0,
"account_id": 0,
"profession_id": 0,
"appointment_status_id": 0,
"item_id": 0,
"item_group_id": 0,
"resource_ids": [
1,
2
],
"sms_reminder": true,
"email_reminder": true,
"sms_confirmation": true,
"email_confirmation": true,
"sms_follow_up": true,
"email_follow_up": true
}'{ "row_num": 0, "total_rows": 0, "links": { "self": "https://api.pracsuite.com/v1/appointment/1", "resources": "https://api.pracsuite.com/v1/appointment/1/resource" }, "tenant_id": 0, "appointment_id": 0, "client_id": 0, "app_time": "2019-08-24T14:15:22Z", "description": "string", "appointment_type_id": 0, "appointment_status_id": 0, "category": "string", "duration": 0, "notes": "string", "practitioner_id": 0, "business_id": 0, "profession_id": 0, "item_id": 0, "account_id": 0, "created": "2019-08-24T14:15:22Z", "modified": "2019-08-24T14:15:22Z", "item_group_id": 0, "telehealth_patient_link": "string", "telehealth_practitioner_link": "string", "resource_ids": [ 0 ] }
Required. ISO datetime in the tenant's timezone. Format: yyyy-MM-dd'T'HH:mm:ss
curl -i -X PATCH \
'https://api.pracsuite.com/v1/appointment/{appointment_id}' \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-d '{
"appointment_type_id": 0,
"app_time": "2025-01-01T12:00:00",
"practitioner_id": 0,
"business_id": 0,
"duration": 5,
"column_number": 1,
"width": 1,
"appointment_status_id": 0,
"profession_id": 0,
"item_id": 0,
"item_group_id": 0,
"resource_ids": [
1,
2
],
"sms_reminder": true,
"email_reminder": true,
"sms_confirmation": true,
"email_confirmation": true,
"sms_follow_up": true,
"email_follow_up": true,
"appointment_reschedule_reason_id": 0,
"reason": "string"
}'{ "row_num": 0, "total_rows": 0, "links": { "self": "https://api.pracsuite.com/v1/appointment/1", "resources": "https://api.pracsuite.com/v1/appointment/1/resource" }, "tenant_id": 0, "appointment_id": 0, "client_id": 0, "app_time": "2019-08-24T14:15:22Z", "description": "string", "appointment_type_id": 0, "appointment_status_id": 0, "category": "string", "duration": 0, "notes": "string", "practitioner_id": 0, "business_id": 0, "profession_id": 0, "item_id": 0, "account_id": 0, "created": "2019-08-24T14:15:22Z", "modified": "2019-08-24T14:15:22Z", "item_group_id": 0, "telehealth_patient_link": "string", "telehealth_practitioner_link": "string", "resource_ids": [ 0 ] }
The record_as_cancelled field controls whether the removal of an appointment is recorded as a cancellation on the patient's record.
When set to true, the appointment is recorded as a cancellation and included in the patient's attendance history.
When set to false, the appointment is removed without affecting the patient's attendance history.
In both cases, the action is recorded in the system audit log.
curl -i -X POST \
'https://api.pracsuite.com/v1/appointment/{appointment_id}/cancel' \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-d '{
"appointment_cancellation_reason_id": 0,
"record_as_cancelled": true,
"reason": "string"
}'curl -i -X GET \
'https://api.pracsuite.com/v1/appointment_type/{appointment_type_id}/appointment?page=1&page_size=50&sort_by=%5B%22appointment_id%22%2C%22app_time%22%5D&q%5B%5D=string' \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'x-api-key: YOUR_API_KEY_HERE'{ "appointments": [ { … } ], "total_entries": 0, "links": { "self": "https://api.pracsuite.com/v1/appointment_type/1/appointment?page=2", "previous": "https://api.pracsuite.com/v1/appointment_type/1/appointment?page=1", "next": "https://api.pracsuite.com/v1/appointment_type/1/appointment?page=3" } }
curl -i -X GET \
'https://api.pracsuite.com/v1/business/{business_id}/appointment?page=1&page_size=50&sort_by=%5B%22appointment_id%22%2C%22app_time%22%5D&q%5B%5D=string' \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'x-api-key: YOUR_API_KEY_HERE'{ "appointments": [ { … } ], "total_entries": 0, "links": { "self": "https://api.pracsuite.com/v1/business/1/appointment?page=2", "previous": "https://api.pracsuite.com/v1/business/1/appointment?page=1", "next": "https://api.pracsuite.com/v1/business/1/appointment?page=3" } }
curl -i -X GET \
'https://api.pracsuite.com/v1/profession/{profession_id}/appointment?page=1&page_size=50&sort_by=%5B%22appointment_id%22%2C%22app_time%22%5D&q%5B%5D=string' \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'x-api-key: YOUR_API_KEY_HERE'{ "appointments": [ { … } ], "total_entries": 0, "links": { "self": "https://api.pracsuite.com/v1/profession/1/appointment?page=2", "previous": "https://api.pracsuite.com/v1/profession/1/appointment?page=1", "next": "https://api.pracsuite.com/v1/profession/1/appointment?page=3" } }
curl -i -X GET \
'https://api.pracsuite.com/v1/patient/{client_id}/appointment?page=1&page_size=50&sort_by=%5B%22appointment_id%22%2C%22app_time%22%5D&q%5B%5D=string' \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'x-api-key: YOUR_API_KEY_HERE'{ "appointments": [ { … } ], "total_entries": 0, "links": { "self": "https://api.pracsuite.com/v1/patient/1/appointment?page=2", "previous": "https://api.pracsuite.com/v1/patient/1/appointment?page=1", "next": "https://api.pracsuite.com/v1/patient/1/appointment?page=3" } }
curl -i -X GET \
'https://api.pracsuite.com/v1/practitioner/{practitioner_id}/appointment?page=1&page_size=50&sort_by=%5B%22appointment_id%22%2C%22app_time%22%5D&q%5B%5D=string' \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'x-api-key: YOUR_API_KEY_HERE'{ "appointments": [ { … } ], "total_entries": 0, "links": { "self": "https://api.pracsuite.com/v1/practitioner/1/appointment?page=2", "previous": "https://api.pracsuite.com/v1/practitioner/1/appointment?page=1", "next": "https://api.pracsuite.com/v1/practitioner/1/appointment?page=3" } }
curl -i -X GET \
'https://api.pracsuite.com/v1/resource/{resource_id}/appointment?page=1&page_size=50&sort_by=%5B%22appointment_id%22%2C%22app_time%22%5D&q%5B%5D=string' \
-H 'A-api-key: YOUR_API_KEY_HERE' \
-H 'x-api-key: YOUR_API_KEY_HERE'{ "appointments": [ { … } ], "total_entries": 0, "links": { "self": "https://api.pracsuite.com/v1/resource/1/appointment?page=2", "previous": "https://api.pracsuite.com/v1/resource/1/appointment?page=1", "next": "https://api.pracsuite.com/v1/resource/1/appointment?page=3" } }
You may search for a maximum of 7 days of appointment availability per request.
All availability searches must specify a single appointment_type_id.
Availability may be filtered using any combination of business, practitioner, profession, or resource. When multiple filters are supplied, only times matching all provided criteria will be returned.
PracSuite users define daily practitioner availability using Rosters. Users can apply three availability flags to control which tools can book at particular times:
Use the manual, online, and waiting_list query parameters to filter available times based on these roster flags. If none of these parameters are supplied, only times available for manual bookings will be returned.
Users define default appointment duration rules per Appointment Type. These defaults may vary based on business, profession, practitioner, and client fee category, which is determined by the combination of client_id and account_id.
When available, client_id and account_id should be provided to ensure the correct Appointment Type default configuration is applied.
Patients are the people that book in for appointments.
When you're working with patient information, make sure you abide by the relevant regulations for security and privacy.
A couple of fields in the patient record deserve special consideration:
accepted_privacy_policy stores the patient's consent to the business's own privacy policy. Values can be null (no response), true (accepted) or false (rejected). Please consider how this may affect you storing information on this patient.
time_zone will contain a valid IANA time zone identifier if the patient's time zone has been set, or null if it hasn't. It can be set via the API, in which case it accepts IANA time zone identifiers.