requireSession or requireRole, so no session cookie is needed.
Base URL:
https://theroyalglow.in · Auth: Public (no session). Money
is an integer in paise (pricePaise: 250000 = ₹2,500.00). Durations are
whole minutes. All responses use the standard envelope
{ "success": true, "data": ... }.GET /api/services
Returns the full catalogue: every active service category (ordered bydisplayOrder) with its active services nested under services.
Minimum role: Public
Response
data.categories is an array of category objects. Each category carries its own
columns plus a services array of the active services that belong to it.
Errors
INTERNAL_ERROR — 500
INTERNAL_ERROR — 500
Unexpected/transient failure (e.g. database unreachable).
retryable: true.GET /api/services/[slug]
Returns a single service matched by its uniqueslug.
Minimum role: Public
Path parameters
Response
Errors
NOT_FOUND — 404
NOT_FOUND — 404
No service exists for the given
slug.INTERNAL_ERROR — 500
INTERNAL_ERROR — 500
Unexpected/transient failure.
retryable: true.GET /api/branches
Returns the branches the booking dialog’s branch picker shows: every branch that is not shut down, in display order, and the branch to preselect. Each branch carries only its id, name, city, and status, plus whether it is taking bookings; address, phone, and coordinates are not exposed. Minimum role: PublicResponse
Only anoperational branch has acceptingBookings: true; the picker shows the
others disabled. defaultBranchId is the primary branch when it is operational,
otherwise the first operational branch in display order, and null when no
branch is taking bookings. GET /api/availability uses the same branch when a
request names none.
Errors
INTERNAL_ERROR — 500
INTERNAL_ERROR — 500
Unexpected/transient failure (e.g. database unreachable).
retryable: true.GET /api/availability
Returns the bookable time slots for a single date. Slots are a fixed 30-minute schedule from 10:00 to 21:00 (first slot starts10:00, last slot
starts 20:30 and ends 21:00). A slot is available: false when it falls
outside that weekday’s configured business hours (every slot, on a day the salon
is closed) or, for today, when its start time has already passed in IST.
Minimum role: Public
Query parameters
Response
Errors
VALIDATION_ERROR — 400
VALIDATION_ERROR — 400
date is missing, not YYYY-MM-DD, not a real calendar date, or in the past;
branchId is present but empty; the named branch does not exist
(Branch not found.) or is not operational
(Selected branch is not accepting bookings.); or no branchId was sent and no
branch is taking bookings (No branch is taking bookings right now.).INTERNAL_ERROR — 500
INTERNAL_ERROR — 500
Unexpected/transient failure.
retryable: true.