Return booking sheets for the given resource group but with no member details

GET /api/booking-sheets/{id}

Success: 200 OK

Overview

Returns everything needed to draw a booking sheet — a day-by-day grid of one resource group's bookable resources, the bookings on them, and the periods when they are closed — without any personal data about the people on those bookings.

A booking sheet is a group of bookable resources at a site, such as the courts in a sports hall, configured together so they can be scheduled on one grid. You identify it by the id returned when it was created with Creates a booking sheet.

Reach for this variant where personal data is not needed — a public-facing availability display, for example — and for the with-member-details variant where it is.

Suppression is not cosmetic. bookedMembers and bookeeName are omitted from the JSON altogether rather than returned empty, and numberOfBookees and waitingListSize are always 0 because they are derived from member details this endpoint does not return. Code that reads any of those four on this endpoint will misbehave.

Two further things catch integrators out:

Endpoint

GET {base_url}/api/booking-sheets/{id}

{base_url} is the environment URL issued to your integration. See Authenticating with Gladstone APIs.

Path parameters

NameTypeRequiredDescription
idstringYesThe booking sheet you want, as returned when it was created with Creates a booking sheet — ids are generated with a PRCP prefix. The booking sheet must have at least one resource product attached, or the call fails with 400 Invalid booking sheet ID.

Query parameters

NameTypeRequiredDescription
fromDatestring (date-time)YesThe first day to return, as a date-time. Required despite being a query parameter — omit it and the call fails with 400 fromDate must be specified. Send it at midnight; a time component narrows which bookings qualify, because a booking must start at or after this instant to be returned.
toDatestring (date-time)YesThe last day to return. Required — omit it and the call fails with 400 toDate must be specified, and it must not be earlier than fromDate. A value at exactly midnight is widened to 23:59:59 on that date, so 2026-03-01–2026-03-07 covers all seven days; send any other time and it is used as given, which will exclude bookings ending later that day.

Sample request

cURL
curl -X GET '{base_url}/api/booking-sheets/{id}' \
  -H 'Authorization: Bearer {accessToken}' \
  -H 'X-Use-SSO: true'

Response fields

