> ## Documentation Index
> Fetch the complete documentation index at: https://docs.routiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Cliniko Integration

> Connect your Cliniko account to Routiq in under 5 minutes. Cliniko is the most-used PMS in AU/NZ allied health and Routiq's most mature integration.

<Info>
  **Why this matters.** Cliniko is the most popular practice management
  system in Australian and New Zealand allied health, and Routiq's
  Cliniko integration is the most battle-tested of all our PMS
  connections — webhooks for real-time updates, a daily reconciliation
  sync to catch anything the webhooks miss, and 24-month appointment
  history out of the box.
</Info>

## What Robyn can do with Cliniko

* **Read patients** — recognise returning callers by phone, look up history, capture new-patient records
* **Read availability** — pulled from Cliniko's online-bookings settings (lead times, cluster bookings, practitioner schedules apply automatically)
* **Book, reschedule, cancel** — Robyn writes appointments directly into the Cliniko calendar
* **Trigger recall outreach** — overdue patients identified from Cliniko's appointment history
* **Real-time webhooks** — patient and appointment changes in Cliniko reach Routiq within seconds
* **Daily reconciliation sync** — full sync at 02:00 in your practice timezone catches anything webhooks missed

## Before you start

You'll need:

* **Administrator access** to your Cliniko account
* **API access enabled** in Cliniko (on by default for paid plans)
* **Online bookings enabled** in Cliniko (Robyn uses this as the source of truth for availability)

## Setup

