Waitlist
Overview
When all slots for a service are booked, clients can join a waitlist. If an appointment is cancelled, the next person in line is offered the slot. Bronjoy manages the queue, offers, and expiration automatically.
How It Works
Client joins waitlist
↓
[Waiting] ← position in queue
↓
Slot opens (cancellation)
↓
[Offered] ← time-limited offer
↙ ↘
[Booked] [Expired/Declined]
↓
Next person offered
Statuses
| Status | Meaning |
|---|---|
Waiting | In the queue, waiting for a slot |
Offered | Slot offered — client has a time window to accept |
Booked | Offer accepted, appointment created |
Expired | Client didn't respond before the offer expired |
Cancelled | Client or staff cancelled the entry |
Staff Workflow
View the waitlist
GET /api/org/waitlist
Authorization: Bearer your-token
Filter by service, status, or preferred date:
GET /api/org/waitlist?service_id=1&status=Waiting&preferred_date_from=2026-04-01
Search by client name, email, or phone:
GET /api/org/waitlist?search=maria
Add a client to the waitlist
POST /api/org/waitlist
Authorization: Bearer your-token
Content-Type: application/json
{
"client_id": 42,
"service_id": 1,
"staff_id": 3,
"preferred_date": "2026-04-01",
"preferred_time_slot": "morning",
"notes": "Only available before noon"
}
preferred_time_slot options: morning, afternoon, evening
Manually offer a slot
When you know a slot is opening up:
POST /api/org/waitlist/{waitlistEntry}/offer
Authorization: Bearer your-token
Content-Type: application/json
{
"start_time": "2026-04-01T10:00:00Z"
}
The entry moves to Offered status. The client is notified and has a limited time window to accept (default: 2 hours).
Cancel a waitlist entry
POST /api/org/waitlist/{waitlistEntry}/cancel
Authorization: Bearer your-token
View summary
Get a count of entries by status:
GET /api/org/waitlist/summary
Client Workflow
Clients interact with the waitlist through the booking flow:
Join the waitlist
From the public booking page (works for guests and signed-in clients, same as booking):
POST /api/client/booking/{slug}/waitlist
Content-Type: application/json
{
"service_id": 1,
"preferred_date": "2026-04-01",
"preferred_time_slot": "afternoon",
"name": "Maria Garcia",
"phone": "+998901234567"
}
View waitlist entries
GET /api/client/waitlist
Authorization: Bearer client-token
Accept an offer
When a slot is offered:
POST /api/client/waitlist/{waitlistEntry}/accept
Authorization: Bearer client-token
This creates an appointment at the offered time. The waitlist entry moves to Booked.
Decline an offer
POST /api/client/waitlist/{waitlistEntry}/decline
Authorization: Bearer client-token
The slot is offered to the next person in line.
Cancel waiting
POST /api/client/waitlist/{waitlistEntry}/cancel
Authorization: Bearer client-token
Check queue length (public)
No authentication needed — show on the booking page:
GET /api/booking/{slug}/waitlist/count?service_id=1&date=2026-04-01
Auto-Promotion
When enabled, Bronjoy automatically offers slots to the next person in the queue when an appointment is cancelled.
Enable in organization settings:
| Setting | Description | Default |
|---|---|---|
waitlist_auto_promote | Automatically offer slots on cancellation | false |
waitlist_promotion_window_hours | Hours before an offer expires | 2 |
When auto-promote is on:
- An appointment is cancelled
- Bronjoy finds the next
Waitingentry for that service/date - The slot is offered automatically
- If the offer expires, the next person is offered
Best Practices
- Enable auto-promotion for popular services — it fills cancelled slots without staff intervention
- Set a reasonable promotion window — 2 hours works for same-day; extend to 12–24 hours for advance bookings
- Monitor the waitlist summary — a long waitlist for a service suggests you need more staff or time slots
- Add notes when offering slots — include the specific time being offered so clients understand the offer
- Use preferred_time_of_day — it helps match clients to slots they'll actually accept, reducing decline rates