Skip to content

PracSuite API (v1)

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.

Download OpenAPI description
Overview
PracSuite API Support
License
Languages
Servers
Production
https://api.pracsuite.com/v1/

Appointment Book

SchemasOperations

Appointment

SchemasOperations

Appointment

linksobject(AppointmentLinks)
tenant_idinteger
appointment_idinteger
client_idinteger
app_timestring^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}$

ISO 8601 local datetime in the tenant's timezone.

Example: "2026-01-01T12:05:30"
descriptionstring
appointment_type_idinteger
appointment_status_idinteger
categorystring
durationinteger
notesstring
practitioner_idinteger
business_idinteger
profession_idinteger
item_idinteger
account_idinteger
createdstring(date-time)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6...

RFC 3339 UTC date-time (Z) with microsecond precision.

Example: "2020-09-12T11:09:42.687393Z"
modifiedstring(date-time)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6...

RFC 3339 UTC date-time (Z) with microsecond precision.

Example: "2020-09-12T11:09:42.687393Z"
item_group_idinteger
telehealth_patient_linkstring
telehealth_practitioner_linkstring
resource_idsArray of integers
{ "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": "2026-01-01T12:05:30", "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": "2020-09-12T11:09:42.687393Z", "modified": "2020-09-12T11:09:42.687393Z", "item_group_id": 0, "telehealth_patient_link": "string", "telehealth_practitioner_link": "string", "resource_ids": [ 0 ] }

List Appointments

Request

Security
x-api-key and a-api-key
Query
pageinteger>= 1
Example: page=1
page_sizeinteger[ 1 .. 200 ]
Example: page_size=50
sort_byArray of strings

Comma separated search fields. See Sorting

Example: sort_by=["appointment_id","app_time"]
q[]Array of strings

Filter result by one or more fields.

See Query Filtering

Available filters:

ValueFormat
createdtimestamp
updatedtimestamp
app_timedatetime
appointment_idinteger
profession_idinteger
business_idinteger
client_idinteger
appointment_type_idinteger
practitioner_idinteger
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'

Responses

Successful

Bodyapplication/json
appointmentsArray of objects(AppointmentWithMeta)
total_entriesinteger
linksobject
Response
application/json
{ "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" } }

Create Appointment

Request

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:

  • Width
  • Resource
  • Item or Item Group

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.

Security
x-api-key and a-api-key
Bodyapplication/json
client_idintegerrequired
appointment_type_idintegerrequired
app_timestring^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}$required

ISO 8601 local datetime in the tenant's timezone.

Example: "2026-01-01T12:05:30"
practitioner_idintegerrequired
business_idintegerrequired
durationinteger[ 5 .. 1440 ]required

Must be between 5 and 1440 and divisible by 5.

appointment_status_idinteger

If omitted, the appointment is created with the system default status of Booked.

account_idinteger

If omitted, the patient's default account is applied.

profession_idinteger

If omitted, the practitioner's default profession is applied.

item_idinteger

If item_id is not null, then item_group_id must be null

If omitted, the default item configured on the selected appointment type is applied.

item_group_idinteger

If item_group_id is not null, then item_id must be null

If omitted, the default item group configured on the selected appointment type is applied.

notesstring
column_numberinteger
Default 1
widthinteger

If omitted, the default width configured on the selected appointment type is applied.

Default 1
resource_idsArray of integers

If omitted, the default resources configured on the selected appointment type are applied.

Example: [1,2]
sms_reminderboolean

If omitted, patient default preferences are applied

email_reminderboolean

If omitted, patient default preferences are applied

sms_confirmationboolean

If omitted, patient default preferences are applied

email_confirmationboolean

If omitted, patient default preferences are applied

sms_follow_upboolean

If omitted, patient default preferences are applied

email_follow_upboolean

If omitted, patient default preferences are applied

curl -i -X POST \
  https://api.pracsuite.com/v1/appointment \
  -H 'Content-Type: application/json' \
  -H 'a-api-key: YOUR_API_KEY_HERE' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -d '{
    "client_id": 0,
    "appointment_type_id": 0,
    "app_time": "2026-01-01T12:05:30",
    "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,
    "notes": "string",
    "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
  }'

Responses

Successful

Bodyapplication/json
row_numintegerread-only
total_rowsintegerread-only
linksobject(AppointmentLinks)
tenant_idinteger
appointment_idinteger
client_idinteger
app_timestring^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}$

