# Get site by ID

`GET /api/configuration/sites/{all}`

- **Success:** `200 OK`
- **Products:** Operator (`FOH`), Consumer (`CONSUMER`), Integrations (`INTEGRATIONS`) (any one of these products, not all)
- **Features:** Online Bookings (`ONLINEBOOK`), Online Joining (`ONLINEJOIN`), DataHub (4Global) Integration (`DATAHUB`), TRP Integration (`TRP`), Front of House Generic Access (`FOHGENERIC`) (any one of these features, not all)

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

## Overview

Returns a single site — one physical venue or location in the operator's estate — by its site ID. A site is the unit almost every other Configuration and Booking call is scoped to, so this is usually the call you make first when you need the venue's name, address, coordinates, contact details and public-facing URLs.

Two behaviours are worth knowing before you build against it:

- **The response shape changes with `includeFacilitiesAndAmenities`.** With the flag off (the default) you get the object documented below, and `organisations`, `images` and `socialMedia` come back as `null` — this form of the response never fills them, so null is not evidence the operator has configured none. With the flag set to `true` the endpoint populates those three collections *and* adds two further arrays, `amenities` and `facilities`. If you need any of the five, you must send `includeFacilitiesAndAmenities=true`.
- **Recent changes may not appear immediately.** A site created or amended moments earlier may not be reflected in the response straight away.

Site IDs are matched case-insensitively, so `MAIN` and `main` resolve to the same record.

## Endpoint

`GET {base_url}/api/configuration/sites/{all}`

