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" }
curl -i -X GET \
'https://api.pracsuite.com/v1/appointment?page=1&page_size=50&sort_by=%5B%22appointment_id%22%2C%22created%22%2C%22updated%22%2C%22profession_id%22%2C%22business_id%22%2C%22client_id%22%2C%22appointment_type_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" } }
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,
"account_id": 0,
"appointment_type_id": 0,
"app_time": "2025-01-01T12:00:00",
"practitioner_business_id": 0,
"duration": 5,
"appointment_status_id": 0,
"item_id": 0,
"item_group_id": 0,
"column": 1,
"width": 1,
"resource_ids": [
1,
2
],
"hourly_billing": true,
"sms_reminder": true,
"email_reminder": true,
"sms_follow_up": true,
"email_follow_up": true
}'{ "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" }
This endpoint is used to reserve a spot in the appointment book before applying an appointment_type_id, etc.
After this you then call Finalise Appointment to apply the rest of the fields.
The exception is when you pass rule_out: true. Then you don't need to call finalise
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_business_id": 0,
"duration": 5,
"column": 1,
"width": 1
}'{ "appointment_id": 0, "app_time": "2025-01-01T12:00:00", "practitioner_id": 0, "business_id": 0, "practitioner_business_id": 0, "duration": 5, "column": 1, "width": 1, "category": 0 }
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'{ "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" }
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,
"account_id": 0,
"appointment_type_id": 0,
"appointment_status_id": 0,
"item_id": 0,
"item_group_id": 0,
"resource_ids": [
1,
2
],
"hourly_billing": true,
"sms_reminder": true,
"email_reminder": true,
"sms_follow_up": true,
"email_follow_up": true
}'{ "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" }
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%22created%22%2C%22updated%22%2C%22profession_id%22%2C%22business_id%22%2C%22client_id%22%2C%22appointment_type_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" } }
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%22created%22%2C%22updated%22%2C%22profession_id%22%2C%22business_id%22%2C%22client_id%22%2C%22appointment_type_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" } }
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%22created%22%2C%22updated%22%2C%22profession_id%22%2C%22business_id%22%2C%22client_id%22%2C%22appointment_type_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" } }
curl -i -X GET \
'https://api.pracsuite.com/v1/patient/{patient_id}/appointment?page=1&page_size=50&sort_by=%5B%22appointment_id%22%2C%22created%22%2C%22updated%22%2C%22profession_id%22%2C%22business_id%22%2C%22client_id%22%2C%22appointment_type_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" } }
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.