ISO 8601 local datetime in the tenant's timezone.

Example: "2026-01-01T12:05:30"
descriptionstring
appointment_type_idinteger
appointment_status_idinteger
categorystring
durationinteger
notesstring
practitioner_idinteger
business_idinteger
profession_idinteger
item_idinteger
account_idinteger
createdstring(date-time)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6...

RFC 3339 UTC date-time (Z) with microsecond precision.

Example: "2020-09-12T11:09:42.687393Z"
modifiedstring(date-time)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6...

RFC 3339 UTC date-time (Z) with microsecond precision.

Example: "2020-09-12T11:09:42.687393Z"
item_group_idinteger
telehealth_patient_linkstring
telehealth_practitioner_linkstring
resource_idsArray of integers
Response
application/json
{ "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": "2026-01-01T12:05:30", "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": "2020-09-12T11:09:42.687393Z", "modified": "2020-09-12T11:09:42.687393Z", "item_group_id": 0, "telehealth_patient_link": "string", "telehealth_practitioner_link": "string", "resource_ids": [ 0 ] }

Reserve Appointment

Request

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.

Security
x-api-key and a-api-key
Bodyapplication/json
app_timestring^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}$required

ISO 8601 local datetime in the tenant's timezone.

Example: "2026-01-01T12:05:30"
practitioner_idintegerrequired
business_idintegerrequired
durationinteger[ 5 .. 1440 ]required

Must be between 5 and 1440 and divisible by 5.

column_numberinteger
Default 1
widthinteger
Default 1
resource_idsArray of integers
Example: [1,2]
curl -i -X POST \
  https://api.pracsuite.com/v1/reserve_appointment \
  -H 'Content-Type: application/json' \
  -H 'a-api-key: YOUR_API_KEY_HERE' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -d '{
    "app_time": "2026-01-01T12:05:30",
    "practitioner_id": 0,
    "business_id": 0,
    "duration": 5,
    "column_number": 1,
    "width": 1,
    "resource_ids": [
      1,
      2
    ]
  }'

Responses

Successful

Bodyapplication/json
appointment_idintegerrequired
app_timestring^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}$required

ISO 8601 local datetime in the tenant's timezone.

Example: "2026-01-01T12:05:30"
practitioner_idintegerrequired
business_idintegerrequired
durationinteger[ 5 .. 1440 ]required

Must be between 5 and 1440 and divisible by 5.

column_numberinteger
Default 1
widthinteger
Default 1
categorystring
Example: "Reserved"
Response
application/json
{ "appointment_id": 0, "app_time": "2026-01-01T12:05:30", "practitioner_id": 0, "business_id": 0, "duration": 5, "column_number": 1, "width": 1, "category": "Reserved" }

Get Appointment

Request

Security
x-api-key and a-api-key
Path
appointment_idintegerrequired
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'

Responses

Successful

Bodyapplication/json
row_numintegerread-only
total_rowsintegerread-only
linksobject(AppointmentLinks)
tenant_idinteger
appointment_idinteger
client_idinteger
app_timestring^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}$

ISO 8601 local datetime in the tenant's timezone.

Example: "2026-01-01T12:05:30"
descriptionstring
appointment_type_idinteger
appointment_status_idinteger
categorystring
durationinteger
notesstring
practitioner_idinteger
business_idinteger
profession_idinteger
item_idinteger
account_idinteger
createdstring(date-time)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6...

RFC 3339 UTC date-time (Z) with microsecond precision.

Example: "2020-09-12T11:09:42.687393Z"
modifiedstring(date-time)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6...

RFC 3339 UTC date-time (Z) with microsecond precision.

Example: "2020-09-12T11:09:42.687393Z"
item_group_idinteger
telehealth_patient_linkstring
telehealth_practitioner_linkstring
resource_idsArray of integers
Response
application/json
{ "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": "2026-01-01T12:05:30", "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": "2020-09-12T11:09:42.687393Z", "modified": "2020-09-12T11:09:42.687393Z", "item_group_id": 0, "telehealth_patient_link": "string", "telehealth_practitioner_link": "string", "resource_ids": [ 0 ] }

Finalise Appointment

Request

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

Security
x-api-key and a-api-key
Path
appointment_idintegerrequired
Bodyapplication/json
client_idintegerrequired
appointment_type_idintegerrequired
appointment_status_idinteger

