Services
Services are what you offer. The Services tab is at /dashboard/services. Each service has a name, duration, price, and (optionally) buffer time before/after.
Add a service
Click "New service" in the top right. Fill in:
- Name: shown to customers and on receipts. Max 200 chars.
- Description: one or two sentences. Shown on the booking page. Max 2000 chars.
- Duration: 5 min minimum, 8 hours (480 min) maximum.
- Buffer after: optional. Time blocked AFTER the appointment (e.g. 10 min to clean up). 0-120 minutes. There is no per-service "buffer before" — only buffer_after_minutes.
- Price: in your currency, in MINOR units (cents). Leave 0 to show "Price on request".
- Deposit: optional. A percentage of the price (0-100). Per-tenant default lives in tenant.deposit_percent; per-service override lives in service.deposit_percent.
- Staff assignment: BookFlow does NOT have a service-to-staff mapping. Every service is bookable with every is_bookable staff, gated by per-staff working hours. If you need staff-specific services today, encode the restriction in the service name ("Haircut with Alice") or use working-hours overrides.
- Image: optional. A photo URL shown on the booking page.
- Active: uncheck to hide from the booking page without deleting (useful for seasonal services). The "is online bookable" toggle is separate.
- Custom form fields: advanced. A JSON schema the customer fills in at booking time.
Edit a service
Click the service row. Change anything. Click "Save". Future bookings use the new settings; existing bookings are unaffected.
Reorder
Drag the handle on the left of each row to reorder. The order on the Services tab is the order customers see on the booking page. (Under the hood, the dashboard calls POST /api/services/reorder with { order: ["id1", "id2", ...] }.)
Delete (archive)
Click the three-dot menu → "Archive". The service is hidden from the booking page but kept in the database (so historical bookings still reference it). The current API sets is_active = 0 — there is no separate "archived" tab state. To restore, PATCH the service with isActive: 1. The API has no "permanent delete" endpoint.
API
Services are also accessible via the API. See the Owner API guide.
/api/servicesList all services for the current tenant (includes inactive).
/api/servicesCreate a service. Body: name, description?, durationMinutes, price (cents), depositPercent?, maxAdvanceDays?, minNoticeHours?, bufferAfterMinutes?, maxBookingsPerSlot?, imageUrl?, isActive?, isOnlineBookable?, orderIndex?, customFormFields?.
/api/services/:idUpdate a service. Body: any subset of the create fields.
/api/services/:idSoft-delete (sets is_active=0). Returns { data: { ok: true } }.
/api/services/reorderReorder services. Body: { order: ['id1', 'id2', ...] }.
Common questions
- Can I have a service with variable price? The data model only stores a single price per service. To approximate variable price, list multiple services ("Haircut 30 min / $40", "Haircut 60 min / $70").
- Can I have a service that's only on certain days? Use staff working hours — set the staff's weekly hours to match the days you want that staff/service to be available.
- Can customers choose the staff for a service? Yes. On the public booking page the customer can pick any bookable staff or "anyone available".
- How do I bulk-import services? Use the API. POST each service in a loop, or build a small CSV-to-JSON script.
Email hello@netwit.ca or call +1-604-206-8169. NetWit responds in 1 business day.