Skip to main content
Appointments is where you take bookings. It handles one-to-one appointments (a haircut, a consultation, a viewing) and classes, where several people share a seat pool in the same session. Bookings arrive two ways: a client books themselves on your public booking page, or you add one by hand from the calendar. Both produce the same booking record and the same reminders on WhatsApp. On a Pay before booking service, both routes take payment. A single booking you add by hand is held for two hours and the client is messaged a pay link, unless you tick Payment taken in person or leave it at Pending. Bookings made from the mobile app, the API and the AI agent are held and charged too. Several slots at once, or a repeating series, confirm without payment.
Services are set up under Offerings, not under Appointments. This trips up almost everyone.The Appointments hub manages bookings, staff, availability and the booking page. The service itself (its duration, buffers, price, payment mode and reminder times) is edited at Offerings → Services. See Services for what each setting does and Offerings for the wider catalogue.

The pieces

Services

What you sell time for. A service carries the duration, buffers, notice rules, price and payment mode. Edited under Offerings.

Staff and availability

Who can be booked, their working hours in their own timezone, and one-off time off or blocks.

Booking page

Your public page. Clients pick a service, a staff member and a time without logging in.

Classes

Fixed sessions with a capacity and an optional waitlist. Each seat is still a booking.

Payments

Charge nothing, charge after the appointment, or hold the slot until the client pays.

Calendar and Zoom sync

Push bookings to Google Calendar, pull external events back as busy time, and mint Zoom links.

Custom domain

Serve the booking page on your own domain. Plan-gated.

Meetings

The older scheduler. Same bookings underneath.
The Appointments hub has four working views:
  • Bookings: a searchable, filterable list of every booking, split into Upcoming and Past.
  • Calendar: View and manage all bookings, classes and blocked time in one place.
  • Batches: Group clients and enrol them into classes in one action.
  • Staff: Manage staff members, their hours and the services they offer.
Batches is the one that isn’t always there. Owners and admins always see it. Anyone else needs a custom role with the Manage class batches permission, and it’s covered in Classes. Alongside the four views sit the hub’s settings, where the booking page branding, the booking form and the custom domain live.

The Bookings list

Bookings has two tabs, Upcoming and Past, and each label carries a live count. Upcoming means a booking that is still going to happen: confirmed, pending, or awaiting payment, and still in the future. A booking waiting on a payment is upcoming, not past. Past is everything else: cancelled, completed, no-show, expired, payment-failed, and anything whose time has simply gone by. Above the table sit a search box and four dropdowns.
  • Search by client, service or staff matches the client’s name, email or phone, the service name and the staff member’s name.
  • All services, All staff, All statuses and All sources narrow the list.
The three sources are Automation, Booking page and Staff, so you can see at a glance what a flow booked and what a client booked themselves. A Clear filters button appears as soon as anything is set. A search that matches nothing reads No bookings match these filters. The list shows 20 rows at a time; switch it to 50 or 100 next to the pager at the bottom. The Bookings tab of Appointments with the Upcoming and Past tabs highlighted, the search and filter dropdowns, and a list of past bookings
Every control writes to the address bar, so a filtered view is just a URL: bookmark “this week’s no-shows” or paste the link to a teammate and they see the same list.
The counts on the tabs honour whatever filters are set, and they are scoped the same way the rows are. A teammate without View team appointments sees only their own bookings, in the counts as well as in the list. See Roles and permissions.

How a booking comes together

A service says how long it takes and how far ahead you will accept it. A staff member says which hours they work and which services they offer. DMLY combines the two and shows only the times that survive every check:
  • The service’s minimum notice and booking horizon. Your workspace settings can tighten both (minimum notice is a floor, the booking horizon a ceiling) but never loosen them.
  • Busy time on the connected calendar.
  • The staff member’s existing bookings, plus the service’s buffers either side.
  • Any block or time off, whether it belongs to one staff member or to the whole workspace.
If a service is offered by more than one person and the client doesn’t choose, DMLY offers the union of everyone’s free times and picks an available staff member for them. A double booking can’t slip through. Two people can hit Book on the same slot at the same moment, but only one wins; the other sees Sorry, that time was just taken — please choose another. The slot is locked while the booking is written.
Working hours are wall-clock times in the staff member’s own timezone, not yours. If a stylist works 9:00 to 17:00 in Lagos and your workspace is in London, set 9:00 to 17:00 on their record and let DMLY do the conversion.

Add a booking by hand

