Cliniko API (v1)

This is the official API for Cliniko. Cliniko is a practice management system for healthcare practitioners.

The Cliniko API is based on REST principles. This means you can use any HTTP client and any programming language to interact with the API.

JSON will be returned in all responses from the API.

Download OpenAPI description
Languages
Servers
Production
https://api.au1.cliniko.com/v1/

Appointment Type

Operations

Appointment Type Billable Item

Operations

Appointment Type Product

Operations

Attendee

Operations

Availability Block

Operations

Available Time

Cliniko users can configure how available times are displayed in our online bookings module.

The API endpoints that retrieve available times will respect these settings. The settings are:

Maximum number of appointments per day segment

Day parts are morning (before Midday), afternoon (Midday to 5pm) and evening (5pm onwards).

Possible settings are: 1, 2, 3, 4, 5 or unlimited.

Minimum advance time required for online bookings

This is the minimum amount of time from now that a available time will be shown.

Possible settings are: Now, 1 Hour, 2 Hours, 4 Hours, Tomorrow or 2 Days.

How far ahead bookings are offered

This limits how far in the future available times are offered.

Possible settings are: 28 days, 84 days, 182 days or 365 days

Business to be displayed in online bookings

Setting to choose which businesses can be displayed in our online bookings module.

The API will not return available times for businesses not enabled for online bookings.

Appointment Type to be displayed in online bookings

Setting to choose which appointment types can be displayed in our online bookings module.

The API will not return available times for appointment types not enabled for online bookings.

Practitioner to be displayed in online bookings

Setting to choose which practitioners can be displayed in our online bookings module.

The API will not return available times for practitioners not enabled for online bookings.

Operations

Billable Item

Operations

Booking

Operations

Business

Businesses represent a business or location (e.g. a clinic). Each Cliniko account can have unlimited businesses.

These are typically used for each physical location if there is more than one. Most Cliniko accounts have just one business.

Operations

Communication

Operations

Concession Price

Operations

Concession Type

Operations

Contact

Operations

Daily Availability

The regularly scheduled availabilities of a practitioner at a business

Operations

Group Appointment

Operations

Individual Appointment

Operations

IndividualAppointment

