Appointments
Run a practice booked by the hour: services, practitioners, working hours and exceptions, deposits and cancellation fees, intake, reminders, and your daily schedule.
Appointments are for work you sell as someone’s time — a massage, a treatment, a reading, a consultation. A client picks a service, picks an hour with a specific practitioner, pays, and gets a confirmation with a link to manage the booking. You get a schedule.
Unlike experiences, which sell a fixed-capacity session to a group, an appointment reserves one person’s exclusive time. That difference drives everything below: a session can hold twelve people, an hour can hold one.
Appointments is a platform type. An organization is either an appointments practice or it isn’t, and switching it on is done for you during onboarding — you won’t find a toggle. Once it’s on, Schedule appears in your top navigation.
What do I need before clients can book?
Four things, in this order. Only the last is self-serve today.
- Your organization timezone. Every hour a client sees, every reminder, and every line on your schedule is rendered in it. Set it under Settings → Organization. Get this wrong and the whole system is politely, consistently wrong.
- Stripe connected. Every appointment is a paid booking. There is no free-booking path — a service priced at zero can be created but cannot be booked online, because checkout is a Stripe session and Stripe rejects a zero amount. Set this up under Settings → Organization → Payouts; see Payments & Payouts.
- Your practice configured — locations, practitioners, working hours, services, intake questions, reminders. This is currently done with you rather than by you: there is no settings screen for it yet. Everything below describes the decisions you’ll be asked to make, so come to that conversation knowing what you want.
- Your booking link shared. Once configured, your public page is live at
/book/your-practice-slug.
How does the calendar actually decide what’s available?
Worth understanding, because it explains most surprises.
A service says what it needs — one therapist, or one therapist and one room. Each practitioner and each asset is a resource, and a resource can do certain kinds of work (its skills). An hour is offered only when every resource the service needs is free for the whole of it.
Availability is built from three layers, in order:
- Working hours — a repeating weekly pattern per resource. “Mondays 9–5, Saturdays 10–2.”
- Exceptions — dated changes that beat the weekly pattern. A blackout removes time (holiday, training day). An override replaces it (“this Saturday, 12–4 instead”).
- Existing bookings — anything already reserved.
Two things are easy to trip over:
Buffers are invisible to the client and real to your calendar. A service can carry a buffer before and after — travel, setup, laundry. A 60-minute massage with a 30-minute buffer after occupies 90 minutes of the practitioner’s day but shows the client a 60-minute appointment. Your schedule shows the appointment; the calendar blocks the buffer.
The booking cutoff is per service. “No bookings within 2 hours” is a property of the service, not the practice, so a mobile visit needing travel time can close earlier than a studio session.
Working somewhere as well as somewhere else
A practitioner can have hours at a location and hours that aren’t tied to one. Working hours and exceptions can each be scoped to a location, and an unscoped rule serves everything.
The rule is: a service at a location can only be booked in hours that are either unscoped or scoped to that location. So “Tuesdays and Thursdays at the studio, Mondays and Wednesdays mobile” is expressed as location-scoped weekly windows, and mobile work simply doesn’t appear on studio days.
How do services work?
A service is what a client picks. It carries:
- Duration — the appointment length the client sees.
- Buffers — before and after, invisible to the client (above).
- Price — in cents.
18000is $180.00. - Deposit —
none(pay in full at booking),fixed(a set amount), orpercentage. - Booking cutoff — how close to the start a client can still book.
- Cancellation window — how much notice counts as a proper cancellation.
- Late-cancellation fee — what you keep inside that window (below).
- Requirements — which resource types, and how many of each.
- Whether a client may request a specific practitioner.
Lifecycle. A service is draft, active, hidden, or archived. Only an active service can be booked; draft and hidden are invisible to clients but can still be previewed internally, so you can build a service and its hours before anyone can reach it. Archived retires it for good.
Services are archived rather than deleted, so an old appointment always still knows what it was for — and so does your reporting.
What happens with the money?
Deposits. If a service takes a deposit, the client pays the deposit at booking and the balance in person. The balance is shown on your schedule, per appointment and totalled for the day. Nothing else in the system tracks whether you collected it — there’s no “paid in full” flag yet, so the schedule is what stands between a deposit and an unpaid balance.
Cancellations. A client cancelling outside the window is refunded in full, automatically. Inside the window, the fee your service specifies is withheld and the rest refunded:
| Fee type | What you keep |
|---|---|
none | Nothing — always a full refund |
forfeit_deposit | Whatever they paid at booking |
percentage | That share of the service price |
fixed | That many cents |
The fee is always clamped to what was actually paid. A policy that keeps “100% of the price” cannot withhold more than a 25% deposit if a deposit is all the client handed over.
The client sees exactly what cancelling will cost before they confirm it, computed by the same rule that will run.
If a refund fails, the cancellation still completes: the hour is released and the booking is cancelled, because the alternative is a client who can’t cancel and an hour lost from your calendar. The refund lands in an internal review queue for a human, and the client is told the refund is on its way rather than that it has arrived. You may prefer to phone them and rebook rather than refund — that choice is deliberately left to you.
What does the client see?
Booking. Service, then time, then their details, then Stripe. Times are shown in your practice’s timezone with the zone named, so a client booking from another state sees your hours, not theirs.
A ten-minute hold. The slot is reserved when they submit, and they go straight to payment. If they abandon checkout, the hold lapses and the hour comes back. Two people racing for the same hour: one gets it, the other is returned to a freshly loaded list rather than a slot that’s already gone.
A confirmation email with a calendar attachment. If they reschedule, the same calendar event moves rather than a second one appearing.
A manage link. No account, no password — the link in their email is the credential. From it they can view, cancel, or reschedule. Tell clients to keep the email; there is no “forgot my booking” flow, and you cannot look the link up for them, because we don’t store it.
A “book again” link in the confirmation, which is what lets us remember their details next time.
What do we remember about a client, and when?
Intake questions come in two kinds:
- Per-visit — asked fresh every time. “Anything we should know today?”
- Remembered — asked once and offered back next time. Their address, most usefully.
A question can be flagged as the appointment’s location, which is how mobile practices work: the client’s address becomes where the appointment happens, and it’s what shows on your schedule and in your reminders.
Two rules protect that, and both matter for a practice that visits people at home:
Knowing an email is not enough to recall an address. Remembered answers unlock only for someone holding the “book again” link from their own inbox. Without it, a returning client just fills the form in again.
Taking one appointment somewhere else does not move their address. A one-off — at work, at a friend’s — applies to that visit only. Changing what’s remembered is a separate, explicit choice they have to tick.
How do reminders work?
Two layers.
Built in, always on: the confirmation email with its calendar attachment, sent when payment clears.
Yours, configured: a ladder of templates. Each has a channel (email or SMS), a trigger, and — for time-relative ones — an offset. “SMS, 24 hours before” is trigger scheduled, offset -1440. Triggers are booked, scheduled, cancelled, rescheduled, and no_show.
Templates can be scoped to one service or apply to all of them, and addressed to the client or to the practitioner — a “you have a new booking” note to staff is the same machinery.
Available placeholders: {{customer_name}}, {{service_name}}, {{practice_name}}, {{resource_name}}, {{when}}, {{manage_url}}. A placeholder we can’t fill is refused when you save rather than shipped as a blank — a typo would otherwise reach every client that template covers.
Things worth knowing:
- Each template sends once per appointment. You cannot double-remind someone by running anything twice.
- A rescheduled appointment is reminded again about its new time, and the record of the old reminder is kept.
- A reminder more than 6 hours overdue is skipped, not sent late. A “tomorrow at 9” text arriving the morning of is worse than silence.
- SMS needs consent. Clients tick a box at booking; absent is not consent, and we will not text without it. This is a legal requirement, not a preference — the wording on the booking form is doing real work, so don’t ask for it to be pre-ticked.
- SMS is billed per segment. Long messages send as several. You’ll be warned when you save one.
Google Calendar
Connecting a practitioner’s Google Calendar writes their VendorStreet appointments into it — created, moved when rescheduled, removed when cancelled.
It is one-way. Events already in their Google Calendar do not block bookings here. If a practitioner keeps personal commitments in Google and expects VendorStreet to route around them, it won’t. Until reading is supported, time off belongs in exceptions, where the availability engine can see it.
We ask only for permission to manage events, not to read the whole calendar, and the connection is stored encrypted. If it breaks — a revoked password, a removed app — the connection goes into an error state and needs reconnecting; appointments are unaffected while it’s down.
Running your schedule
Schedule in the top navigation, and where signing in lands you. Day is the default; Week shows the same thing Monday to Sunday, grouped by day. Times are always in your practice’s timezone — the one your clients booked against — so travelling doesn’t shift your day under you.
Each appointment shows the time, the client, the service, where it happens, which practitioners are on it, their phone and email as working links, everything the client answered on your intake form, and any balance still to collect. The day is totalled at the top.
- Holds don’t appear. Someone mid-checkout is not an appointment, and planning around bookings that mostly never happen is worse than not seeing them.
- Cancellations are hidden unless you ask for them, and never counted in the day’s total.
Cancelling for a client
Cancel on the appointment. You’re shown what was paid, whether this is inside your cancellation window, and — when your policy would withhold a fee — two choices side by side:
- Apply the cancellation policy, which keeps the fee your service specifies.
- Waive the late-cancellation fee, which refunds in full.
The waiver is yours to give and is never the default; the record still says the cancellation was late, because it was. Both figures are computed by the same rule that runs when you confirm, so the number you quote on the phone is the number that goes back.
If the refund fails, you’re told so plainly rather than being shown a success — the appointment is still cancelled and the hour still released, and the outstanding refund goes to an internal queue for a human to finish.
The note you add is for your own records. It isn’t sent to the client.
Rescheduling for a client
Reschedule, then pick from real availability — the same engine your booking page uses. Your own booking cutoff doesn’t apply here: someone ringing at 8am for a 9am slot is a booking, not a policy violation. Neither does your cancellation window, which exists to protect you from short notice and is yours to absorb.
Nothing is charged or refunded. The client gets the standard “your appointment has moved” email and an updated calendar invitation that moves the existing event rather than adding a second one, and any reminders are re-armed for the new time.
Marking a no-show
Mark no-show, available once the appointment has been and gone. It records that the client didn’t turn up, and who recorded it.
No money moves, and none can. We hold no card for your clients, so a no-show cannot be billed after the fact. Whatever was paid at booking — a deposit, the whole fee — stays with you; a balance you were going to take in person simply never arrives, so the appointment drops out of the day’s balance to collect. If missed appointments should cost something, that has to be set up in advance: a deposit plus a cancellation window on the service.
The hour stays on your calendar. You were there, so it still counts as an appointment; releasing it would let the slot be rebooked in the past.
Marked the wrong client? Undo no-show. Both the mark and the correction stay on your record.
Taking a booking over the phone
Book by phone, top right. Pick the service, optionally name a practitioner — you can, even on a service where clients can’t choose online — then a day and a time from real availability. Add the client’s name, email and phone, and answer whatever your intake form asks.
Nothing is charged. The client pays at the visit, so the whole fee shows as due on the day, exactly like an unpaid balance. There’s no card on file and no online payment of any kind.
The confirmation email is a choice. Tick it and the client gets the same confirmation, calendar attachment and manage link an online booking gets — including the ability to move or cancel it themselves. Leave it unticked for the client standing at your desk with the appointment card already in their hand.
The slot is checked at the moment you save it, not when the list was drawn. If a client’s online checkout takes the hour first, you’re told and asked to pick again — the same answer a second client would get. Being the practice doesn’t let you double-book a practitioner.
What still isn’t here
Services, staff, working hours and intake questions are set up through us rather than through a settings screen. So are packages, memberships, gift certificates, recurring appointments, group bookings and waitlists.
Moving from another booking system
We’ve migrated from Amelia and the shape of the work is known: services, categories, practitioners, clients, and appointment history come across.
The one thing that does not survive is historical availability — Amelia never versioned it, so there is no record of what hours were offered last March. Current working hours are re-entered by hand at cutover, which is a good moment to confirm them with each practitioner rather than trusting a dump.
Related
- Payments & Payouts — connecting Stripe, statements, payout timing
- Troubleshooting — paid but no confirmation, reminders not arriving, calendar disconnected
- Reporting — revenue across appointments, markets, and experiences