Skip to main content

Scheduling

Administer your organisation’s scheduling configuration with an API key instead of the admin interface. You can list and cancel scheduled appointments, manage appointment types and their reminders, and configure each doctor’s recurring availability rules. All endpoints are scoped to the organisation that owns the API key. UIDs that belong to another organisation are treated as not found.

Permissions

Scheduling endpoints are gated by two permissions:
  • scheduling:read — required for all read (GET) endpoints.
  • scheduling:admin — required for all write endpoints (POST, PATCH, DELETE).
A key with scheduling:admin is not automatically granted scheduling:read; add both if you need to read and write. Contact your RxScale account manager to adjust permissions. All requests authenticate with the X-API-Key header. See Authentication for details.

Appointments

List Appointments

Returns a paginated list of scheduled appointments for the organisation. Required permission: scheduling:read
page
integer
default:"0"
Page number (0-indexed)
limit
integer
default:"50"
Number of appointments per page
doctor_uid
string
Filter appointments by doctor UID
patient_uid
string
Filter appointments by patient UID
status
string
Filter by appointment status. One of held, confirmed, cancelled, expired, completed, no_show, or all. When omitted, the default server-side filtering applies.
from
integer
Filter appointments starting at or after this Unix timestamp
to
integer
Filter appointments starting at or before this Unix timestamp. Must be greater than from when both are supplied.

Example Request

Response

Response Fields

Cancel an Appointment

Cancels a scheduled appointment and records the supplied reason. Required permission: scheduling:admin
meeting_uid
string
required
The scheduled meeting UID
reason
string
required
Reason for cancelling the appointment (must not be empty)

Example Request

Response

Appointment Types

An appointment type defines a bookable kind of meeting (duration, hold behaviour, room and rebooking strategy).

List Appointment Types

Required permission: scheduling:read

Example Request

Response

Create an Appointment Type

Required permission: scheduling:admin
name
string
required
Display name (1–255 characters)
meeting_type
string
required
Meeting type. One of CONSULTATION, FOLLOW_UP, INITIAL, REVIEW, ON_DEMAND.
duration_minutes
integer
required
Appointment duration in minutes (1–1440)
hold_ttl_seconds
integer
required
How long a tentative hold survives before expiring, in seconds (1–86400)
booking_min_notice_minutes
integer
default:"0"
Default minimum notice required before patients can book this appointment type, in minutes. Doctor-specific settings can override this value.
cancellation_min_notice_minutes
integer
default:"0"
Minimum notice required to cancel, in minutes (≥ 0)
rebooking_min_notice_minutes
integer
default:"0"
Minimum notice required to rebook, in minutes (≥ 0)
room_strategy
string
required
Room allocation strategy. One of persistent_per_provider, per_appointment.
rebooking_mode
string
required
Rebooking mode. One of same_doctor_only, any_doctor_same_organisation.
doctor_assignment_mode
string
default:"all_available_doctors"
Controls which doctors can offer this appointment type. Use all_available_doctors to include every doctor with availability, or selected_doctors_only to require an active doctor-specific setting.
allow_patient_rebooking
boolean
default:"false"
Whether patients may rebook their own appointments of this type
active
boolean
default:"true"
Whether the appointment type is bookable

Example Request

Returns 201 Created with the created appointment type (same shape as a list entry).

Update an Appointment Type

Partial update — only the fields you send are changed. All body fields are optional and accept the same values and ranges as on create. Required permission: scheduling:admin
appointment_type_uid
string
required
The appointment type UID
name
string
Display name (1–255 characters)
meeting_type
string
One of CONSULTATION, FOLLOW_UP, INITIAL, REVIEW, ON_DEMAND
duration_minutes
integer
Appointment duration in minutes (1–1440)
hold_ttl_seconds
integer
Hold lifetime in seconds (1–86400)
booking_min_notice_minutes
integer
Default minimum booking notice in minutes (≥ 0)
cancellation_min_notice_minutes
integer
Minimum cancellation notice in minutes (≥ 0)
rebooking_min_notice_minutes
integer
Minimum rebooking notice in minutes (≥ 0)
room_strategy
string
One of persistent_per_provider, per_appointment
rebooking_mode
string
One of same_doctor_only, any_doctor_same_organisation
doctor_assignment_mode
string
One of all_available_doctors, selected_doctors_only
allow_patient_rebooking
boolean
Whether patients may rebook their own appointments of this type
active
boolean
Whether the appointment type is bookable

Example Request

Returns 200 OK with the updated appointment type.

Delete an Appointment Type

Required permission: scheduling:admin
appointment_type_uid
string
required
The appointment type UID

Example Request

Returns 204 No Content on success.

Reminders

Reminders are configured per appointment type and notify a recipient role a fixed number of minutes before the appointment starts.

List Reminders

Required permission: scheduling:read
appointment_type_uid
string
required
The appointment type UID

Example Request

Response

Response Fields

Create a Reminder

Required permission: scheduling:admin
appointment_type_uid
string
required
The appointment type UID
recipient_role
string
required
Who is notified. One of patient, doctor, admin.
minutes_before
integer
required
Minutes before the appointment to send the reminder (1–86400, i.e. up to 60 days)
send_email
boolean
default:"false"
Whether to send an email
send_sms
boolean
default:"false"
Whether to send an SMS
active
boolean
default:"true"
Whether the reminder is active

Example Request

Returns 201 Created with the created reminder (same shape as a list entry).

Update a Reminder

