---
title: "Book a Cliniko appointment"
method: POST
path: "/patients/{patient_id}/cliniko/appointments"
tags: ["cliniko-booking"]
---

# Book a Cliniko appointment

`POST /patients/{patient_id}/cliniko/appointments`

## Path parameters

- `patient_id` integer, required

## Request body

- CreateClinikoAppointmentRequest
  - `additional_comments` string, nullable
  - `appointment_type_id` integer, required
  - `birthday` string, date, nullable
  - `idempotency_key` string, nullable
  - `patient_timezone` string, nullable
  - `phone_number` string, nullable
  - `province_code` string, required
  - `slot_id` string, required

## Response `200`

idempotent replay returned existing appointment

- ClinikoAppointmentResponse
  - `appointment_type_description` string, nullable
  - `appointment_type_id` integer, nullable
  - `appointment_type_name` string, required
  - `appointment_type_sort_order` integer, nullable
  - `assigned_practitioner_id` integer, nullable
  - `business_timezone` string, nullable
  - `canceled_at` string, date-time, nullable
  - `cancellation_reason` string, nullable
  - `cliniko_appointment_id` integer, required
  - `created_time` string, date-time, required
  - `duration_minutes` integer, required
  - `ends_at` string, date-time, required
  - `id` integer, required
  - `localized_ends_at` string, date-time, nullable
  - `localized_starts_at` string, date-time, nullable
  - `practitioner` ClinikoPractitionerResponse
    - `active` boolean, required
    - `avatar_url` string, nullable
    - `bio` string, nullable
    - `cliniko_id` integer, required
    - `credentials` string, nullable
    - `id` integer, nullable, required
    - `languages` string[], required
    - `name` string, required
    - `province_codes` string[], required
  - `province_code` string, required
  - `slot_id` string, nullable
  - `starts_at` string, date-time, required
  - `status` string, required
  - `telehealth_link_policy` ClinikoTelehealthLinkPolicyResponse
    - `has_link` boolean
    - `visible` boolean
  - `telehealth_url` string, nullable

## Other responses

- `201` — appointment created
- `400` — validation error
- `409` — slot conflict
- `503` — Cliniko unavailable

---

[API](https://skmtc.dev/rxfoodapp/apis/inneranalytics-mnt-server.md) · [All operations](https://skmtc.dev/rxfoodapp/apis/inneranalytics-mnt-server/llms.txt) · [OpenAPI document](https://skmtc.dev/rxfoodapp/apis/inneranalytics-mnt-server/revisions/04eb7a66328a?raw)
