Dentolize Plugin API (2026-07)

Download OpenAPI specification:

Public REST surface for Dentolize plugins. All requests require a plugin token (Authorization: Bearer) whose granted scopes gate each route; PII-tier patient fields additionally require the 'patients:read.pii' scope. POST writes require an Idempotency-Key header.

Patients

List patients (cursor-paginated, newest first)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters
searchTerm
string [ 2 .. 100 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Create a patient (requires Idempotency-Key header)

Authorizations:
bearerAuth
Request Body schema: application/json
branchId
required
string [ 1 .. 64 ] characters
firstName
required
string [ 1 .. 100 ] characters
lastName
required
string [ 1 .. 100 ] characters
phoneNumber
string [ 5 .. 24 ] characters
phoneNumber2
string [ 5 .. 24 ] characters
email
string <email> <= 120 characters
gender
string <= 20 characters
title
string <= 30 characters
birthDate
string <date>
address
string <= 500 characters
nationality
string <= 60 characters
maritalStatus
string <= 30 characters
nationalId
string <= 50 characters
identifierType
string <= 30 characters
clinicFileNumber
string <= 50 characters
details
string <= 2000 characters
doctorId
string [ 1 .. 64 ] characters

Responses

Request samples

Content type
application/json
{
  • "branchId": "string",
  • "firstName": "string",
  • "lastName": "string",
  • "phoneNumber": "string",
  • "phoneNumber2": "string",
  • "email": "user@example.com",
  • "gender": "string",
  • "title": "string",
  • "birthDate": "2019-08-24",
  • "address": "string",
  • "nationality": "string",
  • "maritalStatus": "string",
  • "nationalId": "string",
  • "identifierType": "string",
  • "clinicFileNumber": "string",
  • "details": "string",
  • "doctorId": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get one patient

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Update a patient

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
firstName
string [ 1 .. 100 ] characters
lastName
string [ 1 .. 100 ] characters
phoneNumber
string [ 5 .. 24 ] characters
phoneNumber2
string [ 5 .. 24 ] characters
email
string <email> <= 120 characters
gender
string <= 20 characters
title
string <= 30 characters
birthDate
string <date>
address
string <= 500 characters
nationality
string <= 60 characters
maritalStatus
string <= 30 characters
nationalId
string <= 50 characters
identifierType
string <= 30 characters
clinicFileNumber
string <= 50 characters
details
string <= 2000 characters
doctorId
string [ 1 .. 64 ] characters

Responses

Request samples

Content type
application/json
{
  • "firstName": "string",
  • "lastName": "string",
  • "phoneNumber": "string",
  • "phoneNumber2": "string",
  • "email": "user@example.com",
  • "gender": "string",
  • "title": "string",
  • "birthDate": "2019-08-24",
  • "address": "string",
  • "nationality": "string",
  • "maritalStatus": "string",
  • "nationalId": "string",
  • "identifierType": "string",
  • "clinicFileNumber": "string",
  • "details": "string",
  • "doctorId": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Appointments

List appointments (from/to filter on start time)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters
doctorId
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters
status
string
Enum: "OPEN" "CONFIRMED" "CHECKEDIN" "COMPLETED" "CANCELED" "NOSHOW" "INPROGRESS" "DELAYED" "WAITING"

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Create an appointment (requires Idempotency-Key header)

Authorizations:
bearerAuth
Request Body schema: application/json
start
required
string <date-time>
end
required
string <date-time>
branchId
required
string [ 1 .. 64 ] characters
doctorId
required
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters
title
string <= 200 characters
details
string <= 2000 characters
room
string <= 50 characters
urgent
boolean

Responses

Request samples

Content type
application/json
{
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "branchId": "string",
  • "doctorId": "string",
  • "patientId": "string",
  • "title": "string",
  • "details": "string",
  • "room": "string",
  • "urgent": true
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get one appointment

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Reschedule / edit an appointment

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
start
string <date-time>
end
string <date-time>
title
string <= 200 characters
details
string <= 2000 characters
room
string <= 50 characters

Responses

Request samples

Content type
application/json
{
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "title": "string",
  • "details": "string",
  • "room": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Cancel an appointment (status → CANCELED)

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
optional
cancelReason
string <= 500 characters

Responses

Request samples

Content type
application/json
{
  • "cancelReason": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Invoices

List invoices (read-only; from/to required, max 366-day span)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Get one invoice

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Payments

List payments (read-only; from/to required, max 366-day span)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Record an external payment against an invoice (requires Idempotency-Key header)

For POS/gateway partners that collect money outside Dentolize. Runs the full platform money path (treasury routing via branch defaults, invoice/patient totals, events). BALANCE and INSURANCE types are not accepted.

Authorizations:
bearerAuth
Request Body schema: application/json
invoiceId
required
string [ 1 .. 64 ] characters
amount
required
number > 0

Must not exceed the invoice pending amount

type
required
string
Enum: "CARD" "CASH" "BANK_TRANSFER" "MOBILE_WALLET" "CHEQUE" "OTHER"
treasuryId
string [ 1 .. 64 ] characters

Target treasury; defaults to the invoice branch's default treasury for the payment type

reference
string [ 1 .. 500 ] characters

External reference (gateway/POS transaction id), stored on the payment

Responses

Request samples

Content type
application/json
{
  • "invoiceId": "string",
  • "amount": 0,
  • "type": "CARD",
  • "treasuryId": "string",
  • "reference": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get one payment

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Treatments

List treatments (read-only)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters
doctorId
string [ 1 .. 64 ] characters
status
string
Enum: "EXISTING" "PLANNED" "COMPLETED" "IN_PROGRESS" "REJECTED" "CONDITION"
approvalRequired
string
Enum: "true" "false"

Filter treatments needing insurance pre-authorization

approved
string
Enum: "true" "false"

Filter treatments by pre-authorization approval state

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Get one treatment

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Availability

Free bookable slots for a doctor at a branch

Authorizations:
bearerAuth
query Parameters
branchId
required
string [ 1 .. 64 ] characters
doctorId
required
string [ 1 .. 64 ] characters
date
string^\d{4}-\d{2}-\d{2}$

Return slots for this single day (within the next 60 days)

days
integer [ 1 .. 30 ]

Number of upcoming days with slots to return (default 7); ignored when date is set

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Clinic

Get the clinic profile (name, locale, currency, VAT registration, branding)

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

List branches (working days/hours, rooms)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Get one branch

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

List practitioners/staff (contact fields require practitioners:read.contact)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters
isDoctor
string
Enum: "true" "false"

Filter to bookable doctors only

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Procedures

List the procedures catalog

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

groupId
string [ 1 .. 64 ] characters
searchTerm
string [ 2 .. 100 ] characters

Matches procedure name or code

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Reference

Appointment type catalog (clinic-defined enum slots + built-in values)

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Patient tag catalog

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Payment type catalog (static enum)

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Company medication catalog (requires prescriptions:read)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Installation

Get the authenticated installation (granted scopes/events, settings)

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Replace the installation's settings (validated against the plugin settingsSchema)

Authorizations:
bearerAuth
Request Body schema: application/json
property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "property1": null,
  • "property2": null
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Webhooks

List webhook endpoints of this installation (not paginated)

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Create a webhook endpoint (requires Idempotency-Key header)

Authorizations:
bearerAuth
Request Body schema: application/json
url
required
string <uri>

https:// endpoint (http allowed in test mode)

events
required
Array of strings non-empty

Event types; must be covered by the installation consent

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Update a webhook endpoint (url, events, active)

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
url
string <uri>
events
Array of strings non-empty
active
boolean

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Delete a webhook endpoint

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "error": {
    }
}

Rotate the signing secret

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

List deliveries of an endpoint (cursor-paginated, newest first)

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Redeliver a failed delivery

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Send a fixture test event to an endpoint

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
optional
eventType
string

Defaults to the first subscribed event

Responses

Request samples

Content type
application/json
{
  • "eventType": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Labs

List dental labs (contact basics)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

List the lab item catalog

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

labId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

List lab orders (status = pending | received | delivered)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters
labId
string [ 1 .. 64 ] characters
status
string
Enum: "pending" "received" "delivered"

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Get one lab order

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Lab-side update: mark received/delivered, set shade/notes (never money fields)

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
received
boolean
Value: true

Mark the order received back from the lab (sets receivedAt)

delivered
boolean
Value: true

Mark the order delivered to the patient

shade
string <= 100 characters
details
string <= 2000 characters

Responses

Request samples

Content type
application/json
{
  • "received": true,
  • "delivered": true,
  • "shade": "string",
  • "details": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Quotations

List quotations / estimates (from/to required; no signature images)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters
signed
string
Enum: "true" "false"

Filter by acceptance (signature) state

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Get one quotation

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Prescriptions

List prescriptions with medication lines

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Get one prescription

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Company medication catalog (requires prescriptions:read)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Forms

List custom forms with their current version schema

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

List form submissions (answers on the detail route only)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

formId
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters
status
string
Enum: "DRAFT" "SUBMITTED"

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Submit a form externally (requires Idempotency-Key header)

Authorizations:
bearerAuth
Request Body schema: application/json
formId
required
string [ 1 .. 64 ] characters
patientId
required
string [ 1 .. 64 ] characters
ref
string <= 200 characters
required
object

Responses

Request samples

Content type
application/json
{
  • "formId": "string",
  • "patientId": "string",
  • "ref": "string",
  • "answers": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get one form submission including answers (signatures stripped)

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

List consent form instances (signed state; never signature images)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters
signed
string
Enum: "true" "false"

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Encounters

List patient encounters

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Get one encounter with its measurements (vitals)

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Record a vital on an encounter (device push; requires Idempotency-Key header)

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
name
required
string
Enum: "BLOOD_PRESSURE_SYSTOLIC" "BLOOD_PRESSURE_DIASTOLIC" "HEART_RATE" "RESPIRATORY_RATE" "TEMPERATURE" "OXYGEN_SATURATION" "HEIGHT" "WEIGHT" "BMI" "BLOOD_GLUCOSE_FASTING" "BLOOD_GLUCOSE_POSTPRANDIAL" "TOTAL_CHOLESTEROL" "HDL_CHOLESTEROL" "LDL_CHOLESTEROL" "TRIGLYCERIDES" "HEMOGLOBIN" "HEMATOCRIT" "WBC_COUNT" "RBC_COUNT" "PLATELET_COUNT" "EJECTION_FRACTION" "CREATININE" "MAP" "BSA" "IBW" "BMR" "BUN" "GFR" "ALT" "AST" "BILIRUBIN" "ALBUMIN" "TSH" "FREE_T4" "FREE_T3" "HBA1C" "CAPILLARY_REFILL_TIME" "CVP" "ICP" "ETCO2" "URINE_OUTPUT" "GCS" "PAIN_SCORE" "APGAR_SCORE" "PUPIL_SIZE" "PA_O2" "PA_CO2" "PH" "WAIST_CIRCUMFERENCE"
value
required
number

Responses

Request samples

Content type
application/json
{
  • "name": "BLOOD_PRESSURE_SYSTOLIC",
  • "value": 0
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Files

List patient files (non-xray) with short-lived download URLs

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

operationId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Request a presigned upload (step 1 of 2; requires Idempotency-Key header)

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
fileName
required
string [ 1 .. 200 ] characters
contentType
required
string
Enum: "image/jpeg" "image/png" "image/webp" "image/tiff" "image/bmp" "application/pdf" "application/dicom"
sizeBytes
required
integer [ 10 .. 104857600 ]
kind
required
string
Enum: "file" "xray"
operationId
string [ 1 .. 64 ] characters

Responses

Request samples

Content type
application/json
{
  • "fileName": "string",
  • "contentType": "image/jpeg",
  • "sizeBytes": 10,
  • "kind": "file",
  • "operationId": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

List patient x-rays with their files

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

operationId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Confirm an upload, creating the file (and x-ray) record (step 2 of 2; requires Idempotency-Key header)

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
fileId
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Insurance

List insurance companies (directory, read-only)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

searchTerm
string [ 2 .. 100 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Get one insurance company

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

List insurance policies (optionally by insuranceCompanyId)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

insuranceCompanyId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

List policy classes (optionally by policyId)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

policyId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Claims

List insurance claims (read-only; from/to required, max 366-day span)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

status
string
Enum: "PLANNING" "IN_REVIEW" "PARTIALLY_CLAIMED" "FULLY_CLAIMED"
insuranceCompanyId
string [ 1 .. 64 ] characters
branchId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Get one claim (includes member invoice ids)

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Online Payments

List online payments (read-only; from/to required, max 366-day span)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

status
string
Enum: "CREATED" "PENDING" "SUCCESS" "FAILED" "REFUND"
invoiceId
string [ 1 .. 64 ] characters
branchId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Get one online payment

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Generate a hosted payment link for an invoice (requires Idempotency-Key header)

Creates a gateway payment link using the clinic's configured payment provider. Returns 409 payment_provider_not_configured when the clinic has no usable payment option.

Authorizations:
bearerAuth
Request Body schema: application/json
invoiceId
required
string [ 1 .. 64 ] characters
amount
number > 0

Amount to collect; defaults to the invoice pending amount

Responses

Request samples

Content type
application/json
{
  • "invoiceId": "string",
  • "amount": 0
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

E-Invoicing

List e-invoice submissions (read-only; from/to required, max 366-day span)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

status
string
Enum: "NOT_STARTED" "PENDING" "IN_PROGRESS" "SUBMITTED" "CLEARED" "REJECTED" "CANCELLED"
invoiceId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Get one e-invoice submission

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Leads

List leads

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

stageId
string [ 1 .. 64 ] characters
assignedToId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Create a lead from a campaign (requires Idempotency-Key header)

Mirrors the public lead-capture path: creates the lead and its contact record on the selected pipeline stage with round-robin auto-assignment. Duplicate phone numbers are rejected with 409 lead_exists.

Authorizations:
bearerAuth
Request Body schema: application/json
name
required
string [ 1 .. 200 ] characters
phone
required
string^\+?[0-9][0-9 _-]{4,19}$
stageId
string [ 1 .. 64 ] characters

Defaults to the clinic's first pipeline stage

branchId
string [ 1 .. 64 ] characters

Defaults to the clinic's first branch

sourceId
string [ 1 .. 64 ] characters

Referral source id (campaign attribution)

subSourceId
string [ 1 .. 64 ] characters

Referral sub-source id; requires sourceId

dealSize
number [ 0 .. 100000000 ]
notes
string [ 1 .. 2000 ] characters

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "phone": "string",
  • "stageId": "string",
  • "branchId": "string",
  • "sourceId": "string",
  • "subSourceId": "string",
  • "dealSize": 100000000,
  • "notes": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get one lead

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Move a lead between stages and/or update score, assignee or deal size

Stage moves run the full platform pipeline semantics: order shuffling, per-stage lead counters, due-date recalculation and a StageTimeline history row.

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
stageId
string [ 1 .. 64 ] characters
assignedToId
string or null [ 1 .. 64 ] characters

Assignee user id; null unassigns

score
integer or null [ 0 .. 100 ]
dealSize
number [ 0 .. 100000000 ]

Responses

Request samples

Content type
application/json
{
  • "stageId": "string",
  • "assignedToId": "string",
  • "score": 100,
  • "dealSize": 100000000
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

List pipeline stages

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Communications

Queue an outbound message to a patient (requires Idempotency-Key header)

Creates a pending communication dispatched by the platform message pipeline. The patient phone number is resolved internally and never returned. WhatsApp sends are restricted to APPROVED templates; SMS accepts free text. Responds 202 with the queued communication id.

Authorizations:
bearerAuth
Request Body schema: application/json
patientId
required
string [ 1 .. 64 ] characters
channel
required
string
Enum: "whatsapp" "sms"
templateId
string [ 1 .. 64 ] characters

APPROVED WhatsApp template id (required for whatsapp)

variables
Array of strings <= 20 items [ items <= 500 characters ]

Ordered values for the template placeholders (whatsapp only)

text
string [ 1 .. 1000 ] characters

Free-text body (sms only)

Responses

Request samples

Content type
application/json
{
  • "patientId": "string",
  • "channel": "whatsapp",
  • "templateId": "string",
  • "variables": [
    ],
  • "text": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

List the outbound delivery log (per-channel status; content preview only)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

patientId
string [ 1 .. 64 ] characters
channel
string
Enum: "whatsapp" "sms" "email"

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Conversations

List WhatsApp conversations

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

resolved
string
Enum: "true" "false"
assignedTo
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Assign and/or resolve a conversation

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
assignedToId
string or null [ 1 .. 64 ] characters

Assignee user id; null unassigns

resolved
boolean

Responses

Request samples

Content type
application/json
{
  • "assignedToId": "string",
  • "resolved": true
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

List messages in a conversation

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Reply in a conversation (requires Idempotency-Key header)

Sends a free-text WhatsApp reply through the clinic WhatsApp Business account. Only allowed within the 24-hour customer-service window (409 conversation_expired otherwise). Requires the clinic to have official WhatsApp configured (409 whatsapp_not_configured otherwise).

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
text
required
string [ 1 .. 4096 ] characters

Responses

Request samples

Content type
application/json
{
  • "text": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Loyalty

Get a patient's points aggregate

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

List points transactions

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

patientId
string [ 1 .. 64 ] characters
action
string
Enum: "PAYMENT" "REFERRAL" "FEEDBACK" "REFERRAL_FEEDBACK" "MANUAL" "TRANSFER" "DISCOUNT"

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Manually earn or redeem patient points (requires Idempotency-Key header)

Creates a MANUAL points transaction through the platform loyalty core: earned points expire per the clinic loyalty settings, redemptions consume earliest-expiring points first, and a redemption exceeding the remaining balance is rejected with 409 insufficient_points.

Authorizations:
bearerAuth
Request Body schema: application/json
patientId
required
string [ 1 .. 64 ] characters
points
required
integer

Positive to earn, negative to redeem

reason
string [ 1 .. 500 ] characters

Responses

Request samples

Content type
application/json
{
  • "patientId": "string",
  • "points": 0,
  • "reason": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Feedback

List appointment feedback (overall rating, free-text comment, per-question ratings)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

doctorId
string [ 1 .. 64 ] characters
patientId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Tasks

List task instances

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

completed
string
Enum: "true" "false"
dueFrom
string <date-time>

Only tasks due at/after this instant

dueTo
string <date-time>

Only tasks due at/before this instant

branchId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Create a task (requires Idempotency-Key header)

Authorizations:
bearerAuth
Request Body schema: application/json
title
required
string [ 1 .. 200 ] characters
details
string [ 1 .. 2000 ] characters
due
string <date-time>
priority
string
Enum: "HIGH" "MEDIUM" "LOW"
assigneeIds
Array of strings <= 50 items [ items [ 1 .. 64 ] characters ]
branchId
string [ 1 .. 64 ] characters

Defaults to the clinic's first branch

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "details": "string",
  • "due": "2019-08-24T14:15:22Z",
  • "priority": "HIGH",
  • "assigneeIds": [
    ],
  • "branchId": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Mark a task complete

Mirrors the in-app completion flow: tasks with approvalRequired stay pending approval (approved=false) after completion; approval itself remains staff-only. Completing an already-completed task is a no-op returning the current state.

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Inventory

List inventory items

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters

Only items stocked in a storage of this branch

belowMin
string
Value: "true"

Only items whose stock amount is below their minimum threshold

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Fetch one inventory item

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

List suppliers

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

List inventory orders

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

status
string
Enum: "CREATED" "CANCELED" "ACCEPTED" "CONFIRMED" "IN_PROGRESS" "IN_TRANSIT" "COMPLETED"
supplierId
string [ 1 .. 64 ] characters
branchId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Create a purchase order (requires Idempotency-Key header)

Creates a PURCHASE order in CREATED status against a supplier. Line totals default to quantity × the item's catalog price when no unit price is given. Receiving stock stays clinic-side.

Authorizations:
bearerAuth
Request Body schema: application/json
supplierId
required
string [ 1 .. 64 ] characters
branchId
required
string [ 1 .. 64 ] characters
required
Array of objects [ 1 .. 200 ] items
notes
string [ 1 .. 2000 ] characters

Responses

Request samples

Content type
application/json
{
  • "supplierId": "string",
  • "branchId": "string",
  • "items": [
    ],
  • "notes": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Fetch one inventory order with its lines

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Update a purchase order status (supplier-side transitions only)

Only CONFIRMED and IN_TRANSIT may be set by an integration; COMPLETED (receiving, which affects stock) and CANCELED remain clinic-side and are rejected with 403.

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters
Request Body schema: application/json
status
required
string
Enum: "CREATED" "CANCELED" "ACCEPTED" "CONFIRMED" "IN_PROGRESS" "IN_TRANSIT" "COMPLETED"

Responses

Request samples

Content type
application/json
{
  • "status": "CREATED"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Bookkeeping

List expenses (from/to required, ≤366 days)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

mainType
string
Enum: "COST_OF_REVENUE" "OPERATING_EXPENSES" "TAX" "OTHER"
branchId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

List incomes (from/to required, ≤366 days)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

List treasury transactions (from/to required, ≤366 days)

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

from
string <date-time>
to
string <date-time>
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

treasuryId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

List treasuries

Authorizations:
bearerAuth
query Parameters
cursor
string <= 500 characters

Opaque cursor from a previous page

limit
integer [ 1 .. 100 ]

Page size, 1-100 (default 25)

updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

branchId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Analytics

Revenue aggregates (invoiced/paid/pending + by payment type)

Authorizations:
bearerAuth
query Parameters
from
string <date-time>
to
string <date-time>
branchId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Appointment counts by status + no-show rate

Authorizations:
bearerAuth
query Parameters
from
string <date-time>
to
string <date-time>
branchId
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Treatment counts by status + top procedures

Authorizations:
bearerAuth
query Parameters
from
string <date-time>
to
string <date-time>

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Exports

Start a bulk NDJSON export (requires Idempotency-Key header)

Requires the read scope of the exported resource; serialized rows apply the same PII tiers as the list routes (e.g. patients without patients:read.pii export masked). Capped at 50,000 rows — larger datasets must be windowed with updatedAfter. v1 runs the export inline and responds when the file is ready; poll GET /exports/{id} for the download URL.

Authorizations:
bearerAuth
Request Body schema: application/json
resource
required
string
Enum: "patients" "appointments" "invoices" "payments" "treatments"
updatedAfter
string <date-time>

Only return records updated strictly after this instant (delta sync)

Responses

Request samples

Content type
application/json
{
  • "resource": "patients",
  • "updatedAfter": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Fetch export status and download URL

Authorizations:
bearerAuth
path Parameters
id
required
string [ 1 .. 64 ] characters

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Events

List domain events for this clinic (granted event types only) — reconciliation after downtime; ?type=, ?from/?to, cursor pagination

Authorizations:
None

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string"
}

Fetch a single event by id (evt_… id from a webhook envelope, without the evt_ prefix, or the raw row id)

Authorizations:
None

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}