Partial update — only the fields you send are changed. Required permission: scheduling:admin
appointment_type_uid
string
required
The appointment type UID
reminder_uid
string
required
The reminder UID
recipient_role
string
One of patient, doctor, admin
minutes_before
integer
Minutes before the appointment to send the reminder (1–86400)
send_email
boolean
Whether to send an email
send_sms
boolean
Whether to send an SMS
active
boolean
Whether the reminder is active

Example Request

Returns 200 OK with the updated reminder.

Delete a Reminder

Required permission: scheduling:admin
appointment_type_uid
string
required
The appointment type UID
reminder_uid
string
required
The reminder UID

Example Request

Returns 204 No Content on success.

Availability Rules

Availability rules define a doctor’s recurring weekly bookable windows. Times are expressed as minutes from midnight (for example, 540 is 09:00 and 1020 is 17:00).

List Availability Rules

Required permission: scheduling:read
doctor_uid
string
required
The doctor UID

Example Request

Response

Response Fields

Create an Availability Rule

Required permission: scheduling:admin
doctor_uid
string
required
The doctor UID
weekday
integer
required
Day of week (0 = Monday … 6 = Sunday)
start_time
integer
required
Start of the window, in minutes from midnight (0–1440)
end_time
integer
required
End of the window, in minutes from midnight (0–1440)
buffer_minutes
integer
default:"0"
Buffer between appointments, in minutes (≥ 0)
valid_from
integer
Optional start of validity (Unix timestamp)
valid_until
integer
Optional end of validity (Unix timestamp)
active
boolean
default:"true"
Whether the rule is active

Example Request

Returns 201 Created with the created availability rule (same shape as a list entry).

Update an Availability Rule

Partial update — only the fields you send are changed. To remove an existing validity bound, send the corresponding clear_* flag rather than a value. Required permission: scheduling:admin
doctor_uid
string
required
The doctor UID
rule_uid
string
required
The availability rule UID
weekday
integer
Day of week (0 = Monday … 6 = Sunday)
start_time
integer
Start of the window, in minutes from midnight (0–1440)
end_time
integer
End of the window, in minutes from midnight (0–1440)
buffer_minutes
integer
Buffer between appointments, in minutes (≥ 0)
valid_from
integer
Set the start of validity (Unix timestamp)
valid_until
integer
Set the end of validity (Unix timestamp)
active
boolean
Whether the rule is active
clear_valid_from
boolean
default:"false"
Clear the existing valid_from bound (set it to null)
clear_valid_until
boolean
default:"false"
Clear the existing valid_until bound (set it to null)

Example Request

Returns 200 OK with the updated availability rule.

Delete an Availability Rule

Required permission: scheduling:admin
doctor_uid
string
required
The doctor UID
rule_uid
string
required
The availability rule UID

Example Request

Returns 204 No Content on success.

Availability Date Overrides

Date overrides set a doctor’s availability for a specific calendar date, replacing their recurring weekly rules on that date. Each override is either a time window (custom hours that day) or a day off (no bookable slots that day). On any date that has at least one override, the doctor’s recurring rules are suppressed and only the overrides apply.
  • date is the UTC-midnight Unix timestamp of the calendar date — a multiple of 86400 (for example, 1749427200 is 2025-06-09 00:00:00 UTC).
  • start_time / end_time are minutes from midnight (for example, 480 is 08:00 and 720 is 12:00). For a day off, both are null.

List Date Overrides

Required permission: scheduling:read
doctor_uid
string
required
The doctor UID
from
integer
Only return overrides on or after this UTC-midnight epoch
to
integer
Only return overrides on or before this UTC-midnight epoch
page
integer
default:"0"
Zero-indexed page number
limit
integer
default:"50"
Page size (maximum 200)

Example Request

Response

The list is paginated, and a single request may span at most ~6 months. Omit both from and to for “today onward”; pass one to anchor the window, or both to choose a range — a span wider than ~6 months is trimmed from the to end. totalRegistries is the number of overrides matching the (clamped) window and totalPages is ceil(totalRegistries / limit).

Response Fields

Create a Date Override

Required permission: scheduling:admin
doctor_uid
string
required
The doctor UID
date
integer
required
UTC-midnight epoch of the calendar date (a multiple of 86400)
day_off
boolean
default:"false"
If true, the date is fully unavailable — omit start_time/end_time
start_time
integer
Start of the window, in minutes from midnight (0–1440). Required unless day_off is true
end_time
integer
End of the window, in minutes from midnight (0–1440). Required unless day_off is true
buffer_minutes
integer
default:"0"
Buffer between appointments, in minutes (≥ 0)

Example Request — custom hours

Example Request — day off

Returns 201 Created with the created date override (same shape as a list entry). Adding a day off clears any existing windows on that date, and adding a window clears an existing day-off marker.

Update a Date Override

Partial update — only the fields you send are changed. Send day_off: true to turn the date into a day off (clearing its window). Required permission: scheduling:admin
doctor_uid
string
required
The doctor UID
override_uid
string
required
The date override UID
date
integer
UTC-midnight epoch of the calendar date (a multiple of 86400)
day_off
boolean
default:"false"
If true, clear the date’s window and mark it a day off
start_time
integer
Start of the window, in minutes from midnight (0–1440)
end_time
integer
End of the window, in minutes from midnight (0–1440)
buffer_minutes
integer
Buffer between appointments, in minutes (≥ 0)

Example Request

Returns 200 OK with the updated date override.

Delete a Date Override

Required permission: scheduling:admin
doctor_uid
string
required
The doctor UID
override_uid
string
required
The date override UID

Example Request

Returns 204 No Content on success. The date returns to the doctor’s recurring availability.