Skip to main content
These endpoints expose the public service catalogue, the branches taking bookings, and the booking-slot schedule. All four are Public — none of them call 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 by displayOrder) with its active services nested under services. Minimum role: Public
This endpoint takes no path or query parameters.

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

Unexpected/transient failure (e.g. database unreachable). retryable: true.

GET /api/services/[slug]

Returns a single service matched by its unique slug. Minimum role: Public

Path parameters

Response

Errors

No service exists for the given slug.
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: Public
This endpoint takes no path or query parameters.

Response

Only an operational 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

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 starts 10: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

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.).
Unexpected/transient failure. retryable: true.
Last modified on September 27, 2026