FieldTypeDescription
resourceGroupsarray of objectOne entry per day in the requested range on which at least one of the booking sheet's resources is open. Days with no opening times are dropped entirely, so this array is usually shorter than the number of days you asked for and you cannot index it by day offset — read the date part of resourceGroups[].startTime to see which day an entry covers.
resourceGroups[].bookingsarray of objectThe bookings falling on this day. A booking is placed on the first day matching the date of either its startTime or its endTime, so one running past midnight appears once only, under the earlier day. Only bookings lying wholly inside fromDate–toDate are returned: one that starts before fromDate, or ends after toDate, is omitted rather than truncated.
resourceGroups[].bookings[].bookingIdinteger (int32)The numeric identifier of this booking. Pass it to Return a single booking to re-read the booking on its own.
resourceGroups[].bookings[].recurringScheduleIdstring (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.
resourceGroups[].bookings[].isBlockBookingbooleanWhether this booking forms part of a block booking. Also false when no value has been set.
resourceGroups[].bookings[].idstringAn absolute URL to this booking on GET /api/booking-sheets/booking/{bookingId}, built from the host that served your request. A convenience link — bookingId carries the same information.
resourceGroups[].bookings[].startTimestring (date-time)When the booked period starts. Use it with endTime to place the booking on the sheet.
resourceGroups[].bookings[].endTimestring (date-time)When the booked period ends.
resourceGroups[].bookings[].activityIdstringThe activity being booked. Bookings sharing an activityId also share description, the two colour fields, activityComments and pricedProducts.
resourceGroups[].bookings[].activityForeColorHexstringThe activity's configured foreground (text) colour as a hex string, so a sheet can render every booking in its activity's colours.
resourceGroups[].bookings[].activityBackColorHexstringThe activity's configured background colour as a hex string.
resourceGroups[].bookings[].descriptionstringThe activity's description — the name of the activity, not a note about this booking. Per-booking free text is in bookingComments.
resourceGroups[].bookings[].maximumBookeesinteger (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".
resourceGroups[].bookings[].numberOfBookeesinteger (int32)Always 0 on this endpoint. It is calculated from the booked members, which this endpoint does not return. Use the with-member-details variant for real occupancy figures.
resourceGroups[].bookings[].waitingListSizeinteger (int32)Always 0 on this endpoint, for the same reason as numberOfBookees.
resourceGroups[].bookings[].pricedProductsarray of objectThe 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.
resourceGroups[].bookings[].pricedProducts[].idstringThe product's identifier.
resourceGroups[].bookings[].pricedProducts[].descriptionstringThe product's description.
resourceGroups[].bookings[].resourceProductsarray of objectThe bookable resources this booking occupies, such as the courts or lanes. Each one also appears in the parent resourceGroups[].resourceProducts, which is how you position the booking against a column of the sheet.
resourceGroups[].bookings[].resourceProducts[].idstringThe resource product's identifier, matching one of resourceGroups[].resourceProducts[].id.
resourceGroups[].bookings[].resourceProducts[].descriptionstringThe resource product's description.
resourceGroups[].bookings[].bookedMembersarray of objectNever returned by this endpoint. The field is omitted from the JSON altogether — not null, not [] — so code that reads it unconditionally will fail. Use the with-member-details variant when you need the people on a booking.
resourceGroups[].bookings[].bookedMembers[].idinteger (int32)Not returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].firstNamesstringNot returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].lastNamestringNot returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].isOnWaitingListbooleanNot returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].salesStatusIndinteger (enum)Not returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].salesInvoiceIdinteger (int32)Not returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].bookingIdinteger (int32)Not returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].bookingRefinteger (int32)Not returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].attendedIndbooleanNot returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].waitingListDateTimestring (date-time)Not returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].totalAmountnumber (double)Not returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].partySizeinteger (int32)Not returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].bookingPartiesarray of objectNot returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].bookingParties[].keyBookeeIndinteger (int32)Not returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].bookingParties[].priceLevelIdstringNot returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].bookingParties[].quantityinteger (int32)Not returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookedMembers[].phoneNostringNot returned by this endpoint — the whole bookedMembers array is omitted from the JSON. See the with-member-details variant, where this field is described.
resourceGroups[].bookings[].bookeeNamestringNever returned by this endpoint; the field is omitted from the JSON altogether, in the same way as bookedMembers.
resourceGroups[].bookings[].bookingTypestringEither Activity or Reservation, taken from the activity's type.
resourceGroups[].bookings[].activityCommentsstringFree-text comments configured on the activity, so the same text appears on every booking for that activity. null when none is set.
resourceGroups[].bookings[].bookingCommentsstringFree-text comments recorded against this individual booking. null when none is set.
resourceGroups[].bookingExceptionsarray of objectPeriods on this day when one of the resources is closed to entry — derived from time bands attached to the resource that are flagged as restricting entry. Only exceptions lying wholly inside fromDate–toDate are returned. Render these as blocked-out areas of the sheet.
resourceGroups[].bookingExceptions[].idstringThe identifier of the time band that produces the restriction. It is not unique per occurrence — every occurrence of a recurring restriction repeats it — so do not use it as a row key.
resourceGroups[].bookingExceptions[].descriptionstringThe time band's description, suitable for labelling the blocked-out area.
resourceGroups[].bookingExceptions[].recurringExceptionsobjectPresent only when scheduleID is set. A single summary of the whole recurring run, not a list of the individual occurrences.
resourceGroups[].bookingExceptions[].recurringExceptions.daysarray of stringThe days of the week the schedule was created for, as full English day names (monday to sunday). An empty list means every day.
resourceGroups[].bookingExceptions[].recurringExceptions.startTimestring (date-time)The earliest start across every occurrence of the schedule — the outer bound of the run, not of this occurrence. The occurrence's own start is bookingExceptions[].startTime.
resourceGroups[].bookingExceptions[].recurringExceptions.endTimestring (date-time)The latest end across every occurrence of the schedule.
resourceGroups[].bookingExceptions[].scheduleIDstring (uuid)The recurring schedule this exception belongs to. null for a one-off exception. Occurrences sharing a scheduleID are the same restriction repeated, and are the ones Update one or more booking sheet exceptions works on together.
resourceGroups[].bookingExceptions[].notesstringFree text recorded when the exception was created. null when none was given.
resourceGroups[].bookingExceptions[].resourceProductobjectThe single resource product this exception closes. An exception applies to one product, not the whole group, so the other products on the sheet stay bookable for that period.
resourceGroups[].bookingExceptions[].resourceProduct.idstringThe resource product's identifier, matching one of resourceGroups[].resourceProducts[].id.
resourceGroups[].bookingExceptions[].resourceProduct.descriptionstringThe resource product's description.
resourceGroups[].bookingExceptions[].startTimestring (date-time)When this occurrence's restricted period starts.
resourceGroups[].bookingExceptions[].endTimestring (date-time)When this occurrence's restricted period ends. Falls back to the same value as startTime when the exception has no end time set.
resourceGroups[].idstringThe booking sheet's identifier — the same value you passed as id. Repeated on every day entry.
resourceGroups[].descriptionstringThe booking sheet's configured name. Repeated on every day entry.
resourceGroups[].startTimestring (date-time)The earliest opening time across the resources open on this day. Together with endTime this gives the sheet's vertical extent for the day, and its date part identifies the day.
resourceGroups[].endTimestring (date-time)The latest closing time across the resources open on this day.
resourceGroups[].slotFrequencyinteger (int32)The slot interval configured on the booking sheet, used to divide the grid into rows. 0 when the booking sheet has no interval set.
resourceGroups[].siteIdstringThe site the booking sheet belongs to.
resourceGroups[].siteDescriptionstringAlways null on this endpoint. Do not rely on it for the site name.
resourceGroups[].resourceProductsarray of objectThe booking sheet's bookable resources that are open on this day — the columns of the sheet. Only products flagged as a standard or density resource are included, and a product with no opening times on the day is left out. If none are open, the day is dropped from resourceGroups altogether.
resourceGroups[].resourceProducts[].calendarIdstringThe opening-times calendar the resource follows. Both openingTimes and capacities are derived from it.
resourceGroups[].resourceProducts[].densitySlotSizeinteger (int32)The slot size configured against a density resource (resourceType 2). 0 when none is configured.
resourceGroups[].resourceProducts[].usageinteger (int32)Taken from the resource product's configured usage value; reported as 1 when the product has none.
resourceGroups[].resourceProducts[].resourceTypeinteger (int32)How the resource is capacity-managed: 1 a standard resource, 2 a density resource, which carries a capacity limit per period in capacities. Reported as 1 when the product has no value. Products that are not resources at all never appear here.
resourceGroups[].resourceProducts[].openingTimesarray of objectWhen this resource is open on this day, one entry per time band on its calendar. Already filtered to the day, so you do not need to filter again.
resourceGroups[].resourceProducts[].openingTimes[].timeBandIdstringThe time band that produces this opening period. The same id can appear in bookingExceptions[].id when that band restricts entry.
resourceGroups[].resourceProducts[].openingTimes[].startTimestring (date-time)This day's date combined with the time band's start time.
resourceGroups[].resourceProducts[].openingTimes[].endTimestring (date-time)This day's date combined with the time band's end time.
resourceGroups[].resourceProducts[].capacitiesarray of objectCapacity limits by period, for density resources (resourceType 2) only — always empty for a standard resource. They are calculated once, for the weekday of fromDate, and then repeated unchanged on every day entry, so treat them as that weekday's pattern rather than a per-day figure. Request a single day at a time if you need day-accurate capacities.
resourceGroups[].resourceProducts[].capacities[].startTimestring (date-time)When the period the limit applies to starts.
resourceGroups[].resourceProducts[].capacities[].endTimestring (date-time)When the period ends. End times are normalised to hh:mm:59, so periods abut rather than overlap.
resourceGroups[].resourceProducts[].capacities[].capacityinteger (int32)The density limit configured for that period, or 0 when none is set.
resourceGroups[].resourceProducts[].idstringThe resource product's identifier. Match it against bookings[].resourceProducts[].id to place a booking in the right column.
resourceGroups[].resourceProducts[].descriptionstringThe resource product's description, suitable as the column heading.
resourceGroups[].hasResourceProductsbooleanAlways false on this endpoint. A day entry only exists when at least one resource is open, so it would carry no information anyway.
bookingSheetobjectThe booking sheet itself, independent of any one day. Always present when the call succeeds, even if resourceGroups is empty.
bookingSheet.idstringThe booking sheet's identifier, the same value you passed as id.
bookingSheet.descriptionstringThe booking sheet's configured name.
bookingSheet.openingTimesobjectThe opening window configured on the booking sheet itself. This is not the same as resourceGroups[].startTime/endTime, which are computed from the resources actually open on a given day.
bookingSheet.openingTimes.startTimestring (date-time)The configured opening time.
bookingSheet.openingTimes.endTimestring (date-time)The configured closing time.
bookingSheet.notesarray of objectAlways empty on this endpoint. Day notes are only returned when a siteId is supplied, and this endpoint has no siteId parameter — use the with-member-details variant if you need them.
bookingSheet.notes[].datestring (date-time)The date the note applies to. The time component is midnight.
bookingSheet.notes[].notestringThe note text.

