{"message":"Zaplon API is running! 🚀","version":"1.0.0","endpoints":{"auth":{"sendOTP":"POST /api/auth/send-otp","verifyOTP":"POST /api/auth/verify-otp","profile":"GET /api/auth/profile (protected)","updateProfile":"PUT /api/auth/profile (protected)"},"salons":{"list":"GET /api/salons?lat=&lng=&sort=distance|rating|recent&max_distance_km=","detail":"GET /api/salons/:id","slots":"GET /api/salons/:salonId/slots?date=&serviceId="},"users":{"updateLocation":"PATCH /api/users/me/location (protected)","updateTravelMode":"PATCH /api/users/me/travel-mode (protected)","updatePushToken":"PATCH /api/users/me/push-token (protected)"},"bookings":{"create":"POST /api/bookings (protected)"},"reviews":{"create":"POST /api/reviews (protected)","listForSalon":"GET /api/salons/:salonId/reviews?page=&limit=&sort=recent|highest|lowest"},"notifications":{"my":"GET /api/notifications/my?unread_only=&page=&limit= (protected)","markRead":"PATCH /api/notifications/:id/read (protected)","markAllRead":"PATCH /api/notifications/read-all (protected)"},"feedback":{"create":"POST /api/feedback (protected)","my":"GET /api/feedback/my?status=new|in_progress|resolved|all&page=&limit= (protected)","detail":"GET /api/feedback/:id (protected)"},"ownerAuth":{"sendOTP":"POST /api/owner/auth/send-otp","verifyOTP":"POST /api/owner/auth/verify-otp"},"ownerSalons":{"mine":"GET /api/owner/salons/mine (protected, owner)","create":"POST /api/owner/salons (protected, owner)","update":"PATCH /api/owner/salons/mine (protected, owner)","photoUploadUrl":"POST /api/owner/salons/mine/photo-upload-url (protected, owner)","updatePhotos":"PATCH /api/owner/salons/mine/photos (protected, owner)","createService":"POST /api/owner/salons/mine/services (protected, owner)","updateService":"PATCH /api/owner/services/:serviceId (protected, owner)","deleteService":"DELETE /api/owner/services/:serviceId (protected, owner)","createStaff":"POST /api/owner/salons/mine/staff (protected, owner)","updateStaff":"PATCH /api/owner/staff/:staffId (protected, owner)","deleteStaff":"DELETE /api/owner/staff/:staffId (protected, owner)","emergencyClose":"POST /api/owner/emergency-close (protected, owner)"},"ownerBookings":{"today":"GET /api/owner/bookings/today?date= (protected, owner)","createManual":"POST /api/owner/bookings/manual (protected, owner)","checkin":"PATCH /api/owner/bookings/:id/checkin (protected, owner)","complete":"PATCH /api/owner/bookings/:id/complete (protected, owner)","noShow":"PATCH /api/owner/bookings/:id/no-show (protected, owner)"},"ownerWalkins":{"list":"GET /api/owner/walkins?status=waiting|in_service|all (protected, owner)","create":"POST /api/owner/walkins (protected, owner)","call":"PATCH /api/owner/walkins/:id/call (protected, owner)","complete":"PATCH /api/owner/walkins/:id/complete (protected, owner)","left":"PATCH /api/owner/walkins/:id/left (protected, owner)"},"adminAuth":{"login":"POST /api/admin/auth/login","me":"GET /api/admin/auth/me (protected, admin)"},"adminSalons":{"list":"GET /api/admin/salons?status=pending|approved|rejected|all&search=&page=&limit= (protected, admin)","detail":"GET /api/admin/salons/:id (protected, admin)","approve":"PATCH /api/admin/salons/:id/approve (protected, admin)","reject":"PATCH /api/admin/salons/:id/reject (protected, admin)"},"adminUsers":{"list":"GET /api/admin/users?role=customer|owner|admin|all&search=&page=&limit= (protected, admin)","detail":"GET /api/admin/users/:id (protected, admin)"},"adminStats":{"overview":"GET /api/admin/stats?period=today|week|month|all (protected, admin)"},"adminFeedback":{"list":"GET /api/admin/feedback?status=new|in_progress|resolved|all&category=&role=&search=&page=&limit= (protected, admin)","detail":"GET /api/admin/feedback/:id (protected, admin)","respond":"PATCH /api/admin/feedback/:id/respond (protected, admin)","updateStatus":"PATCH /api/admin/feedback/:id/status (protected, admin)"}}}