The client on the phone, the walk-in at the counter: book them yourself from the Calendar view. New appointment asks for:
  • Contact, Staff and Service.
  • Date and Start time, in 15-minute steps.
  • A starting status of Confirmed or Pending.
  • Notify client, the switch that decides whether the confirmation message goes out.
The New appointment window with a contact, staff member, service, date, start time, Confirmed status, Notify client switch and a private note filled in A booking left at Pending isn’t held open indefinitely; see Past bookings close themselves. The contact field is built for the phone-in-hand moment:
  • Search and select a client finds existing contacts by name, email or phone as you type.
  • If they’re new, select Create new client. The search swaps to three inline fields (Name, Email, Phone), so you create the contact and the booking in one go without leaving for the Contacts page. (← Search existing takes you back if you change your mind.) The contact this creates is a real CRM record, marked as arriving via an appointment.
Give the new contact a phone number when you have one. That’s what lets the confirmation, the reminders and everything after reach them on WhatsApp.
On a Pay before booking service, a booking you add by hand takes payment like the booking page does: the slot is held and the client is messaged a payment link (for the deposit, if the service takes one), and the booking confirms once they pay. The hold lasts two hours. Taking the money yourself? Tick Payment taken in person and it confirms straight away with no link. The box only appears for a single confirmed booking; several slots at once, or a repeating series, confirm without payment. See Take payment for a booking.

Book a recurring series

For a client who comes back on a schedule (weekly physio, a standing consultation), book every date in one go instead of one appointment at a time. From the Calendar view, open New appointment and turn on Repeat. Repeat is hidden while you’re using + Add another time to book several one-off dates for the same client, and vice versa. The two are separate ways to book more than one slot at once. With Repeat on, three fields appear:
  • Frequency: Daily, Weekly, Every 2 weeks or Monthly.
  • Occurrences: how many appointments to create, from 2 up to 52.
  • If a slot is taken: Skip taken slots (the default) books every date that’s free and quietly skips the ones that aren’t, or Require all slots free, which books nothing at all if even one date in the series is already taken.
The New appointment window with Repeat switched on and highlighted, showing Frequency set to Weekly, 4 occurrences and Skip taken slots Every date in the series shares the same contact, staff member and service. Dates advance by wall-clock time in the service’s own timezone, so an “every Monday 9am” series stays at 9am even across a daylight-saving change. A series is deliberately quieter than booking the same dates one at a time:
  • The appointment-booked automation fires once for the whole series, not once per date.
  • The calendar and Zoom events are pushed in the background.
  • The client gets one consolidated confirmation instead of one per date.
The client and your team don’t get the same amount of detail. The client’s message lists the dates: the first six, then “and N more” for a longer series. Your team’s heads-up is shorter and, on WhatsApp, doesn’t mention the series at all: it reads exactly like an ordinary new-booking alert for the first date, with no count and no sign that more dates followed. Only the email version names the number of appointments and the starting date. Loyalty and credits still apply to each occurrence individually.
A recurring series is booked by staff from the Calendar; a client can’t start one themselves from the booking page, only book single appointments there. And a series never takes payment, whatever the service’s payment mode; see the note above.

Cancelling or rescheduling one date vs. the whole series

Reschedule always moves a single date, for you and for the client. Nothing shifts every remaining occurrence at once. To move the whole series, cancel what’s left and book a fresh one. Cancelling is where the choice lives, and it defaults to the wider option:
  • From the Calendar. Opening a recurring booking’s detail panel shows a ↻ Recurring badge and two destructive buttons: Cancel meeting, which cancels only that date, and Cancel series, which cancels that date and every later one in the series.
  • From the client’s own booking-management link. Cancelling a recurring booking shows a checkbox, Cancel all upcoming in this series, checked by default. Left checked, it cancels this date and every later one; unchecked, it cancels only this one.
Either way, “the whole series” only ever means this occurrence and everything scheduled after it. Past dates, and any occurrence already cancelled or completed, are left untouched.
The client’s cancel checkbox is checked by default, so leaving it as-is cancels every remaining date, not just the one they opened. If they only meant to skip one visit, they need to uncheck it first.

Appointment notes

A booking can carry internal notes: staff-only text that the client never sees. There are three ways they get written, and one place you read and edit them:
  • On the Calendar. Open a booking in the Calendar view and its details panel has a Notes section: select Add note (or Edit note) to write or change it right there. The New appointment form takes a note too, so you can jot one as you book.
  • A flow can write them. The Add Appointment Note step (in the flow builder’s Appointments group) appends a line to the booking’s notes; its own hint says “Internal note — never sent to the contact.” Point it at {{appointment.id}} in an appointment-triggered flow to record, say, the answer a client gave to a pre-visit question.
  • The API can read and write them. Create a booking with notes, or read them back from the appointment endpoints.
