Public Booking Plugin
Last updated: November 12, 2026
Overview
The Public Booking plugin lets new leads and patients book an appointment from a public link, with no portal account. The visitor picks a service, a location, and a time, then enters their name, date of birth, phone, and email. The plugin books against the same provider and room availability that the Scheduling with Rooms modal offers staff, matches the visitor to an existing chart or creates a new one, holds the room, sends a portal invite, and creates a staff task.
Booking page:
https://<your-instance>.canvasmedical.com/plugin-io/api/public_scheduling/bookingWho should use this plugin
Practices that want new patients to book themselves from a link or a "Book now" button on their website, including practices whose visits need both a provider and a room.
Problem it solves
Canvas's native self-scheduling lives in the patient portal and requires a login, and visits that need a room are coordinated by the Scheduling with Rooms plugin. The Public Booking plugin gives prospective patients a public page that books against provider and room availability together, and hands the booking to staff with a task.
Before you begin
Install the Scheduling with Rooms plugin first. Public Booking reads its room configuration and stores its own settings in the same Custom Data namespace.
In Scheduling Admin, set up the visit types, durations, and room mappings you want to offer.
Make sure each bookable provider has Clinic availability events at the locations where they see patients. An event with no allowed note types allows every visit type.
To text booking confirmations, install the Patient Communications plugin and turn on its confirmation SMS channel in Notifications Admin.
Install the plugin
canvas install public_scheduling --host <your-instance> \
--secret namespace_read_write_access_key=<Scheduling with Rooms read_write key>The namespace_read_write_access_key value is the same key set on the Scheduling with Rooms plugin. After installing, open Online Booking Admin from the provider menu to choose the bookable services and providers.
Configure the booking page
Open Online Booking Admin from the provider menu. Any signed-in staff member can open it, and changes apply to the booking page as soon as they are saved.
Tab | What it sets |
|---|---|
General | Organization name, logo, booking window, and minimum notice |
Booking flow | Step order, the patient time zone picker, provider cards or a dropdown, and add-to-calendar buttons |
Services | Which visit types are bookable and in what order, the name and description patients see, and the visit length |
Locations | Which locations are offered, the address and description shown, and a photo |
Providers | Which staff patients can book, with photo, credentials, a one-line bio, and a full bio |
Pages | The text on every page of the flow, the practice phone number, whether email and a reason for visit are asked, and up to 10 booking questions |
Branding | Colors, font, and an optional faded background image |
Links | A builder for links that open the page with a service, a location, or both already chosen |
Each Pages section has a Preview button that shows unsaved changes against live services, locations, and times. A preview cannot book.
How patients book
Service. The patient picks a visit type.
Location. Only locations that offer the chosen visit type are listed. A location qualifies when a provider has availability there for that visit type and, for a visit type mapped to rooms, one of its rooms does too. The step is skipped when only one location qualifies.
Time. A month calendar highlights dates with openings. Picking a date lists its times grouped into morning, afternoon, and evening.
Details. The patient enters their name, date of birth, phone, email, and any reason for visit or booking questions you turned on.
Review. The patient checks the appointment and their details. Nothing is booked until they confirm.
Confirmation. The page offers an "Add to Google Calendar" link and an
.icsdownload for Apple Calendar and Outlook.
If Location is placed before Service in Booking flow, the same rules run the other way: a location lists only the services it offers.
What happens after a booking
Chart. The booking attaches to an existing chart only when exactly one active patient has the same first name, last name, and date of birth and a matching phone or email. Otherwise a new chart is created. A name and birthdate collision flags the task for staff review.
Appointment and room. The appointment is booked on the provider's calendar, and when the visit type uses a room, the room event is created and linked the same way Scheduling with Rooms links it. Canceling or rescheduling in Scheduling with Rooms releases or moves the room as usual.
Reason for visit. A reason the patient entered is added to the visit note as a Reason for Visit command, left uncommitted for the provider.
Portal invite. A portal invite is sent when the patient has an email and has not registered.
Staff task. Each booking creates a task titled "Online booking: ..." with the reason, booking question answers, and any review note.
If the time was taken. When a new chart's time is taken before the appointment is booked, staff get a task to call the patient instead.
Booking links for a specific service or location
A link can choose the service, the location, or both for the patient:
https://<your-instance>.canvasmedical.com/plugin-io/api/public_scheduling/booking?appointment_type=<note type code>&location=<practice location id>appointment_typeis the visit type's note type code, as listed on the Services tab.locationis the practice location id, with or without dashes.A value set by the link is chosen for the patient, and that step leaves the flow, so the patient cannot change it. The other steps run as usual.
A value that is not offered online (unknown, hidden on the Services or Locations tab, or not a scheduleable visit type) is ignored, and so is a location that does not offer the chosen service. The patient then chooses that step as usual.
A link with neither parameter opens the full flow.
Build a link
Open Online Booking Admin and go to the Links tab.
Pick a service, a location, or both.
Click Copy, or Open to try the link in a new tab.
Links are built from saved settings. A link built from unsaved changes works once they are saved.
Add booking to your website
Add a "Book now" button or link on your website that opens the booking link in a new tab. The booking page cannot be shown in an iframe on another website: Canvas only allows its own pages to frame plugin pages.
Protections on the public page
An hourly limit on bookings per IP address, set by
RATE_LIMIT_PER_HOUR, and a higher limit on page reads.Optional CAPTCHA with Cloudflare Turnstile or Google reCAPTCHA.
A hidden honeypot field that silently discards automated submissions.
Every input is validated, and the chosen time is rechecked before booking.
Booking stays closed until at least one visit type is offered and at least one provider is bookable.
The admin pages require a staff session. The public page never changes settings.
Plugin variables
Variables marked * can also be set in Online Booking Admin, which takes precedence when its field is filled in.
Variable | Meaning |
|---|---|
| Note type codes bookable online, comma-separated, in display order. Each entry is |
| Optional comma-separated practice location ids to limit the page to. |
| Role codes whose staff are bookable until a provider list is saved on the Providers tab. |
|
|
| How far ahead times are offered. Default 60. |
| Minimum hours between now and a bookable start. Default 24. |
| Bookings per IP address per hour. Default 10. |
|
|
| The CAPTCHA provider's keys. CAPTCHA turns on once all three CAPTCHA variables are set. |
| Optional team id for the staff tasks. |
|
|
| Shown on the first page as "Welcome to" followed by the name. Unset, the page reads "Book an appointment". |
| Tap-to-call number shown when booking is closed or no location offers the chosen service. |
| An |
| Hex colors for buttons, their hover state, and highlighted backgrounds and their text. |
| CSS font-family list. |
| A Google Fonts CSS URL that loads the font in |
| The Scheduling with Rooms namespace read_write key. |
Troubleshooting
Issue | What to check |
|---|---|
The page says online booking is unavailable. | At least one service must be selected on the Services tab and at least one provider on the Providers tab. |
A service has no locations. | A provider needs a Clinic availability event at that location that allows the visit type and occurs within the booking window. For a visit type mapped to rooms, one of its rooms needs availability at that location too. |
A location shows no times. | Check provider and room availability, existing appointments, minimum notice, and the booking window. |
A booking link still shows the service or location step. | The value in the link is not offered online, or the location does not offer the chosen service. Rebuild the link from the Links tab. |
A location shows no address. | Billing addresses are never shown. Add an address on the Locations tab. |
The booking page does not load inside our website. | The page cannot be framed by another site. Use a button or link that opens it in a new tab. |
Patients are not receiving confirmation texts. | Turn on the confirmation SMS channel in the Patient Communications plugin's Notifications Admin. |