Flowcharts
Customer Booking Flow
End-to-end flow for how a customer discovers, books, pays for, and completes a service on the Booki platform.
This diagram covers the complete customer journey — from opening the booking page to the appointment being fulfilled. Both the guest path and the registered customer path are shown.
Full Flow
┌─────────────────────────────────────────────────┐
│ Customer opens the booking page │
│ https://{slug}.booki.app/{branchSlug} │
└──────────────────┬──────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ First visit? │
└──────┬───────────────────────┬──────────────────┘
│ │
New User Has Account / Continue as Guest
│ │
↓ │
┌──────────────────┐ │
│ Register │ │
│ Name · Email │ │
│ Phone · Password│ │
└──────┬───────────┘ │
│ │
↓ ↓
┌──────────────────────────────────────────────────┐
│ Home — Browse available packages & hours │
│ GET /api/v1/tenant/:slug (load org context) │
└──────────────────┬───────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Click "Book Now" on a package │
└──────────────────┬──────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Navigate to Schedule Page │
│ Select available date and time slot │
│ GET /api/v1/bookings/fully-booked-slots │
└──────────────────┬──────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Fill in contact details │
│ Guest: name · email · phone (required) │
│ Registered: pre-filled from JWT profile │
│ Optional: set password to register as customer │
└──────────────────┬──────────────────────────────┘
│
┌─────────┴──────────┐
│ │
Guest Authenticated
│ │
↓ ↓
POST /bookings/ POST /bookings
type/:type
(header: X-Tenant-Slug
+ X-Branch-Slug)
│ │
└─────────┬──────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Booking created (status: pending) │
│ Confirmation email sent to customer │
└──────────────────┬──────────────────────────────┘
│
┌─────────┴──────────┐
│ │
Guest Authenticated
│ │
↓ ↓
┌────────────────┐ ┌───────────────────────────┐
│ Verify booking │ │ Skip — already verified │
│ via email link │ │ via registered account │
│ PUT /:id/verify│ └──────────────┬────────────┘
└───────┬────────┘ │
└──────────────┬─────────────┘
│
↓
┌──────────────────────────────────────────────────┐
│ Awaiting owner confirmation │
│ (see Owner Booking Management flow) │
└──────────────────┬───────────────────────────────┘
│
┌─────────┴──────────┐
│ │
Confirmed Declined
│ │
↓ ↓
┌─────────────────┐ ┌──────────────────────────────┐
│ Payment step │ │ Customer notified via email │
└────────┬────────┘ │ Decline reason included │
│ └──────────────────────────────┘
│
┌────┴────────────────────────┐
│ │
Maya Cash
│ │
↓ ↓
POST /maya/bookings/:id/ Pay on arrival
checkout-session
│
↓
Customer redirected to
Maya payment page
│
↓
Payment completed on Maya
│
↓
POST /maya/bookings/:id/
verify-session
│
└─────────────┬───────────────┘
│
↓
┌─────────────────────────────────────────────────┐
│ Appointment Day │
└──────────────────┬──────────────────────────────┘
│
┌─────────┴──────────┐
│ │
Customer shows up Customer no-show
│ │
↓ ↓
Owner marks Owner marks
completed no-show
PUT /:id/complete PUT /:id/no-show
Booking Status Lifecycle
| Status | Set when |
|---|---|
pending | Booking submitted (guest or customer) |
confirmed | Owner confirms the booking |
declined | Owner declines; customer notified |
pending-reschedule | Customer requests a reschedule; owner must review |
ongoing | Appointment in progress (appointment day) |
completed | Owner marks appointment done |
no-show | Owner marks customer as no-show |
cancelled | Customer cancels their booking |
Customer Actions After Booking
Registered customers can manage their bookings from the dashboard:
| Action | Endpoint | Condition |
|---|---|---|
| View bookings | GET /api/v1/bookings | Authenticated customer |
| Reschedule | PUT /api/v1/bookings/:id/reschedule | Before appointment date |
| Cancel | PUT /api/v1/bookings/:id/cancel | Before appointment date |