If omitted, the appointment is created with the system default status of Booked.

account_idinteger

If omitted, the patient's default account is applied.

profession_idinteger

If omitted, the practitioner's default profession is applied.

item_idinteger

If item_id is not null, then item_group_id must be null

If omitted, the default item configured on the selected appointment type is applied.

item_group_idinteger

If item_group_id is not null, then item_id must be null

If omitted, the default item group configured on the selected appointment type is applied.

notesstring
column_numberinteger
Default 1
resource_idsArray of integers

If omitted, the default resources configured on the selected appointment type are applied.

Example: [1,2]
sms_reminderboolean

If omitted, patient default preferences are applied

email_reminderboolean

If omitted, patient default preferences are applied

sms_confirmationboolean

If omitted, patient default preferences are applied

email_confirmationboolean

If omitted, patient default preferences are applied

sms_follow_upboolean

If omitted, patient default preferences are applied

email_follow_upboolean

If omitted, patient default preferences are applied

curl -i -X POST \
  'https://api.pracsuite.com/v1/appointment/{appointment_id}' \
  -H 'Content-Type: application/json' \
  -H 'a-api-key: YOUR_API_KEY_HERE' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -d '{
    "client_id": 0,
    "appointment_type_id": 0,
    "appointment_status_id": 0,
    "account_id": 0,
    "profession_id": 0,
    "item_id": 0,
    "item_group_id": 0,
    "notes": "string",
    "column_number": 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
  }'

Responses

Successful

Bodyapplication/json
row_numintegerread-only
total_rowsintegerread-only
linksobject(AppointmentLinks)
tenant_idinteger
appointment_idinteger
client_idinteger
app_timestring^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}$

ISO 8601 local datetime in the tenant's timezone.

Example: "2026-01-01T12:05:30"
descriptionstring
appointment_type_idinteger
appointment_status_idinteger
categorystring
durationinteger
notesstring
practitioner_idinteger
business_idinteger
profession_idinteger
item_idinteger
account_idinteger
createdstring(date-time)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6...

RFC 3339 UTC date-time (Z) with microsecond precision.

Example: "2020-09-12T11:09:42.687393Z"
modifiedstring(date-time)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6...

RFC 3339 UTC date-time (Z) with microsecond precision.

Example: "2020-09-12T11:09:42.687393Z"
item_group_idinteger
telehealth_patient_linkstring
telehealth_practitioner_linkstring
resource_idsArray of integers
Response
application/json
{ "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": "2026-01-01T12:05:30", "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": "2020-09-12T11:09:42.687393Z", "modified": "2020-09-12T11:09:42.687393Z", "item_group_id": 0, "telehealth_patient_link": "string", "telehealth_practitioner_link": "string", "resource_ids": [ 0 ] }

Edit Appointment

Request

Security
x-api-key and a-api-key
Path
appointment_idintegerrequired
Bodyapplication/json
appointment_type_idinteger
app_timestring^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}$

ISO 8601 local datetime in the tenant's timezone.

Example: "2026-01-01T12:05:30"
practitioner_idinteger
business_idinteger
durationinteger[ 5 .. 1440 ]

Must be between 5 and 1440 and divisible by 5.

column_numberinteger
Default 1
widthinteger
Default 1
appointment_status_idinteger
profession_idinteger
item_idinteger

If item_id is not null, then item_group_id must be null

item_group_idinteger

If item_group_id is not null, then item_id must be null

notesstring
resource_idsArray of integers
Example: [1,2]
sms_reminderboolean
email_reminderboolean
sms_confirmationboolean
email_confirmationboolean
sms_follow_upboolean
email_follow_upboolean
appointment_reschedule_reason_idinteger
reasonstring
curl -i -X PATCH \
  'https://api.pracsuite.com/v1/appointment/{appointment_id}' \
  -H 'Content-Type: application/json' \
  -H 'a-api-key: YOUR_API_KEY_HERE' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -d '{
    "appointment_type_id": 0,
    "app_time": "2026-01-01T12:05:30",
    "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,
    "notes": "string",
    "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"
  }'

Responses

Successful

Bodyapplication/json
row_numintegerread-only
total_rowsintegerread-only
linksobject(AppointmentLinks)
tenant_idinteger
appointment_idinteger
client_idinteger
app_timestring^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}$

