# Get pricing timeband by ID

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

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

HTML version: [Get pricing timeband by ID](https://support.gladstonesoftware.cloud/reference/configuration/get-pricing-timeband-by-id)

## Overview

Returns a single pricing time band by its id.

A **time band** is a named pricing period — "Peak", "Off Peak", "Weekend" — that an operator uses to charge different amounts for the same thing at different times. It matters because a product's price is not one number: a price is keyed on product **and** time band **and** price level together. So whenever you quote or take a price, a time band is part of the coordinates, and this endpoint is how you resolve that id to something you can show a user.

**The record itself carries no clock times.** This is the thing most integrators get wrong on first contact. Despite the name, a time band is a label plus an entry-restriction flag; the actual start and end times live elsewhere, in the time band schedule that maps a schedule and a time band to start/end times. Nothing in this response tells you when the band applies. If you need to work out which band is live at a given moment, this endpoint will not give you the answer.

Where you get the id: a site's default time band comes from [Get site defaults](get-site-defaults.md) as `timebandId`, and the full set an operator has configured comes from [Get all pricing timebands](get-all-pricing-timebands.md). Time band ids are uppercase with spaces stripped — the create call uppercases whatever you send, and auto-generated ids use the prefix `TBND` — so pass the id back exactly as you received it rather than re-casing it.

## Endpoint

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

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

## Path parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `timebandId` | string | Yes | The time band to read, maximum 15 characters. Take it from `timebandId` on [Get site defaults](get-site-defaults.md), from `id` on [Get all pricing timebands](get-all-pricing-timebands.md), or from the `timeBandId` attached to a price. An id that does not exist returns `404`, not an empty `200`. |

## Sample request

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

## Response fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | The time band's identifier, maximum 15 characters, and the value to send back anywhere a `timeBandId` is expected. Echoes the id you requested. |
| `description` | string | The operator's name for the band — "Peak", "Off Peak" — and the only human-readable label the record carries. Show this rather than the id. Untranslated: it is in whatever language the operator configured, so use `translations` if you need to render it in a specific culture. Create and update reject a description over 255 characters with `The pricing timeband description cannot be more than 255 characters`, but a description longer than 25 characters may not survive a write intact, so do not assume it does. |
| `restrictEntryInd` | integer (int32) | Whether this band denies physical entry at access-control gates. `0` means no; `1` means the band denies swipe access at entry points, so a member whose price or product resolves to this band is refused at the barrier. Returned as a plain integer, so a band with no value configured comes back as `0` — you cannot distinguish "not restricted" from "never configured" through this API. |
| `translations` | array of object | Culture-specific versions of `description`, for operators running a multilingual site. Always present: a band with no translations configured returns `[]`, never null. This array is populated only on this by-id call and the list call — it is not a full set of localisations, only the translations recorded against this one band. |
| `translations[].type` | string | The property this translation applies to. For time bands this is always `description`, because `description` is the only translatable field on the record. |
| `translations[].culture` | string | The culture code the translation is for, drawn from the platform's culture list — for example `en-gb`, `cy-gb`, `fr`. Codes are lowercase. The full set an operator can use is available from [Get all available cultures](get-all-available-cultures.md). |
| `translations[].text` | string | The translated description to display when rendering in that culture. Falls back to nothing — if no entry matches the culture you want, use `description` rather than expecting a default entry. |

## 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 | `timebandId` could not be read as a valid value. In practice this is hard to provoke on this endpoint, because `timebandId` is a string and almost any value binds — a missing or unknown time band gives you `404`, not `400`. |
| `404` | Not found | No time band exists with that id. The body is a plain-text message in the form `GetTimeband could not find the id {timebandId}`, not a JSON error object. Note that some other Configuration endpoints return `400` for a record that does not exist; this one does not, so branch on `404` here. |
| `500` | Internal server error | An unexpected server-side failure while reading the band. The response has no body. One known cause is a failure while looking up the band's `translations`. |
