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
Prod server
https://api.pracsuite.com/v1/

Appointment

test

SchemasOperations

Appointment

linksobject(AppointmentLinks)
tenant_idinteger
appointment_idinteger
client_idinteger
app_timestring(date-time)
descriptionstring
appointment_type_idinteger
appointment_status_idinteger
categorystring
durationinteger
notesstring
practitioner_idinteger
business_idinteger
profession_idinteger
item_idinteger
account_idinteger
createdstring(date-time)
modifiedstring(date-time)
item_group_idinteger
telehealth_patient_linkstring
telehealth_practitioner_linkstring
{ "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" }

List Appointments

Request

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

Comma separated search fields

Example: sort_by=["appointment_id","created","updated","profession_id","business_id","client_id","appointment_type_id","app_time"]
q[]Array of strings

Filter result by one or more fields.

See Query Filtering

Available filters:

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

Responses

A list of appointments

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

This endpoint is used to create an Appointment in the appointment book

Security
x-api-key and A-api-key
Bodyapplication/json
client_idintegerrequired
account_idintegerrequired
appointment_type_idintegerrequired
app_timestringrequired

Required. ISO datetime in the tenant's timezone. Format: yyyy-MM-dd'T'HH:mm:ss

Example: "2025-01-01T12:00:00"
practitioner_business_idintegerrequired
durationinteger[ 5 .. 1440 ]required

Must be between 5 and 1440 and divisible by 5.

appointment_status_idinteger
item_idinteger
item_group_idinteger
columninteger
Default 1
widthinteger
Default 1
resource_idsArray of integers
Example: [1,2]
hourly_billingboolean
sms_reminderboolean
email_reminderboolean
sms_follow_upboolean
email_follow_upboolean
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
  }'

Responses

Successfully create Appointment

Bodyapplication/json
linksobject(AppointmentLinks)
tenant_idinteger
appointment_idinteger
client_idinteger
app_timestring(date-time)
descriptionstring
appointment_type_idinteger
appointment_status_idinteger
categorystring
durationinteger
notesstring
practitioner_idinteger
business_idinteger
profession_idinteger
item_idinteger
account_idinteger
createdstring(date-time)
modifiedstring(date-time)
item_group_idinteger
telehealth_patient_linkstring
telehealth_practitioner_linkstring
Response
application/json
{ "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" }

Reserve Appointment

Request

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

Security
x-api-key and A-api-key
Bodyapplication/json
app_timestringrequired

Required. ISO datetime in the tenant's timezone. Format: yyyy-MM-dd'T'HH:mm:ss

Example: "2025-01-01T12:00:00"
practitioner_business_idintegerrequired
durationinteger[ 5 .. 1440 ]required

Must be between 5 and 1440 and divisible by 5.

columninteger
Default 1
widthinteger
Default 1
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
  }'

Responses

Successfully reser Appointment

Bodyapplication/json
appointment_idintegerrequired
app_timestringrequired
Example: "2025-01-01T12:00:00"
practitioner_idintegerrequired
business_idintegerrequired
practitioner_business_idinteger
durationinteger[ 5 .. 1440 ]required

Must be between 5 and 1440 and divisible by 5.

columninteger
Default 1
widthinteger
Default 1
categoryinteger

Reserved = 0, Patient = 1, Note = 2, Group = 3, Ruleout = 4

Enum01234
Response
application/json
{ "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 }

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

OK

Bodyapplication/json
linksobject(AppointmentLinks)
tenant_idinteger
appointment_idinteger
client_idinteger
app_timestring(date-time)
descriptionstring
appointment_type_idinteger
appointment_status_idinteger
categorystring
durationinteger
notesstring
practitioner_idinteger
business_idinteger
profession_idinteger
item_idinteger
account_idinteger
createdstring(date-time)
modifiedstring(date-time)
item_group_idinteger
telehealth_patient_linkstring
telehealth_practitioner_linkstring
Response
application/json
{ "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" }

Finalise Appointment

Request

Security
x-api-key and A-api-key
Path
appointment_idintegerrequired
Bodyapplication/json
client_idintegerrequired
account_idintegerrequired
appointment_type_idintegerrequired
appointment_status_idinteger
item_idinteger
item_group_idinteger
resource_idsArray of integers
Example: [1,2]
hourly_billingboolean
sms_reminderboolean
email_reminderboolean
sms_follow_upboolean
email_follow_upboolean
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
  }'

Responses

Successfully finalised Appointment

Bodyapplication/json
linksobject(AppointmentLinks)
tenant_idinteger
appointment_idinteger
client_idinteger
app_timestring(date-time)
descriptionstring
appointment_type_idinteger
appointment_status_idinteger
categorystring
durationinteger
notesstring
practitioner_idinteger
business_idinteger
profession_idinteger
item_idinteger
account_idinteger
createdstring(date-time)
modifiedstring(date-time)
item_group_idinteger
telehealth_patient_linkstring
telehealth_practitioner_linkstring
Response
application/json
{ "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" }

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 .. 100 ]
Example: page_size=50
sort_byArray of strings

Comma separated search fields

Example: sort_by=["appointment_id","created","updated","profession_id","business_id","client_id","appointment_type_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/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'

Responses

A list of appointments

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" } }

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 .. 100 ]
Example: page_size=50
sort_byArray of strings

Comma separated search fields

Example: sort_by=["appointment_id","created","updated","profession_id","business_id","client_id","appointment_type_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
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'

Responses

A list of appointments

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" } }

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 .. 100 ]
Example: page_size=50
sort_byArray of strings

Comma separated search fields

Example: sort_by=["appointment_id","created","updated","profession_id","business_id","client_id","appointment_type_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
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'

Responses

A list of appointments

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" } }

List Appointments by Patient

Request

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

Comma separated search fields

Example: sort_by=["appointment_id","created","updated","profession_id","business_id","client_id","appointment_type_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
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'

Responses

A list of appointments

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" } }

Appointment Type

test

SchemasOperations

Available Appointment

Avaiasldfsdflsd

SchemasOperations

Available Group Appointment

Avaiasldfsdflsd

SchemasOperations

Business

sdfsfd

SchemasOperations

Fee Category

sdfsfd

SchemasOperations

Item

sdfsfd

SchemasOperations

Item Group

sdfsfd

SchemasOperations

Patient

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.

SchemasOperations

Practitioner

test

SchemasOperations

Profession

test

SchemasOperations

Pronoun

test

SchemasOperations

Resource

test

SchemasOperations

Sex

test

SchemasOperations