API reference

Named GraphQL queries and mutations served at /api/graphql.

Custom operations are defined in features/keystone/mutations/index.ts. Lists that allow it also have generated Keystone CRUD. Commands take an idempotencyKey; repeating a key with the same input returns the earlier result and with different input is refused.

Public and account queries

getPublicStorefrontSettings, getPublicServiceCatalog, getPublicBarbers, getPublicBarberWeek, getPublicProducts, getPublicMembershipOffers, getPublicBookingEligibility, getPublicPaymentOptions, checkBarberAvailability, getPublicAppointment, getPublicQueue, getPublicQueueEntry, getPublicWalkInStatus, accountBookings, accountBalances, exportMyAccountData.

Public and account mutations

mutation Book($requestKey: String!, $guestProof: String!, $body: String!) {
  createOnlineBooking(requestKey: $requestKey, guestProof: $guestProof, requestBody: $body) { ... }
}
OperationArguments
createOnlineBookingrequestKey, guestProof, requestBody
createAccountBooking, recoverGuestBooking, recoverAccountBookingrequest key and proof
managePublicAppointmentappointmentId, accessToken, action, startsAt, reason, idempotencyKey, preview, acceptedFeeAmount
signPublicWaiverappointment and token
startDepositCheckoutappointmentId, accessToken
confirmDepositCheckoutappointment and session
createPublicQueueEntryname, phone, service, barber

Dashboard projections

platformBooking, platformQueue, platformCustomers, platformPos, platformReports, platformServices, platformStaff, platformOperations, platformTeam, activeShopStorefrontSettings, claimableShops.

Dashboard commands

AreaOperations
Shop and teamselectActiveShop, claimShopOwnership, addShopMemberByEmail(email, membershipRole), updateActiveShopStorefrontSettings, runBarbershopOnboarding
AppointmentscreateStaffAppointment, manageStaffAppointment(appointmentId, action, startsAt, barberId, reason), transitionAppointment(appointmentId, toStatus), markAppointmentNoShow(appointmentId, policyId, reason)
Walk-ins and waitlistcreateStaffQueueEntry, assignWalkInQueueEntry, transitionQueueEntry(queueEntryId, toStatus), seatWalkInQueueEntry(queueEntryId), manageWaitlist(action, ...)
CheckoutcheckoutAppointment(appointmentId, paymentMethod, packageBalanceId, tipAmount, discountAmount, taxAmount, notes, paymentSessionId), refundCashCheckout(transactionId, reason, cashReturned), recordProductSale, returnProductSaleLine
Payment sessionsensureDefaultPaymentProvider, initiateAppointmentPaymentSession, captureAppointmentPaymentSession, refundAppointmentPaymentSession, cancelAppointmentPaymentSession, reconcilePaymentSession
CustomersaddCustomerNote, setCustomerStatus, setCustomerConsent, issueCustomerWaiver, manageMembership(action, customerId, membershipPlanId, servicePackageId, customerPackageId, paymentMethod, reason)
StaffmanageStaffShift, manageScheduleException, linkBarberAccount, setPractitionerCredentialStatus
Payroll and stocktransitionCommission, payApprovedCommissions, receiveInventoryLot, recordInventoryMovement

HTTP endpoints

  • /api/graphql
  • POST /api/payment-webhooks/[providerCode]
  • /api/completion and /api/mcp-transport/[transport] (403 unless ENABLE_AI_TOOLS=true)
  • /robots.txt, /sitemap.xml, /manifest.webmanifest

On this page