Sample response

200 OK
{
  "resourceGroups": [
    {
      "bookings": [
        {
          "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": 0,
          "waitingListSize": 0,
          "pricedProducts": [
            {
              "id": "string",
              "description": "string"
            }
          ],
          "resourceProducts": [
            {
              "id": "string",
              "description": "string"
            }
          ],
          "bookingType": "string",
          "activityComments": "string",
          "bookingComments": "string"
        }
      ],
      "bookingExceptions": [
        {
          "id": "string",
          "description": "string",
          "recurringExceptions": {
            "days": [
              "string"
            ],
            "startTime": "2026-08-14T19:00:00Z",
            "endTime": "2026-08-14T19:00:00Z"
          },
          "scheduleID": "b7f3c1e2-9a44-4f2b-8c17-0d5e9a1b6c33",
          "notes": "string",
          "resourceProduct": {
            "id": "string",
            "description": "string"
          },
          "startTime": "2026-08-14T19:00:00Z",
          "endTime": "2026-08-14T19:00:00Z"
        }
      ],
      "id": "string",
      "description": "string",
      "startTime": "2026-08-14T19:00:00Z",
      "endTime": "2026-08-14T19:00:00Z",
      "slotFrequency": 1,
      "siteId": "string",
      "siteDescription": "string",
      "resourceProducts": [
        {
          "calendarId": "string",
          "densitySlotSize": 1,
          "usage": 1,
          "resourceType": 1,
          "openingTimes": [
            {
              "timeBandId": "string",
              "startTime": "2026-08-14T19:00:00Z",
              "endTime": "2026-08-14T19:00:00Z"
            }
          ],
          "capacities": [
            {
              "startTime": "2026-08-14T19:00:00Z",
              "endTime": "2026-08-14T19:00:00Z",
              "capacity": 1
            }
          ],
          "id": "string",
          "description": "string"
        }
      ],
      "hasResourceProducts": true
    }
  ],
  "bookingSheet": {
    "id": "string",
    "description": "string",
    "openingTimes": {
      "startTime": "2026-08-14T19:00:00Z",
      "endTime": "2026-08-14T19:00:00Z"
    },
    "notes": [
      {
        "date": "2026-08-14T19:00:00Z",
        "note": "string"
      }
    ]
  }
}

Errors

StatusMeaningWhen
400Bad requestfromDate must be specified or toDate must be specified — either query parameter was omitted.
400Bad requestfromDate must be earlier or equal than toDate — the range runs backwards.
400Bad requestInvalid booking sheet ID — no booking sheet with that id exists, or it exists but has no resource products attached. An empty or unknown id both return this, as 400 rather than 404.
500Internal server errorAn unexpected server-side failure; the response body is empty. Retry, then raise a support ticket with the time of the call.

This page as markdown · All pages · llms.txt