Business owners

Staff and hours

Business ownersStaff and hours

Staff are the people who work for you. The Staff tab is at /dashboard/staff. Each staff member has a profile, working hours, services they can perform, and a role (member or manager).

Add a staff member

Click "New staff". Fill in:

  • Name: shown to customers. Max 80 chars.
  • Email: if they need to log in (managers only). Optional for members.
  • Phone: for SMS notifications. Optional.
  • Bio: a 1–2 sentence description shown on the booking page. Specialty, years of experience, etc.
  • Photo: optional. Shown on the booking page.
  • Role: "Member" (just shows on the booking page) or "Manager" (can log in, sees dashboard, no super-admin access).
  • Services: which services this staff member can perform.
  • Active: uncheck to hide from the booking page without deleting.

Working hours

Working hours are stored per staff profile in the working_hours table. The current API replaces the whole week with PUT /api/staff/:id/hours.

  • Override per day: click the time cell, edit, save.
  • Day off: set isOpen: 0 for that day.
  • Split shift: not supported as a separate API field today. Workaround: clear the day and add two non-contiguous ranges (the dashboard does not yet expose this).
  • Time off (vacation): there is no first-class time_off table today. Workaround: set the staff's working hours to isOpen: 0 for the affected days.
No tenant-level default hours
BookFlow does not have a separate "tenant default working hours" table. Each staff profile has its own working_hours row set; availability is computed per staff and per day.

Services assignment

BookFlow does not model per-staff service assignments. Every bookable staff can perform every active, online-bookable service. If you need a "Haircut with Alice only" effect, the standard pattern is to encode the staff name in the service name and set the other staff's working hours so they're never available.

Manager permissions

Not yet a first-class concept
The staff_profiles table has no role column. "Member" vs "Manager" is not a field on a staff profile today. Staff dashboard access is governed by an entry in tenant_members with a non-zero role — but the current API does not expose a way to create that membership for an arbitrary email from the dashboard. Manager-style multi-user access is partially implemented and not in the GA surface.

API

GET/api/staff

List all staff for the current tenant.

POST/api/staff

Create a staff member. Body: displayName (required), userEmail?, title?, bio?, avatarUrl?, color?, isBookable?.

GET/api/staff/:id

Read a staff profile (includes the workingHours array).

PATCH/api/staff/:id

Update a staff member. Any subset of displayName, title, bio, avatarUrl, color, isBookable. userEmail is NOT patchable.

DELETE/api/staff/:id

Soft-delete (sets is_bookable=0). Returns { data: { ok: true } }.

PUT/api/staff/:id/hours

Replace the staff member's weekly schedule. Body: { hours: [{ dayOfWeek: 0-6, isOpen: 0|1, openTime: 'HH:MM', closeTime: 'HH:MM' }] }. dayOfWeek is 0=Sunday, 6=Saturday.

Common questions

  • How do I add a manager? Set role=Manager and add an email. They get an invite to set their password.
  • How do I handle time off? Use the "Time off" feature. The staff disappears from the booking page for that range.
  • Can a staff member see their own bookings? Not in v1 — they see the whole business. We're working on a staff view.
  • How do I run a chain with 5 locations? Create one business per location, or upgrade to Enterprise for a multi-location view. Contact hello@netwit.ca for multi-location pricing.
Need a human?

Email hello@netwit.ca or call +1-604-206-8169. NetWit responds in 1 business day.