Retrieves all resource products with their configuration details
GET /api/configuration/resource-products
Success: 200 OK
- Products: Operator (
FOH) - Features: Front of House Generic Access (
FOHGENERIC)
Overview
Lists every resource product in the environment. A resource product is a bookable thing with a schedule attached — a court, a lane, a studio, a piece of equipment — as distinct from an ordinary retail product, which is only sold. This endpoint returns only resource products.
Despite what "configuration details" suggests, the record is deliberately narrow: an id, a description, the site group it belongs to, the calendar that defines when it is open, an active flag and that calendar's weekly opening times. There is no pricing here, and no availability. Prices come from the price level and time band endpoints; whether a given slot is free comes from the availability and booking endpoints. Do not try to build a booking flow from this response alone.
Three things to know before you rely on the response:
- Inactive resource products are included, reported as
activefalse. There is no query parameter to exclude them, so filter client-side. openingTimesis the calendar's schedule, not the resource's availability. It says when the resource is open in a normal week; it says nothing about bookings, closures or exceptions on a particular date.- Times with a minute between 1 and 9 are formatted wrongly. See
openingTimes[].startTime— this is a real defect, not a rounding convention, and it will silently corrupt your schedule if you parse the values as given.
Also note that an environment with no resource products returns 200 with an empty body, not [] — see the Errors table, because a JSON parser expecting an array will fail on it.
Endpoint
GET {base_url}/api/configuration/resource-products
{base_url} is the environment URL issued to your integration. See Authenticating with Gladstone APIs.
Sample request
curl -X GET '{base_url}/api/configuration/resource-products' \
-H 'Authorization: Bearer {accessToken}' \
-H 'X-Use-SSO: true'Response fields
| Field | Type | Description |
|---|---|---|
[].id | string | The resource product's code, and the value the other resource product endpoints take in the path. Operator-chosen rather than generated, a string of at most 15 characters, and stored upper-cased whatever casing was supplied — so compare case-insensitively and upper-case any id you send back. Unique across all products, resource and retail alike. |
[].description | string | The operator's label for the resource, up to 255 characters — for example the court or studio name. Not unique, so two resources can share a description and only id distinguishes them. May be null where none was recorded. |
[].siteGroupId | string | The site group the resource belongs to, matching an id from Retrieves all site groups. Because it points at a group rather than a single site, a resource can be shared across every site in that group; resolve the group to its member sites if you need to know which venues offer it. Up to 15 characters. |
[].calendarId | string | The calendar whose weekly schedule produced openingTimes. Always populated, and several resources commonly share one calendar — meaning an identical calendarId across two resources implies identical openingTimes. Up to 15 characters. It is echoed here mainly so you can spot that sharing; there is no endpoint in this group that takes it. |
[].active | boolean | Whether the resource is in service. true unless the resource has been marked inactive — so true means "not marked inactive" rather than "positively confirmed active". Inactive resources are returned by this endpoint regardless, so check this field rather than assuming the list is pre-filtered. |
[].openingTimes | array of object | The resource's calendar expressed as weekly open periods. Always present, and an empty array [] when the calendar has no periods defined — never null. A day can appear more than once, which is how a split day (morning and evening, closed over lunch) is represented, so do not key a map on day. Order is not defined, and no entry exists for a day the resource is closed. These are recurring weekly periods with no date component: date-specific closures and exceptions are not represented here at all. |
[].openingTimes[].day | string | The day of the week the period applies to, as an English DayOfWeek name — Sunday through Saturday, capitalised. |
[].openingTimes[].startTime | string | The time the period opens, as HH:mm in the site's local time with no date and no zone. The minute is padded on the wrong side, so any minute from 1 to 9 is rendered with a trailing zero instead of a leading one — 09:05 comes back as 09:50 and 07:01 as 07:10. Values on the hour or at 10-minute boundaries are unaffected, which is why the defect is easy to miss. Treat a minute value you cannot corroborate as unreliable rather than parsing it directly. |
[].openingTimes[].endTime | string | The time the period closes, as HH:mm in the site's local time with no date and no zone, and subject to the same minute-padding defect as startTime. Read it as the end of the open period, not as the last bookable slot. |
Sample response
[
{
"id": "string",
"description": "string",
"siteGroupId": "string",
"calendarId": "string",
"active": true,
"openingTimes": [
{
"day": "string",
"startTime": "string",
"endTime": "string"
}
]
}
]Errors
| Status | Meaning | When |
|---|---|---|
200 | OK | Success. When there are no resource products the response is 200 with a completely empty body, not 200 with []. A client that parses the body as JSON unconditionally will throw on it, so check for an empty body before parsing. |
500 | Internal server error | An unexpected server-side failure reading the products or their calendars. The response has no body. There is no request input to correct, so retry rather than adjust the call. |