Return a single booking with member details in the same format as a booking sheet
GET /api/booking-sheets/booking/{bookingId}
Success: 200 OK
- Products: Operator (
FOH) - Features: Front of House Generic Access (
FOHGENERIC)
Overview
Returns one booking in exactly the shape it takes inside a booking sheet, so you can
refresh a single cell of a sheet without re-fetching the whole grid. The response is a
bare booking object, not wrapped in resourceGroups.
Reach for it after
Return booking sheets for the given resource group with member details
has given you a bookingId, or follow the id field on any booking in that response —
it is an absolute URL to this endpoint for that booking.
Unlike the booking-sheet endpoints, this one always emits bookedMembers and
bookeeName. Passing includeMembers=false empties them rather than removing them.
Endpoint
GET {base_url}/api/booking-sheets/booking/{bookingId}
{base_url} is the environment URL issued to your integration. See Authenticating with Gladstone APIs.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
bookingId | integer (int32) | Yes | The booking to return. Take it from resourceGroups[].bookings[].bookingId on either booking-sheet endpoint. An id that does not exist gives 404, and so does one that exists but is not attached to a resource group configured as a booking sheet. |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
includeMembers | boolean | No | Whether to load the people on the booking. Defaults to true, so omitting it gives you member details. Set it to false for a lighter call that returns bookedMembers as [], bookeeName as "", and numberOfBookees and waitingListSize as 0; every other field is unaffected. |
Sample request
curl -X GET '{base_url}/api/booking-sheets/booking/{bookingId}' \
-H 'Authorization: Bearer {accessToken}' \
-H 'X-Use-SSO: true'Response fields
| Field | Type | Description |
|---|---|---|
bookingId | integer (int32) | The numeric identifier of this booking. The same value you passed in the path. |
recurringScheduleId | string (uuid) | The block-booking schedule this booking was generated from. Every booking produced by the same schedule carries the same value, so you can group them. null for a one-off booking. |
isBlockBooking | boolean | Whether this booking forms part of a block booking. Both 0 and no value in the underlying record are reported as false. |
id | string | An absolute URL to this booking on GET /api/booking-sheets/booking/{bookingId}, built from the gateway host that served your request. A convenience link — bookingId carries the same information. |
startTime | string (date-time) | When the booked period starts. Use it with endTime to place the booking on the sheet. |
endTime | string (date-time) | When the booked period ends. |
activityId | string | The activity being booked. Bookings sharing an activityId also share description, the two colour fields, activityComments and pricedProducts. |
activityForeColorHex | string | The activity's configured foreground (text) colour as a hex string, so a sheet can render every booking in its activity's colours. |
activityBackColorHex | string | The activity's configured background colour as a hex string. |
description | string | The activity's description — the name of the activity, not a note about this booking. Per-booking free text is in bookingComments. |
maximumBookees | integer (int32) | The maximum number of bookees the booking allows. Reported as 0 when the booking has no maximum recorded, which is not the same as "no places available". |
numberOfBookees | integer (int32) | How many places are taken: the sum of bookedMembers[].partySize over entries that are not on the waiting list and are not the host. 0 when you call with includeMembers=false, because the members it is derived from are not loaded. |
waitingListSize | integer (int32) | The sum of bookedMembers[].partySize over entries that are on the waiting list and are not the host. Also 0 when includeMembers=false. |
pricedProducts | array of object | The chargeable, non-resource products configured against the booking's activity — what a bookee can be sold for it. Derived from the activity, so every booking with the same activityId returns the same list. |
pricedProducts[].id | string | The product's identifier. |
pricedProducts[].description | string | The product's description. |
resourceProducts | array of object | The bookable resources this booking occupies, such as the courts or lanes. Each is one of the resources belonging to the booking sheet the booking was made on. |
resourceProducts[].id | string | The resource product's identifier. |
resourceProducts[].description | string | The resource product's description. |
bookedMembers | array of object | Everyone on the booking, including anyone waiting. Returned as an empty array — not omitted — when you call with includeMembers=false. |
bookedMembers[].id | integer (int32) | The member's numeric id, or 0 when the place was booked for a non-member guest. When it is 0, firstNames and lastName hold the guest name captured on the booking rather than a member record. |
bookedMembers[].firstNames | string | The member's forename(s) when id is greater than 0, otherwise the non-member forename captured on the booking. |
bookedMembers[].lastName | string | The member's surname when id is greater than 0, otherwise the non-member surname captured on the booking. |
bookedMembers[].isOnWaitingList | boolean | Whether this entry is a waiting-list place rather than a confirmed one. Waiting-list entries count towards waitingListSize instead of numberOfBookees. |
bookedMembers[].salesStatusInd | integer (enum) | Payment status of the sales invoice raised for this place: 0 unpaid, 1 part paid, 2 paid, 3 void, 4 part credited, 5 part credited and paid, 6 credited, 7 credit note, 8 pending. Reported as 0 when the record holds no status, so 0 means "unpaid or never set". |
bookedMembers[].salesInvoiceId | integer (int32) | The sales invoice raised for this place. 0 when no invoice exists, in which case totalAmount is also 0. |
bookedMembers[].bookingId | integer (int32) | The booking this entry belongs to. Repeats the top-level bookingId. |
bookedMembers[].bookingRef | integer (int32) | Distinguishes the several entries on one booking: bookingId plus bookingRef identifies a single place. 0 when the underlying record has no reference. |
bookedMembers[].attendedInd | boolean | Whether attendance has been recorded for this place. false covers both "did not attend" and "not yet marked" — the two are not distinguishable here. |
bookedMembers[].waitingListDateTime | string (date-time) | When the waiting-list entry was created, in UTC. null unless isOnWaitingList is true. |
bookedMembers[].totalAmount | number (double) | The total of the sales invoice identified by salesInvoiceId. 0 when there is no invoice. |
bookedMembers[].partySize | integer (int32) | How many places this single entry covers — one entry can stand for a group. Defaults to 1 when the record does not state a size. numberOfBookees and waitingListSize are sums of this field. |
bookedMembers[].bookingParties | array of object | The breakdown of partySize by price level. Entries with no price level are dropped and entries sharing a price level are merged, so this array can be shorter than the number of places booked individually — and empty even when partySize is greater than 0. |
bookedMembers[].bookingParties[].keyBookeeInd | integer (int32) | 1 when any of the merged entries at this price level is the key bookee — the lead person on the booking — otherwise 0. |
bookedMembers[].bookingParties[].priceLevelId | string | The price level charged for these places: the tariff, such as adult or junior, that sets the rate. Never empty, because entries without a price level are excluded. |
bookedMembers[].bookingParties[].quantity | integer (int32) | The number of places at this price level, summed across the merged entries. |
bookedMembers[].phoneNo | string | The member's mobile telephone number, falling back to their home number when no mobile is held. null when neither is recorded. |
bookeeName | string | The display name held against the booking: who the booking is under. An empty string when you call with includeMembers=false. |
bookingType | string | Either Activity or Reservation, taken from the activity's type. |
activityComments | string | Free-text comments configured on the activity, so the same text appears on every booking for that activity. null when none is set. |
bookingComments | string | Free-text comments recorded against this individual booking. null when none is set. |
Sample response
{
"bookingId": 12345,
"recurringScheduleId": "b7f3c1e2-9a44-4f2b-8c17-0d5e9a1b6c33",
"isBlockBooking": true,
"id": "string",
"startTime": "2026-08-14T19:00:00Z",
"endTime": "2026-08-14T19:00:00Z",
"activityId": "string",
"activityForeColorHex": "string",
"activityBackColorHex": "string",
"description": "string",
"maximumBookees": 1,
"numberOfBookees": 1,
"waitingListSize": 1,
"pricedProducts": [
{
"id": "string",
"description": "string"
}
],
"resourceProducts": [
{
"id": "string",
"description": "string"
}
],
"bookedMembers": [
{
"id": 12345,
"firstNames": "string",
"lastName": "string",
"isOnWaitingList": true,
"salesStatusInd": 0,
"salesInvoiceId": 12345,
"bookingId": 12345,
"bookingRef": 1,
"attendedInd": true,
"waitingListDateTime": "2026-08-14T19:00:00Z",
"totalAmount": 10.5,
"partySize": 1,
"bookingParties": [
{
"keyBookeeInd": 1,
"priceLevelId": "string",
"quantity": 1
}
],
"phoneNo": "string"
}
],
"bookeeName": "string",
"bookingType": "string",
"activityComments": "string",
"bookingComments": "string"
}Errors
| Status | Meaning | When |
|---|---|---|
404 | Not found | Invalid Booking ID — no booking matched, either because the id does not exist or because the booking is not on a resource group configured as a booking sheet. |
500 | Internal server error | Any unexpected server-side failure; the response body is empty. Retry, then raise a support ticket with the time of the call. |