ISO 8601 local datetime in the tenant's timezone.

Example: "2026-01-01T12:05:30"
descriptionstring
appointment_type_idinteger
appointment_status_idinteger
categorystring
durationinteger
notesstring
practitioner_idinteger
business_idinteger
profession_idinteger
item_idinteger
account_idinteger
createdstring(date-time)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6...

RFC 3339 UTC date-time (Z) with microsecond precision.

Example: "2020-09-12T11:09:42.687393Z"
modifiedstring(date-time)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6...

RFC 3339 UTC date-time (Z) with microsecond precision.

Example: "2020-09-12T11:09:42.687393Z"
item_group_idinteger
telehealth_patient_linkstring
telehealth_practitioner_linkstring
resource_idsArray of integers
Response
application/json
{ "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": "2026-01-01T12:05:30", "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": "2020-09-12T11:09:42.687393Z", "modified": "2020-09-12T11:09:42.687393Z", "item_group_id": 0, "telehealth_patient_link": "string", "telehealth_practitioner_link": "string", "resource_ids": [ 0 ] }

Remove Appointment

Request

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.

Security
x-api-key and a-api-key
Path
appointment_idintegerrequired
Bodyapplication/json
appointment_cancellation_reason_idinteger
record_as_cancelledboolean
reasonstring
curl -i -X POST \
  'https://api.pracsuite.com/v1/appointment/{appointment_id}/cancel' \
  -H 'Content-Type: application/json' \
  -H 'a-api-key: YOUR_API_KEY_HERE' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -d '{
    "appointment_cancellation_reason_id": 0,
    "record_as_cancelled": true,
    "reason": "string"
  }'

Responses

Successful

Response
No content

List Appointments by Appointment Type

Request

Security
x-api-key and a-api-key
Path
appointment_type_idintegerrequired
Query
pageinteger>= 1
Example: page=1
page_sizeinteger[ 1 .. 200 ]
Example: page_size=50
sort_byArray of strings

Comma separated search fields. See Sorting

Example: sort_by=["appointment_id","app_time"]
q[]Array of strings

Filter result by one or more fields.

See Query Filtering

Available filters:

ValueFormat
createdtimestamp
updatedtimestamp
app_timedatetime
profession_idinteger
business_idinteger
client_idinteger
practitioner_idinteger
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'

Responses

Successful

Bodyapplication/json
appointmentsArray of objects(AppointmentWithMeta)
total_entriesinteger
linksobject
Response
application/json
{ "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" } }

List Appointments by Business

Request

Security
x-api-key and a-api-key
Path
business_idintegerrequired
Query
pageinteger>= 1
Example: page=1
page_sizeinteger[ 1 .. 200 ]
Example: page_size=50
sort_byArray of strings

Comma separated search fields. See Sorting

Example: sort_by=["appointment_id","app_time"]
q[]Array of strings

Filter result by one or more fields.

See Query Filtering

Available filters:

ValueFormat
createdtimestamp
updatedtimestamp
app_timedatetime
profession_idinteger
client_idinteger
appointment_type_idinteger
practitioner_idinteger
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'

Responses

Successful

Bodyapplication/json
appointmentsArray of objects(AppointmentWithMeta)
total_entriesinteger
linksobject
Response
application/json
{ "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" } }

List Appointments by Profession

Request

Security
x-api-key and a-api-key
Path
profession_idintegerrequired
Query
pageinteger>= 1
Example: page=1
page_sizeinteger[ 1 .. 200 ]
Example: page_size=50
sort_byArray of strings

Comma separated search fields. See Sorting

Example: sort_by=["appointment_id","app_time"]
q[]Array of strings

Filter result by one or more fields.

See Query Filtering

Available filters:

ValueFormat
createdtimestamp
updatedtimestamp
app_timedatetime
business_idinteger
client_idinteger
appointment_type_idinteger
practitioner_idinteger
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'

Responses

Successful

Bodyapplication/json
appointmentsArray of objects(AppointmentWithMeta)
total_entriesinteger
linksobject
Response
application/json
{ "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" } }

List Appointments by Patient

Request

Security
x-api-key and a-api-key
Path
client_idintegerrequired
Query
pageinteger>= 1
Example: page=1
page_sizeinteger[ 1 .. 200 ]
Example: page_size=50
sort_byArray of strings