The Calendar editor replaces the whole note; the flow step appends to it. So a flow can keep adding lines automatically, and you can still open the booking and rewrite the lot by hand. The Bookings list doesn’t show the text; it just marks rows that have a note with a small icon, so sensitive detail stays on the booking itself.

What happens after the booking

Once a booking is confirmed, DMLY does the rest on its own:
  • Confirmation and reminders. Reminders are seeded from the service’s reminder times (for example, a day before and an hour before) and go out on the client’s channel. A reminder is skipped, not retried, if the booking is no longer confirmed, or the contact has opted out or has the bot paused. The meeting time is fixed, so a missed window can’t be caught up later.
  • Your team is told too. The assigned staff member gets their own message, and the rest of the active team gets a heads-up. Reminders never notify the team.
  • The calendar event. The event is pushed after the booking is saved, so a Google or Zoom failure can never lose you the slot. If nothing is connected, the booking simply lives in DMLY.
  • Automations fire. Appointment booked, cancelled, rescheduled, completed and no-show all work as triggers, and so does Appointment confirmed. Classes fire their own class events instead. See Triggers. Two of those triggers are narrower than they sound:
    • Appointment confirmed fires only when a Pay before booking hold clears its payment. That happens when the gateway confirms it, when the payment is recorded against it in DMLY (by you, or by a flow’s Record Payment step), or when a flow’s Confirm Appointment step confirms it. It fires on top of Appointment booked rather than instead of it, so a flow on each runs both on a paid booking. An ordinary or pay-after booking fires Appointment booked alone.
    • Appointment completed fires when the booking is marked completed by you on the Calendar, by a flow, or through the API. It also fires when DMLY closes a past booking for you, unless you’ve told it to wait for your review.
Clients manage their own booking from the link they were sent. They can cancel, and (for a one-to-one appointment) reschedule, each within the deadline set at Appointments → Settings → Booking policy. A class seat can be cancelled but not rescheduled to another time. If the booking is part of a recurring series, cancelling offers a choice between just that date and the rest of the series. Confirmed, upcoming bookings also get Add to calendar links. Cancellation deadline (hours) and Reschedule deadline (hours) are workspace-wide, not per-service: Hours before the start time. Set to 0 to allow up until the appointment. Both start at 0, so out of the box a client can cancel or reschedule right up to the start time.
Outside WhatsApp’s 24-hour window (which is where most reminders land), a message only goes out on an approved WhatsApp template. If the template isn’t approved yet, the message is dropped rather than sent as plain text; inside an open 24-hour window it still goes out as plain text. Check WhatsApp before you rely on reminders.

Past bookings close themselves

About a day after an appointment’s time has passed, DMLY closes off any booking still sitting at Confirmed or Pending. What it closes it as is your choice, under Appointments → Settings → Booking policy → Appointments nobody marked:
  • Count as completed (the default): the booking becomes Completed, and everything a completion sets off happens. The Appointment completed trigger fires, the appointment.completed webhook is sent and loyalty points are awarded, even if the client didn’t come.
  • Wait for review: the booking becomes Needs review and nothing is sent. Mark it completed or no-show yourself, and the matching messages, points and fees follow then. While any are waiting, your team gets one in-app notification a day that opens the Bookings list filtered to them, and each booking’s menu there lets you settle it. Class seats are settled from the class roster.
Pick Wait for review if you charge a no-show fee or ask for reviews when an appointment completes. With the default, a client nobody marked as a no-show is thanked for coming and never charged. DMLY never decides on its own that someone didn’t show. Class sessions are retired the same way. A decision you made by hand is never overwritten, because bookings that already reached an end state are never touched. That covers Cancelled, Completed and No-show. It also covers the Expired and payment-failed states an unpaid pay-before hold lands in, and that hold is released on its own timer rather than waiting for this: 15 minutes for a booking-page hold, two hours for a hold from a staff booking on the Calendar. An unpaid hold that is somehow still there when the day is up expires; it is never counted as completed. Two things follow from that, and they are the reason it is worth knowing about:
  • The client’s manage link goes read-only. It keeps working and still shows the booking’s details, but cancel, reschedule and the Add to calendar links all disappear, replaced by This meeting has passed.
  • You have about a day to record a no-show. On the Calendar, a 1:1 appointment’s Completed, No-show, Reschedule and Cancel meeting buttons disappear from its detail panel once the booking is retired. Class rosters are the exception: you can still mark Attended or No-show there afterwards. With Wait for review, a booking in Needs review can be settled whenever you get to it.