appointment_typeobject
archived_atstring or null(date-time)
attendeesobject
booking_ip_addressstring or null(ipv4)
Example: "10.0.0.43"
businessobject
cancellation_notestring or null
cancellation_reasoninteger or null
cancellation_reason_descriptionstring or null
Enum"Feeling Better""Condition Worse""Sick""COVID-19 related""Away""Other""Work"
cancelled_atstring or null(date-time)
conflictsobject or null
created_atstring(date-time)
deleted_atstring or null(date-time)
did_not_arriveboolean or null
email_reminder_sentboolean or null
ends_atstring(date-time)
has_patient_appointment_notesboolean or null
idstring(int64)
invoice_statusinteger or null
linksobject
notesstring or null
online_booking_policy_acceptedboolean or null
patientobject
patient_arrivedboolean or null
patient_caseobject
patient_namestring or null
practitionerobject
repeat_ruleobject or null
repeated_fromobject
repeatsobject or null
sms_reminder_sentboolean or null
starts_atstring(date-time)
telehealth_urlstring or null(uri)
treatment_note_statusinteger or null
updated_atstring(date-time)
{ "appointment_type": { "links": { "self": "https://api.au1.cliniko.com/v1/appointment_types/1" } }, "archived_at": "2019-08-24T14:15:22Z", "attendees": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1/attendees" } }, "booking_ip_address": "10.0.0.43", "business": { "links": { "self": "https://api.au1.cliniko.com/v1/businesses/1" } }, "cancellation_note": "string", "cancellation_reason": 0, "cancellation_reason_description": "Feeling Better", "cancelled_at": "2019-08-24T14:15:22Z", "conflicts": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1/conflicts" } }, "created_at": "2019-08-24T14:15:22Z", "deleted_at": "2019-08-24T14:15:22Z", "did_not_arrive": true, "email_reminder_sent": true, "ends_at": "2019-08-24T14:15:22Z", "has_patient_appointment_notes": true, "id": "string", "invoice_status": 0, "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1" }, "notes": "string", "online_booking_policy_accepted": true, "patient": { "links": { "self": "https://api.au1.cliniko.com/v1/patients/1" } }, "patient_arrived": true, "patient_case": { "links": { "self": "https://api.au1.cliniko.com/v1/patient_cases/1" } }, "patient_name": "string", "practitioner": { "links": { "self": "https://api.au1.cliniko.com/v1/practitioners/1" } }, "repeat_rule": { "number_of_repeats": 0, "repeat_type": "Daily", "repeating_interval": 0 }, "repeated_from": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1" } }, "repeats": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments?q[]=repeated_from_id:=1" } }, "sms_reminder_sent": true, "starts_at": "2019-08-24T14:15:22Z", "telehealth_url": "http://example.com", "treatment_note_status": 0, "updated_at": "2019-08-24T14:15:22Z" }

List individual appointments

Request

Query
pageinteger
per_pageinteger[ 1 .. 100 ]
sortArray of strings

Comma separated search fields. See: Ordering

Example: sort=created_at:desc
q[]Array of strings
orderstringDeprecated
Enum"asc""desc"
curl -i -X GET \
  -u <username>:<password> \
  'https://api.au1.cliniko.com/v1/individual_appointments?order=asc&page=0&per_page=1&q%5B%5D=string&sort=created_at%3Adesc'

Responses

successful operation

Bodyapplication/json
individual_appointmentsArray of objects(IndividualAppointment)
total_entriesinteger
Example: 1
linksobject
Response
application/json
{ "individual_appointments": [ { "appointment_type": { "links": {} }, "archived_at": "2019-08-24T14:15:22Z", "attendees": { "links": {} }, "booking_ip_address": "10.0.0.43", "business": { "links": {} }, "cancellation_note": "string", "cancellation_reason": 0, "cancellation_reason_description": "Feeling Better", "cancelled_at": "2019-08-24T14:15:22Z", "conflicts": { "links": {} }, "created_at": "2019-08-24T14:15:22Z", "deleted_at": "2019-08-24T14:15:22Z", "did_not_arrive": true, "email_reminder_sent": true, "ends_at": "2019-08-24T14:15:22Z", "has_patient_appointment_notes": true, "id": "string", "invoice_status": 0, "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1" }, "notes": "string", "online_booking_policy_accepted": true, "patient": { "links": {} }, "patient_arrived": true, "patient_case": { "links": {} }, "patient_name": "string", "practitioner": { "links": {} }, "repeat_rule": { "number_of_repeats": 0, "repeat_type": "Daily", "repeating_interval": 0 }, "repeated_from": { "links": {} }, "repeats": { "links": {} }, "sms_reminder_sent": true, "starts_at": "2019-08-24T14:15:22Z", "telehealth_url": "http://example.com", "treatment_note_status": 0, "updated_at": "2019-08-24T14:15:22Z" } ], "total_entries": 1, "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments?page=2", "previous": "https://api.au1.cliniko.com/v1/individual_appointments?page=1", "next": "https://api.au1.cliniko.com/v1/individual_appointments?page=3" } }

Create individual appointment

Request

Bodyapplication/jsonrequired
appointment_type_idstring(int64)

appointment type id

Example: "1"
business_idstring(int64)

business id

Example: "1"
ends_atstring(date-time)

If not provided on create or set to null on update, this will be based on the duration of the appointment type.

notesstring or null
patient_idstring(int64)

patient id

Example: "1"
patient_case_idstring(int64)

patient case id

Example: "1"
practitioner_idstring(int64)

practitioner id

Example: "1"
starts_atstring(date-time)
repeat_ruleobject or null
curl -i -X POST \
  -u <username>:<password> \
  https://api.au1.cliniko.com/v1/individual_appointments \
  -H 'Content-Type: application/json' \
  -d '{
    "appointment_type_id": "1",
    "business_id": "1",
    "ends_at": "2019-08-24T14:15:22Z",
    "notes": "string",
    "patient_id": "1",
    "patient_case_id": "1",
    "practitioner_id": "1",
    "starts_at": "2019-08-24T14:15:22Z",
    "repeat_rule": {
      "number_of_repeats": 0,
      "repeat_type": "Daily",
      "repeating_interval": 0
    }
  }'

Responses

Resource was created