Comma separated search fields. See Sorting

Example: sort_by=["appointment_id","app_time"]
q[]Array of strings

Filter result by one or more fields.

See Query Filtering

Available filters:

ValueFormat
createdtimestamp
updatedtimestamp
app_timedatetime
profession_idinteger
business_idinteger
appointment_type_idinteger
practitioner_idinteger
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'

Responses

Successful

Bodyapplication/json
appointmentsArray of objects(AppointmentWithMeta)
total_entriesinteger
linksobject
Response
application/json
{ "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" } }

List Appointments by Practitioner

Request

Security
x-api-key and a-api-key
Path
practitioner_idintegerrequired
Query
pageinteger>= 1
Example: page=1
page_sizeinteger[ 1 .. 200 ]
Example: page_size=50
sort_byArray of strings

Comma separated search fields. See Sorting

Example: sort_by=["appointment_id","app_time"]
q[]Array of strings

Filter result by one or more fields.

See Query Filtering

Available filters:

ValueFormat
createdtimestamp
updatedtimestamp
app_timedatetime
profession_idinteger
business_idinteger
client_idinteger
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'

Responses

Successful

Bodyapplication/json
appointmentsArray of objects(AppointmentWithMeta)
total_entriesinteger
linksobject
Response
application/json
{ "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" } }

List Appointments by Resource

Request

Security
x-api-key and a-api-key
Path
resource_idintegerrequired
Query
pageinteger>= 1
Example: page=1
page_sizeinteger[ 1 .. 200 ]
Example: page_size=50
sort_byArray of strings

Comma separated search fields. See Sorting

Example: sort_by=["appointment_id","app_time"]
q[]Array of strings

Filter result by one or more fields.

See Query Filtering

Available filters:

ValueFormat
createdtimestamp
updatedtimestamp
app_timedatetime
profession_idinteger
business_idinteger
client_idinteger
practitioner_idinteger
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'

Responses

Successful

Bodyapplication/json
appointmentsArray of objects(AppointmentWithMeta)
total_entriesinteger
linksobject
Response
application/json
{ "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" } }

Note

SchemasOperations

Rule Out

SchemasOperations

Group Appointment

SchemasOperations

Group Appointment Member

SchemasOperations

Cancelled Appointment

SchemasOperations

Cancellation Reason

SchemasOperations

Reschedule Reason

SchemasOperations

Appointment Type

SchemasOperations

Appointment Status

SchemasOperations

Available Appointment

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:

  • Manual - Allows staff to manually book appointments during these times
  • Online Booking - Allows these times to be booked through the PracSuite online booking system
  • Waiting List - Allows the PracSuite waiting list to offer these times to patients

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.

SchemasOperations

Available Group Appointment

SchemasOperations

Business

SchemasOperations

Fee Category

SchemasOperations

Health Fund

SchemasOperations

Invoice

SchemasOperations

Payment

SchemasOperations

Item

SchemasOperations

Item Group

SchemasOperations

Organisation

SchemasOperations

Patient

SchemasOperations

Patient Account

SchemasOperations

Patient Attachment

SchemasOperations

Patient Contact

SchemasOperations

Clinical Note

Rich text HTML is supported with a safe, limited set of elements and inline styles. Any unsupported tags, attributes, or CSS are removed automatically.

Supported elements

p, br, strong, em, i, u, blockquote, ul, ol, li, div, span, table, thead, tbody, tfoot, tr, td, th, colgroup, col, caption, img (base64 images only)

Images

Images must be embedded as base64 data URIs. Only PNG, JPEG/JPG, GIF, and WebP image types are supported. External image URLs and other formats are not permitted.

Supported inline CSS

Common formatting and table layout styles are allowed, including text styling, alignment, spacing, borders, and table sizing (color, font-size, text-align, padding, width, height, border, etc.). Unsupported styles are removed automatically.

Content limits

Rich text content must be 150,000 characters or less after processing.

Operations

Payer

SchemasOperations

Payer Contact

SchemasOperations

Practitioner

SchemasOperations

Practitioner Provider Number

SchemasOperations

Profession

SchemasOperations

Pronoun

SchemasOperations

Referrer

SchemasOperations

Referrer Type

SchemasOperations

Resource

SchemasOperations

Sex

SchemasOperations

Tag

SchemasOperations

Tag Category

SchemasOperations