Bookings
The Bookings tab is at /dashboard/bookings. It's your full calendar — list view, day view, week view, month view. Every booking, every status, every action.
Statuses
A booking moves through these states:
- pending: just created, awaiting confirmation. (In practice, the system auto-confirms deposits and most bookings go straight to
confirmed.) - confirmed: customer has booked, you have acknowledged (or auto-acknowledged).
- completed: appointment happened. You can mark this from the dashboard or the customer's card.
- cancelled: cancelled by customer, business, or system (e.g. payment failed).
- no_show: customer didn't show up. Triggers the no-show fee if you have one.
List view
Default view. Columns:
- Date / time
- Customer
- Service
- Staff
- Price
- Status (color-coded chip)
- Actions (kebab menu)
Sortable by any column. Filterable by status, staff, service, date range.
Calendar view
Toggle in the top right. Day, week, or month. Each block is a booking, color-coded by status. Drag a block to reschedule (you'll be asked to confirm; the customer gets an email).
Booking detail
Click any row to see the full booking detail page. Contains:
- Service, staff, date, time, duration, total price
- Customer name, email, phone, customer notes
- Booking-specific notes (the "notes" the customer typed at booking time)
- Internal notes (your private notes)
- Payment status: deposit paid (last 4 digits), refund status, balance due
- Activity log: who did what when (created, rescheduled, marked complete, etc.)
- Action buttons: Confirm, Mark complete, No-show, Cancel, Reschedule, Refund deposit, Draft a reply (AI)
Confirm a booking
For most bookings this happens automatically. If a booking is in pending, click "Confirm" to flip it to confirmed. The customer gets an email.
Reschedule a booking
Click "Reschedule". Pick a new date and time. The customer gets an email. The deposit transfers automatically (no double-charge).
Complete a booking
After the appointment, click "Mark complete". This:
- Marks the booking as done
- Unlocks the review request (customer gets an email 2 hours later)
- Adds the revenue to your "Lifetime" stat
- Triggers the AI to draft a "thanks for coming" follow-up if enabled
No-show
Click "No-show" if the customer didn't arrive within 15 minutes of the appointment time. This:
- Marks the booking as no-show
- Charges the no-show fee (if you have one set) — you can refund from the same page if you decide to be lenient
- Adds a "No-show" tag to the customer
- Triggers the AI to draft a "we missed you" outreach (configurable)
Cancel a booking
Click "Cancel". You'll be asked to confirm and (optionally) refund the deposit. The customer gets an email immediately.
Add a note
Click "Add note" to write something private about this booking. The note is shown to your staff but not the customer. Useful for "the customer was 20 min late" or "they loved the new color".
API
/api/bookingsList bookings. Query: ?status=&staffId=&serviceId=&customerId=&startDate=&endDate=&limit=&offset=.
/api/bookings/statsAggregate stats: todayCount, upcomingCount, noShowCount, weekRevenue.
/api/bookingsCreate a booking (admin only). Body: serviceId, staffProfileId, startDatetime, customerId | newCustomer, notes?, status?.
/api/bookings/:idGet a single booking.
/api/bookings/:idUpdate a booking. Body: notes, internalNotes, status.
/api/bookings/:id/confirmTransition pending → confirmed.
/api/bookings/:id/cancelTransition to cancelled. To refund a deposit, call /api/payments/:id/refund separately.
/api/bookings/:id/completeTransition confirmed → completed.
/api/bookings/:id/no-showTransition confirmed → no_show.
/api/bookings/:id/rescheduleReschedule. Body: { newStartDatetime, staffProfileId? }.
/api/bookings/:id/notesAppend a timestamped internal note. Body: { note: '...' }.
Email hello@netwit.ca or call +1-604-206-8169. NetWit responds in 1 business day.