<Steps>
  <Step title="Identify your Cliniko shard">
    Cliniko hosts your account on one of several regional shards. Look at your Cliniko URL when logged in:

    | Cliniko URL       | Shard code |
    | ----------------- | ---------- |
    | `au1.cliniko.com` | `au1`      |
    | `au2.cliniko.com` | `au2`      |
    | `au3.cliniko.com` | `au3`      |
    | `au4.cliniko.com` | `au4`      |
    | `uk.cliniko.com`  | `uk1`      |
    | `us.cliniko.com`  | `us1`      |

    You'll need this in step 3.
  </Step>

  <Step title="Generate a Cliniko API key">
    1. Log into Cliniko
    2. Click your name (top right) → **My Info**
    3. Open the **API Keys** tab
    4. Click **New API Key**
    5. Name it `Routiq Integration`
    6. **Copy the key immediately** — Cliniko shows it only once

    <Warning>
      The key gives full account access. Treat it like a password. If you lose it, generate a new one (the old one stays valid until you revoke it).
    </Warning>
  </Step>

  <Step title="Confirm online bookings are enabled in Cliniko">
    Robyn reads availability from Cliniko's online-booking portal. If it isn't enabled, Robyn won't be able to book — even though the calendar is empty.

    1. In Cliniko: **Settings** → **Appointments** → **Online bookings** → toggle **Allow your patients to book appointments online** ON
    2. **Settings** → **Our clinic** → **Users & practitioners** → for each practitioner, toggle **Show this practitioner in online bookings** ON
    3. **Settings** → **Our clinic** → **Business information** → for each location, toggle **Display this business in online bookings** ON

    [Cliniko's full guide to online bookings →](https://help.cliniko.com/en/articles/1023963-set-up-online-bookings)
  </Step>

  <Step title="Connect in Routiq">
    1. In Routiq: **Setup** → **Connect Cliniko** (or **Settings** → **Integrations** → **Cliniko**)
    2. Select your shard from the dropdown
    3. Paste your API key
    4. Click **Connect and Sync**

    Routiq validates the key, registers webhooks, and starts the initial sync.
  </Step>

  <Step title="Wait for the initial sync">
    Sync time depends on database size:

    | Practice size        | Estimated time |
    | -------------------- | -------------- |
    | \< 500 patients      | 1–2 minutes    |
    | 500–2,000 patients   | 5–10 minutes   |
    | 2,000–5,000 patients | 10–20 minutes  |
    | > 5,000 patients     | 20–30 minutes  |

    You can navigate away — sync continues in the background. The dashboard shows progress.
  </Step>

  <Step title="Verify the connection">
    Once sync completes:

    1. Go to **Patients** in Routiq — your list should appear
    2. Open a patient — appointment history should match Cliniko
    3. Go to the dashboard — recent webhook events should be flowing in

    <Check>Cliniko is connected. Robyn can now book, reschedule, and identify patients from Cliniko data.</Check>
  </Step>
</Steps>

## What gets synced

<CardGroup cols={2}>
  <Card title="Patient data">
    Cliniko ID, name, email, phone, DOB, gender, address, status (active / inactive / deceased), notes (if configured)
  </Card>

  <Card title="Appointment data">
    Appointment ID, date/time, practitioner, treatment type, status (confirmed / cancelled / DNA), duration, location
  </Card>

  <Card title="Practice data">
    Practice name, business locations, practitioner list, treatment types, online-booking rules
  </Card>

  <Card title="Real-time events">
    Patient created/updated/deleted, appointment created/updated/deleted — within seconds via Cliniko webhooks
  </Card>
</CardGroup>

## Permissions

The API key needs full Cliniko access (which is what `New API Key` grants). Routiq uses the key to:

* **Read** patients, appointments, practitioners, treatment types, locations, online-booking rules
* **Write** appointments — Robyn books, reschedules, and cancels on patients' behalf
* **Subscribe** to webhooks for real-time updates

Routiq does **not** read or write clinical notes, files, or any non-administrative data.

## Troubleshooting

<AccordionGroup>
  <Accordion title="'Invalid API key' error">
    Causes: copied with extra spaces, key was revoked in Cliniko, or wrong shard selected. Fix: generate a new key, paste without trimming spaces, double-check shard from your Cliniko URL.
  </Accordion>

  <Accordion title="'No availability returned' when booking">
    Online bookings probably aren't fully enabled in Cliniko. Re-check step 3 — all three toggles (account-level, per-practitioner, per-location) must be on.
  </Accordion>

  <Accordion title="Patients aren't appearing">
    Initial sync may still be running — check the dashboard progress indicator. If complete, verify the patient is marked **active** in Cliniko (archived/inactive patients sync but are filtered by default in the patient list).
  </Accordion>

  <Accordion title="Appointment history is missing">
    Routiq syncs the last 24 months of appointments by default. Older appointments aren't pulled automatically; contact us if you need a longer history.
  </Accordion>

  <Accordion title="Webhooks stopped firing">
    Go to **Settings → Integrations → Cliniko → Webhook Logs** in Routiq. If you see recent failures, click **Re-register Webhooks**. If the issue persists, regenerating the API key usually fixes it.
  </Accordion>
</AccordionGroup>

## Managing the integration

### Rotating the API key

1. Generate a new key in Cliniko
2. In Routiq: **Settings** → **Integrations** → **Cliniko** → **Update API Key**
3. Paste, save

The swap is instant — no data loss, webhooks re-register automatically.

### Disconnecting

<Warning>
  Disconnecting Cliniko stops Robyn from booking, halts all outbound sequences, and pauses every active recall campaign.
</Warning>

**Settings** → **Integrations** → **Cliniko** → **Disconnect**. Patient data is retained for 30 days post-disconnect for compliance and recovery, then deleted.

### Manual resync

If you've imported patients in bulk into Cliniko and don't want to wait for the daily sync:

**Settings** → **Integrations** → **Cliniko** → **Sync Now**.

## Next

<CardGroup cols={2}>
  <Card title="Set up the calls channel" icon="phone" href="/channels/calls">
    Forward your clinic line to Robyn and start handling calls.
  </Card>

  <Card title="Turn on lapsed-patient reactivation" icon="rotate-right" href="/outbound/lapsed-patient-reactivation">
    The recall pillar — bring dormant patients back.
  </Card>
</CardGroup>