`{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 |
|------|------|----------|-------------|
| `siteId` | string | Yes | The site to return, matched case-insensitively against `id`. Site IDs are operator-assigned short codes of maximum 15 characters, not sequential numbers — take the value from the `id` of a site returned by the list-sites call rather than constructing one. An ID that matches no site returns `404`. |

## Query parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `includeFacilitiesAndAmenities` | boolean | No | Switches the response to the richer shape. Omitted or `false` returns the object below with `organisations`, `images` and `socialMedia` left unpopulated. Set to `true` to have those three collections filled and to receive two extra arrays not listed below — `amenities` and `facilities`, each carrying `id`, a key, `name`, `description` and `translations`. Only the literal value `true` switches shape; any other value is treated as off. |

## Sample request

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

## Response fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | The site's operator-assigned code, maximum 15 characters. This is the value you pass as `siteId` to site-scoped calls elsewhere in the API. |
| `name` | string | The site's short display name — the label an operator would recognise, such as the branch name. Distinct from `legalName` and from `description`. |
| `legalName` | string | The registered legal entity name for the site, used where a trading name is not appropriate — invoices, contracts and statutory documents. Maximum 255 characters. Frequently unset, in which case fall back to `name`. |
| `vatId` | string | The site's VAT registration number, maximum 20 characters, for tax documentation. Held as free text — no format validation is applied, so do not assume a country-specific pattern. |
| `description` | string | A longer prose description of the site, maximum 255 characters, intended for display to end users. Not the same as `name`, which is the short label. |
| `address` | object | The site's postal address, always present as an object even when every line inside it is null. |
| `address.addressLine1` | string | First line of the postal address, maximum 100 characters. |
| `address.addressLine2` | string | Second line of the postal address, maximum 100 characters. Null when unused. |
| `address.addressLine3` | string | Third line of the postal address, maximum 100 characters. Null when unused. |
| `address.townCity` | string | Town or city, maximum 100 characters. |
| `address.region` | string | County, state or region, maximum 100 characters. |
| `address.postalCode` | string | Postcode or ZIP code, maximum 25 characters. Returned as entered, so formatting and spacing vary between sites. |
| `address.country` | string | Country name, maximum 100 characters. Free text rather than an ISO country code. |
| `location` | object | The site's geographic coordinates, for map display and distance sorting. Always present as an object; both members are null when the operator has not geocoded the site. |
| `location.latitude` | string | Latitude, carried as a string of maximum 40 characters rather than a number. Parse it before doing arithmetic, and handle null. |
| `location.longitude` | string | Longitude, carried as a string of maximum 40 characters rather than a number. Parse it before doing arithmetic, and handle null. |
| `contact` | object | Public contact details for the site. Always present as an object even when both members are null. |
| `contact.telephone` | string | Public telephone number, maximum 100 characters. Free text — extensions and international prefixes appear inconsistently. |
| `contact.email` | string | Public enquiries email address, maximum 255 characters. No format validation is applied on read. |
| `websiteUrl` | string | The operator's public web page for this site. Null when the operator has not set one. |
| `logoUrl` | string | Absolute or relative URL of the site's logo image, for branding your own UI. Null when no logo has been uploaded. |
| `termsConditionsUrl` | string | URL of the terms and conditions document that applies to this site. Sites in the same estate may point at different documents, so read it per site rather than caching one estate-wide value. |
| `privacyPolicyUrl` | string | URL of the privacy policy that applies to this site. As with `termsConditionsUrl`, this is per site rather than per operator. |
| `openActiveTaxMode` | string | The tax mode the site declares for the platform's OpenActive integration — the open-data feed through which sessions and facilities are published and harvested. Maximum 100 characters, free text with no validation. |
| `isActive` | boolean | Whether the site is currently in service. Derived by inverting the site's inactive flag, so a site whose flag has never been set reports `true`. Inactive sites are still returned by this endpoint — filter on this field yourself if you only want live venues. |
| `isWebVisible` | boolean | Whether the operator intends this site to appear in consumer-facing web channels. Reports `false` when the value has never been set. This is a display hint only — the endpoint does not hide sites on the strength of it, so honour it in your own UI. |
| `openingDate` | string (date-time) | The date the site opens or opened to the public. Returned with the time component truncated to midnight, so treat it as a date and ignore the time. Null for established sites where no opening date was recorded. |
| `organisations` | array of object | The organisations this site belongs to, for group-level reporting and ownership. **Returned as `null`, not `[]`, unless you send `includeFacilitiesAndAmenities=true`** — the default response never populates it, so null here means "not asked for", not "none configured". |
| `organisations[].id` | integer (int32) | The organisation's numeric identifier. |
| `organisations[].type` | string | The organisation's classification. |
| `organisations[].name` | string | The organisation's display name. |
| `images` | array of object | Photographs and other imagery for the site, in no guaranteed order. **Returned as `null`, not `[]`, unless you send `includeFacilitiesAndAmenities=true`** — null means "not asked for", not "none uploaded". |
| `images[].id` | integer (int32) | The image's numeric identifier, and the key its `translations` entries are held against. |
| `images[].url` | string | URL of the image asset. |
| `images[].description` | string | Caption or alt text for the image, maximum 255 characters, in the site's default language. Use `images[].translations` for other languages. |
| `images[].translations` | array of object | Localised alternatives to this image's text, keyed on `images[].id`. Empty when no translations have been captured. |
| `images[].translations[].type` | string | The object type the translation belongs to — `SiteImage` for entries under `images`. |
| `images[].translations[].culture` | string | The culture the `text` is written in. |
| `images[].translations[].text` | string | The translated text for that culture, replacing `images[].description` when you are rendering in that culture. |
| `socialMedia` | array of object | The site's social media presences. **Returned as `null`, not `[]`, unless you send `includeFacilitiesAndAmenities=true`** — null means "not asked for", not "none configured". |
| `socialMedia[].id` | integer (int32) | The social media link's numeric identifier, and the key its `translations` entries are held against. |
| `socialMedia[].url` | string | Link to the site's profile or page on that network. |
| `socialMedia[].description` | string | Label for the link, maximum 255 characters, in the site's default language. |
| `socialMedia[].logoUrl` | string | URL of the network's icon, for rendering the link. |
| `socialMedia[].translations` | array of object | Localised alternatives to this link's text, keyed on `socialMedia[].id`. Empty when no translations have been captured. |
| `socialMedia[].translations[].type` | string | The object type the translation belongs to — `SiteSocialMedia` for entries under `socialMedia`. |
| `socialMedia[].translations[].culture` | string | The culture the `text` is written in. |
| `socialMedia[].translations[].text` | string | The translated text for that culture, replacing `socialMedia[].description` when you are rendering in that culture. |
| `translations` | array of object | Localised alternatives to the site's own text fields, keyed on `id`. Always populated in both response shapes, and empty when no translations have been captured. |
| `translations[].type` | string | The object type the translation belongs to — `Site` for entries in this top-level collection. |
| `translations[].culture` | string | The culture the `text` is written in. |
| `translations[].text` | string | The translated text for that culture. |

## Sample response

```json title="200 OK"
{
  "id": "string",
  "name": "string",
  "legalName": "string",
  "vatId": "string",
  "description": "string",
  "address": {
    "addressLine1": "string",
    "addressLine2": "string",
    "addressLine3": "string",
    "townCity": "string",
    "region": "string",
    "postalCode": "string",
    "country": "string"
  },
  "location": {
    "latitude": "string",
    "longitude": "string"
  },
  "contact": {
    "telephone": "string",
    "email": "member@example.com"
  },
  "websiteUrl": "string",
  "logoUrl": "string",
  "termsConditionsUrl": "string",
  "privacyPolicyUrl": "string",
  "openActiveTaxMode": "string",
  "isActive": true,
  "isWebVisible": true,
  "openingDate": "2026-08-14T19:00:00Z",
  "organisations": [
    {
      "id": 12345,
      "type": "string",
      "name": "string"
    }
  ],
  "images": [
    {
      "id": 12345,
      "url": "string",
      "description": "string",
      "translations": [
        {
          "type": "string",
          "culture": "string",
          "text": "string"
        }
      ]
    }
  ],
  "socialMedia": [
    {
      "id": 12345,
      "url": "string",
      "description": "string",
      "logoUrl": "string",
      "translations": [
        {
          "type": "string",
          "culture": "string",
          "text": "string"
        }
      ]
    }
  ],
  "translations": [
    {
      "type": "string",
      "culture": "string",
      "text": "string"
    }
  ]
}
```

## Errors

| Status | Meaning | When |
|--------|---------|------|
| `400` | Bad request | Not returned in practice: `siteId` is a plain string, so any value is accepted. Do not write handling for it. A site that does not exist returns `404`, not `400` — worth noting if you have generalised from other Configuration lookups, several of which do the opposite. |
| `404` | Not found | No site has that ID. The body is the plain-text string `Site ID '{siteId}' does not exist`. You also get this when `includeFacilitiesAndAmenities=true` and the site is missing. |
| `500` | Internal server error | An unexpected server-side failure in the lookup. The response has an empty body — the detail is not returned to you, so retry once and then raise a support ticket quoting the site ID and approximate time. |