A reschedule is refused even before the sweep runs: once an appointment’s time has passed, the client’s manage link answers Could not reschedule. Please try again. rather than moving it.

When you charge

Each service has a Payment mode:
  • No payment required.
  • Pay after the appointment: the booking is confirmed first, then the pay link goes out.
  • Pay before booking: the slot is held for 15 minutes while the client pays.
All of it hangs off the price: Set a price above 0 to require payment. A payment mode on a free service does nothing. Pay-before is the one to understand. Nothing happens until the money clears: no confirmation, no reminders, no calendar event, no booked automation. If they don’t pay, the hold is released and the slot goes back on sale. A pay-before service can take a deposit rather than the full price, and any service can charge a fee when a client doesn’t show. See Take payment for a booking. Connect a gateway before you switch anything to Pay before booking. Without one, a pay-before service can’t be booked at all: the client is turned away with Online payment isn’t available right now. Please contact us to book this service. The Payment mode field warns you about this: No payment gateway is connected, so clients won’t be able to pay. Connect one in settings. See Payments and gateways.

Appointments vs the Meetings hub

They are not two systems. Meetings came first; Appointments is the same thing grown up. A meeting type is a service now, and a booking made either way is the same record, so everything shows up in the Appointments calendar, in reports and in the client’s profile regardless of where it started. Use Appointments for new work. It is the one that has staff, per-staff hours, classes and waitlists, payment modes, the branded booking page and calendar sync. Existing meeting types keep taking bookings; you don’t have to migrate anything to keep the lights on. Add staff when you need more than one bookable person or per-person hours. The one thing worth knowing about the older setup: if a service has no staff member with working hours of their own, DMLY falls back to the weekly hours and timezone stored on the service itself, the single-host way. You edit those in Offerings → Services: open the service and use Weekly availability and Timezone. The same fields are on the Meetings → Meeting types editor. See Meetings for the older hub.

Appointment reports

The booking numbers are not in the Appointments hub. They are a tab of the Reports section, at Configurations → Reports → Appointments. The page itself is headed Appointment reports, Bookings, attendance and revenue across your services and staff. Five cards run across the top: Total bookings, Completed, No-show rate, Revenue (paid) and Avg class fill. Completed counts every booking in the completed status, which includes the past bookings DMLY retired automatically as well as the ones you marked yourself. Below them, By service and By staff break the same bookings down row by row (bookings, completed, no-shows, and revenue on the service table). Narrow all of it with From, To, Staff, Service and Status; the cards and both tables follow the filter. CSV downloads one row per booking (date, service, staff, client, status, source, price, paid). PDF downloads the By service and By staff breakdowns as a formatted report. Either one needs the Export reports permission. See Exporting reports.
A teammate without View team appointments only ever reports on their own bookings: the staff filter is forced to their own staff record, and a teammate with no linked staff record gets an empty report rather than the workspace’s figures. See Roles and permissions.

Before you start

1

Connect a channel

Reminders and confirmations go out over a channel. Connect WhatsApp first. See Connect WhatsApp.
2

Create your services

Go to Offerings → Services and add what you take bookings for, with the duration, price and reminder times. See Services.
3

Add staff and their hours

Add each bookable person, tick Accepts bookings, set their Working hours, and assign the services they offer. See Staff and availability.
4

Connect a gateway if you charge

Do this before switching any service to Pay before booking, or nobody can book it. See Payments.
5

Share your booking page

Preview it, brand it, then send the link on WhatsApp. See Booking page.
A dashboard inside the Appointments hub. The hub has no summary view of its own. The dashboard exists, but it lives in the Reports section instead: see Appointment reports above. (Bookings does count: each tab’s label carries the number of bookings in it.)A way to edit a whole class series from the dashboard. A class can now be created as a repeating series, and you can cancel one session or that session and every later one. What there is no screen for is editing a series after the fact: changing capacity, location or the host across later occurrences is an API call, not a button. See Classes.A way to reschedule a whole recurring series at once. Reschedule always moves one date, whether you or the client does it. To shift everything left in a series, cancel the series and book a fresh one.A staff member who can log in. A staff member is a bookable person, not a user. Linking them to a team account is optional: use Link team member if they should manage their own bookings.