How the widget adapts
One widget, two flows. The right UI is picked from the doctor's system type — no configuration needed.
The Medos Booking widget supports two booking system types. Which one the patient sees depends on the doctor they choose — you never pick manually.
A third value you may see in the API
Doctors configured before packages became a workspace-level feature can still
carry SCHEDULED_WITH_PACKAGES. The widget treats it as SCHEDULED; there is
no separate flow, and nothing for you to handle.
The two system types
SCHEDULED
The classic appointment flow. Patients see:
- A doctor list (unless
calendarOnlyis enabled) - A calendar with available dates
- Time slots for the selected date
- A one-time code sent to the patient's phone or email, then patient details
- A confirmation screen with the appointment ID
If the workspace has session packs enabled and the patient is eligible for a pack with the selected doctor, the pack picker appears in this same flow — it's an add-on, not a separate system type.
QMS (Queue Management System)
Token-based, live queue booking. Patients see:
- A queue stats banner above the calendar (current queue length, approximate wait time)
- A shorter flow — no time-slot picking
- A confirmation screen with a token number, queue position, and estimated wait time
How the widget decides
The flow follows how each doctor is set up in your Medos dashboard. The widget reads that configuration when the patient picks a doctor and renders the matching flow.
You don't pass anything to control this, and the patient is never asked "queue or scheduled?".
Mixed workspaces work out of the box
A clinic can run both flows at once. Dr. Smith might take walk-ins through the queue while Dr. Patel runs scheduled appointments — one embed handles both, routing per doctor.
Confirmation payload differs per flow
Both flows call onSuccess with the same object. Which fields are set is what
differs:
SCHEDULED→appointmentId(whether or not a session pack was redeemed — the pack usage is recorded server-side).QMS→queueToken, a full object with the token number, queue position, and wait time.
See onSuccess for the exact shape.