Scheduling
Public booking page
The no-login link patients use to book themselves, and what it takes to make it work.
Every org gets a public booking page at /book/your-org-slug — find the link (with a copy button) at the top of Settings → Scheduling. Share it from your website or anywhere else patients look for you; anyone with the link can browse services, providers, and open times without an account.
Booking access in Settings → Scheduling can turn this public channel off for the whole practice without deleting services, facilities, provider hours, or the link itself.
Each facility row also has its own public link with that facility preselected, useful when you share different links from location-specific pages or profiles.
What shows up
A service only appears if it's offered at a facility that also has an assigned, bookable provider — and that facility and provider both need weekly hours set, or no times will ever show. The page picks whichever eligible provider is actually free for a given time automatically; a visitor doesn't choose a specific practitioner.
Picking a date and time
Visitors pick a date from a month calendar — days with open slots are marked with a dot, and past or fully-booked days can't be selected. A Next available button jumps straight to the soonest bookable date and time, skipping the need to page through empty months by hand.
The same works on the plain link: add ?date=next to your booking link, along with &service=… if you like, and it opens already showing the first open time.
Why a chosen time is held, not booked instantly
Picking a time reserves it for a few minutes while the visitor creates an account or logs in — long enough to do that, not so long that an abandoned booking locks up real availability. If the hold expires first, the page says so plainly and lets them pick again; it's never left looking booked when it isn't.
Note
Creating an account to confirm
Confirming a held time requires the visitor to create an account or log in. First-time visitors get a patient record and portal account created automatically from the name/email they sign up with; a returning patient just signs in. Either way, the appointment lands already attached to a real patient record.
Note
The account's email is verified in the background (a verification email goes out on signup), but verification never blocks booking, signing in, or the patient record itself — staff can see whether an account's email is verified from the patient page's "Patient calendar access" panel.
After booking
The confirmation screen shows the facility's address and any arrival/parking notes, plus links to any forms the service requires — the same forms you'd otherwise hand a new patient separately. A signed-in patient can also find these under "Forms to complete" on their own appointment calendar at any time, not just right after booking.
Put booking on your own website
In Settings → Scheduling → Online booking, open the ⋮ menu next to your booking link (or next to a location or a specific service under Share a specific service) and choose Get this on your website. A short guide lets you pick what to show (everything, one service, one location, or the next available time), the look, and the height, then gives you the code with where-to-paste steps. The same menu has Share link and Open booking page.
Instead of linking out, you can show the booking flow directly on a page of your own site. The code the guide gives you is like this; you can also write it by hand. Paste it into any page that accepts HTML (a WordPress custom-HTML block, a Squarespace or Wix code block, or a plain HTML file), using your own org slug from the booking link:
<script src="https://…/embed.js" async></script>
<goji-booking org="your-org-slug"></goji-booking>Put the <script> line once per page. The booking flow runs on Goji's own address inside the frame, so what a visitor types never reaches your page. Add service="…" or facility="…" (the ids from a facility's booking link) to pre-select one, date="next" to open on the soonest bookable time (handy for a "Book next available" button), and the same look attributes as an embedded form: accent, background, radius, font, theme and height. See Embedding a form for what each one accepts.
Note
Your page can listen for goji:ready and goji:booking-confirmed events on the <goji-booking> element (for analytics or a thank-you message). They never include anything the visitor typed. To limit abuse, a practice can only have a limited number of unconfirmed holds at once.