Facility Reservations
Facilities exposes booking endpoints for reserving resources (courts, simulators, carts, rooms). Reservations are scoped by tenantId and optionally clubId. All timestamps are ISO-8601 strings in UTC unless otherwise noted.
Reservation Model
status:ACTIVE,CANCELLED,NO_SHOWversion: optimistic lock integer required for mutationsexternalBookingId: optional idempotency key for upstream systems (e.g., SCL)
Reservation Series Model
status:ACTIVE,PAUSED,CANCELLEDrule: RRULE string (e.g.,FREQ=WEEKLY;BYDAY=MO,WE,FR)timeZone: IANA time zone used for recurrence expansionversion: optimistic lock integer required for updates and lifecycle changes
Endpoints
List Reservations
GET /facility-reservations?tenantId=1&clubId=10&resourceId=42&status=ACTIVE&startFrom=2025-01-15T08:00:00Z
Query params:
tenantId(required)clubId,resourceId,memberId(optional)status:ACTIVE,CANCELLED,NO_SHOWstartFrom,startTo: ISO timestampsskip,take: pagination
Create Reservation
POST /facility-reservations
{
"tenantId": "t-1",
"clubId": "c-1",
"resourceId": "r-42",
"memberId": "m-9",
"guestCount": 2,
"startTime": "2025-01-15T10:00:00Z",
"endTime": "2025-01-15T11:00:00Z",
"source": "WEB",
"externalBookingId": "scl-booking-123",
"notes": "Prefer simulator with left-handed bay"
}
Notes:
externalBookingIdmakes create idempotent for upstream systems.- Overlap constraints reject conflicting ACTIVE reservations.
Reschedule Reservation
POST /facility-reservations/:id/reschedule?tenantId=1&clubId=10
{
"startTime": "2025-01-15T11:00:00Z",
"endTime": "2025-01-15T12:00:00Z",
"reason": "Member request",
"version": 3
}
Cancel Reservation
POST /facility-reservations/:id/cancel?tenantId=1&clubId=10
{
"reason": "Member cancelled",
"version": 3
}
Mark No-show
POST /facility-reservations/:id/no-show?tenantId=1&clubId=10&version=3
Reservation Series
List Series
GET /facility-reservations/series?tenantId=1&clubId=10&status=ACTIVE
Create Series
POST /facility-reservations/series
{
"tenantId": "t-1",
"clubId": "c-1",
"resourceId": "r-42",
"memberId": "m-9",
"rule": "FREQ=WEEKLY;BYDAY=MO,WE,FR",
"timeZone": "Africa/Johannesburg",
"startTime": "2025-01-15T10:00:00Z",
"endTime": "2025-01-15T11:00:00Z"
}
Update Series
PUT /facility-reservations/series/:id?tenantId=1&clubId=10
{
"rule": "FREQ=WEEKLY;BYDAY=TU,TH",
"version": 2
}
Cancel / Pause / Resume
POST /facility-reservations/series/:id/cancel?tenantId=1&clubId=10&version=2
POST /facility-reservations/series/:id/pause?tenantId=1&clubId=10&version=2
POST /facility-reservations/series/:id/resume?tenantId=1&clubId=10&version=3
Related
- Availability
- REST API
- Facility booking engine specification is available upon request.