Bodyapplication/json
appointment_typeobject
archived_atstring or null(date-time)
attendeesobject
booking_ip_addressstring or null(ipv4)
Example: "10.0.0.43"
businessobject
cancellation_notestring or null
cancellation_reasoninteger or null
cancellation_reason_descriptionstring or null
Enum"Feeling Better""Condition Worse""Sick""COVID-19 related""Away""Other""Work"
cancelled_atstring or null(date-time)
conflictsobject or null
created_atstring(date-time)
deleted_atstring or null(date-time)
did_not_arriveboolean or null
email_reminder_sentboolean or null
ends_atstring(date-time)
has_patient_appointment_notesboolean or null
idstring(int64)
invoice_statusinteger or null
linksobject
notesstring or null
online_booking_policy_acceptedboolean or null
patientobject
patient_arrivedboolean or null
patient_caseobject
patient_namestring or null
practitionerobject
repeat_ruleobject or null
repeated_fromobject
repeatsobject or null
sms_reminder_sentboolean or null
starts_atstring(date-time)
telehealth_urlstring or null(uri)
treatment_note_statusinteger or null
updated_atstring(date-time)
Response
application/json
{ "appointment_type": { "links": { "self": "https://api.au1.cliniko.com/v1/appointment_types/1" } }, "archived_at": "2019-08-24T14:15:22Z", "attendees": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1/attendees" } }, "booking_ip_address": "10.0.0.43", "business": { "links": { "self": "https://api.au1.cliniko.com/v1/businesses/1" } }, "cancellation_note": "string", "cancellation_reason": 0, "cancellation_reason_description": "Feeling Better", "cancelled_at": "2019-08-24T14:15:22Z", "conflicts": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1/conflicts" } }, "created_at": "2019-08-24T14:15:22Z", "deleted_at": "2019-08-24T14:15:22Z", "did_not_arrive": true, "email_reminder_sent": true, "ends_at": "2019-08-24T14:15:22Z", "has_patient_appointment_notes": true, "id": "string", "invoice_status": 0, "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1" }, "notes": "string", "online_booking_policy_accepted": true, "patient": { "links": { "self": "https://api.au1.cliniko.com/v1/patients/1" } }, "patient_arrived": true, "patient_case": { "links": { "self": "https://api.au1.cliniko.com/v1/patient_cases/1" } }, "patient_name": "string", "practitioner": { "links": { "self": "https://api.au1.cliniko.com/v1/practitioners/1" } }, "repeat_rule": { "number_of_repeats": 0, "repeat_type": "Daily", "repeating_interval": 0 }, "repeated_from": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1" } }, "repeats": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments?q[]=repeated_from_id:=1" } }, "sms_reminder_sent": true, "starts_at": "2019-08-24T14:15:22Z", "telehealth_url": "http://example.com", "treatment_note_status": 0, "updated_at": "2019-08-24T14:15:22Z" }

Get individual appointment

Request

Path
idstring(int64)required
Query
q[]Array of strings
curl -i -X GET \
  -u <username>:<password> \
  'https://api.au1.cliniko.com/v1/individual_appointments/{id}?q%5B%5D=string'

Responses

Successful operation

Bodyapplication/json
appointment_typeobject
archived_atstring or null(date-time)
attendeesobject
booking_ip_addressstring or null(ipv4)
Example: "10.0.0.43"
businessobject
cancellation_notestring or null
cancellation_reasoninteger or null
cancellation_reason_descriptionstring or null
Enum"Feeling Better""Condition Worse""Sick""COVID-19 related""Away""Other""Work"
cancelled_atstring or null(date-time)
conflictsobject or null
created_atstring(date-time)
deleted_atstring or null(date-time)
did_not_arriveboolean or null
email_reminder_sentboolean or null
ends_atstring(date-time)
has_patient_appointment_notesboolean or null
idstring(int64)
invoice_statusinteger or null
linksobject
notesstring or null
online_booking_policy_acceptedboolean or null
patientobject
patient_arrivedboolean or null
patient_caseobject
patient_namestring or null
practitionerobject
repeat_ruleobject or null
repeated_fromobject
repeatsobject or null
sms_reminder_sentboolean or null
starts_atstring(date-time)
telehealth_urlstring or null(uri)
treatment_note_statusinteger or null
updated_atstring(date-time)
Response
application/json
{ "appointment_type": { "links": { "self": "https://api.au1.cliniko.com/v1/appointment_types/1" } }, "archived_at": "2019-08-24T14:15:22Z", "attendees": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1/attendees" } }, "booking_ip_address": "10.0.0.43", "business": { "links": { "self": "https://api.au1.cliniko.com/v1/businesses/1" } }, "cancellation_note": "string", "cancellation_reason": 0, "cancellation_reason_description": "Feeling Better", "cancelled_at": "2019-08-24T14:15:22Z", "conflicts": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1/conflicts" } }, "created_at": "2019-08-24T14:15:22Z", "deleted_at": "2019-08-24T14:15:22Z", "did_not_arrive": true, "email_reminder_sent": true, "ends_at": "2019-08-24T14:15:22Z", "has_patient_appointment_notes": true, "id": "string", "invoice_status": 0, "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1" }, "notes": "string", "online_booking_policy_accepted": true, "patient": { "links": { "self": "https://api.au1.cliniko.com/v1/patients/1" } }, "patient_arrived": true, "patient_case": { "links": { "self": "https://api.au1.cliniko.com/v1/patient_cases/1" } }, "patient_name": "string", "practitioner": { "links": { "self": "https://api.au1.cliniko.com/v1/practitioners/1" } }, "repeat_rule": { "number_of_repeats": 0, "repeat_type": "Daily", "repeating_interval": 0 }, "repeated_from": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1" } }, "repeats": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments?q[]=repeated_from_id:=1" } }, "sms_reminder_sent": true, "starts_at": "2019-08-24T14:15:22Z", "telehealth_url": "http://example.com", "treatment_note_status": 0, "updated_at": "2019-08-24T14:15:22Z" }

Update individual appointment

Request

Path
idstring(int64)required
Bodyapplication/jsonrequired
appointment_type_idstring(int64)

appointment type id

Example: "1"
business_idstring(int64)

business id

Example: "1"
ends_atstring(date-time)

If not provided on create or set to null on update, this will be based on the duration of the appointment type.

notesstring or null
patient_idstring(int64)

patient id

Example: "1"
patient_case_idstring(int64)

patient case id

Example: "1"
practitioner_idstring(int64)

practitioner id

Example: "1"
starts_atstring(date-time)
repeat_ruleobject or null
curl -i -X PATCH \
  -u <username>:<password> \
  'https://api.au1.cliniko.com/v1/individual_appointments/{id}' \
  -H 'Content-Type: application/json' \
  -d '{
    "appointment_type_id": "1",
    "business_id": "1",
    "ends_at": "2019-08-24T14:15:22Z",
    "notes": "string",
    "patient_id": "1",
    "patient_case_id": "1",
    "practitioner_id": "1",
    "starts_at": "2019-08-24T14:15:22Z",
    "repeat_rule": {
      "number_of_repeats": 0,
      "repeat_type": "Daily",
      "repeating_interval": 0
    }
  }'

Responses

Resource was updated

Bodyapplication/json
appointment_typeobject
archived_atstring or null(date-time)
attendeesobject
booking_ip_addressstring or null(ipv4)
Example: "10.0.0.43"
businessobject
cancellation_notestring or null
cancellation_reasoninteger or null
cancellation_reason_descriptionstring or null
Enum"Feeling Better""Condition Worse""Sick""COVID-19 related""Away""Other""Work"
cancelled_atstring or null(date-time)
conflictsobject or null
created_atstring(date-time)
deleted_atstring or null(date-time)
did_not_arriveboolean or null
email_reminder_sentboolean or null
ends_atstring(date-time)
has_patient_appointment_notesboolean or null
idstring(int64)
invoice_statusinteger or null
linksobject
notesstring or null
online_booking_policy_acceptedboolean or null
patientobject
patient_arrivedboolean or null
patient_caseobject
patient_namestring or null
practitionerobject
repeat_ruleobject or null
repeated_fromobject
repeatsobject or null
sms_reminder_sentboolean or null
starts_atstring(date-time)
telehealth_urlstring or null(uri)
treatment_note_statusinteger or null
updated_atstring(date-time)
Response
application/json
{ "appointment_type": { "links": { "self": "https://api.au1.cliniko.com/v1/appointment_types/1" } }, "archived_at": "2019-08-24T14:15:22Z", "attendees": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1/attendees" } }, "booking_ip_address": "10.0.0.43", "business": { "links": { "self": "https://api.au1.cliniko.com/v1/businesses/1" } }, "cancellation_note": "string", "cancellation_reason": 0, "cancellation_reason_description": "Feeling Better", "cancelled_at": "2019-08-24T14:15:22Z", "conflicts": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1/conflicts" } }, "created_at": "2019-08-24T14:15:22Z", "deleted_at": "2019-08-24T14:15:22Z", "did_not_arrive": true, "email_reminder_sent": true, "ends_at": "2019-08-24T14:15:22Z", "has_patient_appointment_notes": true, "id": "string", "invoice_status": 0, "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1" }, "notes": "string", "online_booking_policy_accepted": true, "patient": { "links": { "self": "https://api.au1.cliniko.com/v1/patients/1" } }, "patient_arrived": true, "patient_case": { "links": { "self": "https://api.au1.cliniko.com/v1/patient_cases/1" } }, "patient_name": "string", "practitioner": { "links": { "self": "https://api.au1.cliniko.com/v1/practitioners/1" } }, "repeat_rule": { "number_of_repeats": 0, "repeat_type": "Daily", "repeating_interval": 0 }, "repeated_from": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments/1" } }, "repeats": { "links": { "self": "https://api.au1.cliniko.com/v1/individual_appointments?q[]=repeated_from_id:=1" } }, "sms_reminder_sent": true, "starts_at": "2019-08-24T14:15:22Z", "telehealth_url": "http://example.com", "treatment_note_status": 0, "updated_at": "2019-08-24T14:15:22Z" }

Archive individual appointment

Request

Path
idstring(int64)required
curl -i -X POST \
  -u <username>:<password> \
  'https://api.au1.cliniko.com/v1/individual_appointments/{id}/archive'

Responses

Resource was archived

Cancel individual appointment

Request

Path
idstring(int64)required
Bodyapplication/jsonrequired
cancellation_notestring or null
cancellation_reasoninteger
Enum ValueDescription
10Feeling better
20Condition worse
30Sick
40Away
50Other
60Work
Enum102030405060
apply_to_repeatsboolean
curl -i -X PATCH \
  -u <username>:<password> \
  'https://api.au1.cliniko.com/v1/individual_appointments/{id}/cancel' \
  -H 'Content-Type: application/json' \
  -d '{
    "cancellation_note": "string",
    "cancellation_reason": 10,
    "apply_to_repeats": true
  }'

Responses

Resource was cancelled

Get conflicts for an individual appointment

Request

Path
idstring(int64)required
curl -i -X GET \
  -u <username>:<password> \
  'https://api.au1.cliniko.com/v1/individual_appointments/{id}/conflicts'

Responses

Successful operation

Bodyapplication/json
conflictsobject
Response
application/json
{ "conflicts": { "exist": true } }

Archive individual appointmentDeprecated

Request

Path
idstring(int64)required
curl -i -X DELETE \
  -u <username>:<password> \
  'https://api.au1.cliniko.com/v1/individual_appointments/{id}'

Responses

Resource was archived successfully

Invoice

Operations

Invoice Item

Operations

Medical Alert

Operations

Patient

Patients are the people that book in for appointments. There isn't much in Cliniko that doesn't revolve around patients.

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.

Operations

Patient Attachment

Operations

Patient Case

Operations

Patient Form

HTML is supported in answers to paragraph questions. We sanitize these answers to ensure the HTML is safe and our editor can support the formatting.

Currently, the following tags are supported: p, div, br, ul, ol, li, blockquote, h1, h2, b, i, u, and a.

The angle bracket characters (<, and >) should be sent as html encodings (ex: < should be sent as &lt;).

Content inside unescaped angle brackets could be indentified as unsupported HTML and will be stripped.

Operations

Patient Form Template

Operations

Practitioner

All practitioners have an associated user account. Not all users are practitioners (e.g. receptionists wouldn't be).

You can only create appointments for practitioners (not for users).

Operations

Practitioner Reference Number

Operations

Product

Operations

Product Supplier

Operations

Public Settings

Operations

Referral Source

Referral source of a patient

Operations

Referral Source Type

Types of referrals for patients

Operations

Relationship

Operations

Service

Operations

Settings

Operations

Signature

Operations

Stock Adjustment

Operations

Tax

Operations

Treatment Note

Notes taken about a patient visit.

HTML is supported in answers to paragraph questions. We sanitize these answers to ensure the HTML is safe and our editor can support the formatting.

Currently, the following tags are supported: p, div, br, ul, ol, li, blockquote, h1, h2, b, i, u, and a.

The angle bracket characters (<, and >) should be sent as html encodings (ex: < should be sent as &lt;).

Content inside unescaped angle brackets could be indentified as unsupported HTML and will be stripped.

Operations

Treatment Note Template

Templates that are the starting point for treatment notes.

HTML is supported in answers to paragraph questions. We sanitize these answers to ensure the HTML is safe and our editor can support the formatting.

Currently, the following tags are supported: p, div, br, ul, ol, li, blockquote, h1, h2, b, i, u, and a.

The angle bracket characters (<, and >) should be sent as html encodings (ex: < should be sent as &lt;).

Content inside unescaped angle brackets could be indentified as unsupported HTML and will be stripped.

Operations

Unavailable Block

Operations

User

Operations