# Get all pricing timebands

`GET /api/configuration/timebands`

- **Success:** `200 OK`
- **Products:** Operator (`FOH`)
- **Features:** Front of House Generic Access (`FOHGENERIC`)

HTML version: [Get all pricing timebands](https://support.gladstonesoftware.cloud/reference/configuration/get-all-pricing-timebands)

## Overview

Lists every pricing timeband defined for the tenant. A timeband is a named label — for example `STAND` / "Standard" — that other configuration attaches to in order to vary price and entry rules by period. It is the vocabulary you resolve ids against; it is not the schedule itself.

Read this before anything else: **a timeband record carries no start or end time.** Despite the name, the only fields on it are an id, a description, an entry-restriction flag and translations. The actual date and time ranges live against a product and site elsewhere in the platform and reference the timeband by id; this endpoint does not expose them. If you are looking for "what are the peak hours", this is the wrong call.

The response is a JSON array. There is no paging, no filtering and no query parameter — you always get every timeband. An empty configuration returns `200` with `[]`, not `204` and not `404`. A new tenant starts with a single timeband, `STAND`, so in practice the array is rarely empty.

Timeband ids are **operator-defined and tenant-local**. They are unique within your tenant, not a platform-wide code, so `PEAK` in one tenant has no relationship to `PEAK` in another. Do not hardcode them and do not share them between environments.

Timebands have no active, inactive or archived flag, so there is nothing to filter on and nothing is hidden — a timeband that the operator has stopped using is indistinguishable in this response from one in daily use. If you need to know which are actually in service, you have to determine that from the configuration that references them.

A timeband created, updated or deleted through this API is reflected here immediately; a change made any other way — for example in the operator's back-office application — can take up to six hours to appear here.

To fetch one timeband on its own, use [Get pricing timeband by ID](get-pricing-timeband-by-id.md).

## Endpoint

`GET {base_url}/api/configuration/timebands`

`{base_url}` is the environment URL issued to your integration. See [Authenticating with Gladstone APIs](../../guides/authenticating-with-gladstone-apis.md).

## Sample request

```bash title="cURL"
curl -X GET '{base_url}/api/configuration/timebands' \
  -H 'Authorization: Bearer {accessToken}' \
  -H 'X-Use-SSO: true'
```

## Response fields

| Field | Type | Description |
|-------|------|-------------|
| `[].id` | string | The timeband's identifier, and the value other configuration uses to reference it. Operator-defined, up to 15 characters, and unique only within the tenant — treat it as an opaque tenant-local string rather than a platform code. The id is upper-cased and stripped of spaces when a timeband is created, so values you receive are always upper-case and space-free. Ids the operator did not choose themselves are generated with the prefix `TBND` followed by a number. Pass this value to [Get pricing timeband by ID](get-pricing-timeband-by-id.md). |
| `[].description` | string | The label an operator sees for this timeband in their own systems — for example `Standard`. Up to 255 characters and never blank; the create and update endpoints reject an empty description. This is the untranslated base text and is returned regardless of any `Accept-Language` you send; localised alternatives are in `translations`, which you must apply yourself. |
| `[].restrictEntryInd` | integer (int32) | Whether entry is restricted during this timeband. `0` means entry is not restricted, `1` means it is. No other values are defined. A timeband with no value set is returned as `0` — you cannot distinguish “not restricted” from “never configured” here. |
| `[].translations` | array of object | Localised versions of `description`, one entry per culture the operator has translated it into. Always present and always an array — an untranslated timeband returns `[]`, never `null`. Nothing is inherited or defaulted, so if the culture you want is absent, fall back to `description` yourself. |
| `[].translations[].type` | string | The property this entry translates. For this endpoint it is always the literal string `description`, because description is the only translatable property a timeband has. It is the **field** name, not the object type — it never contains `TimeBand`. Treat any other value as unexpected. |
| `[].translations[].culture` | string | The culture the translation applies to, as a code from the tenant's culture list — for example `cy-GB`. Up to 20 characters, and always a culture that exists in the tenant, so you will not receive a code that [Get all available cultures](get-all-available-cultures.md) does not also return. |
| `[].translations[].text` | string | The translated description for that culture. Never null or empty — a culture with nothing entered has no entry in the array at all rather than an entry with blank text. Unbounded in length, unlike `description`. |

## Sample response

```json title="200 OK"
[
  {
    "id": "string",
    "description": "string",
    "restrictEntryInd": 1,
    "translations": [
      {
        "type": "string",
        "culture": "string",
        "text": "string"
      }
    ]
  }
]
```

## Errors

| Status | Meaning | When |
|--------|---------|------|
| `400` | Bad request | Not returned in practice: the endpoint takes no route, query or body parameter, so there is nothing to reject. Treat a `400` here as a gateway or authentication problem rather than a fault in your request. |
| `500` | Internal server error | Any unexpected server-side failure while reading the timebands. The body is empty and carries no detail. Retry; there is no request change that avoids it. |
