# Get activity details

`GET /api/configuration/activity/{id}`

- **Success:** `200 OK`
- **Products:** Operator (`FOH`), Consumer (`CONSUMER`) (any one of these products, not all)
- **Features:** Online Bookings (`ONLINEBOOK`), Front of House Generic Access (`FOHGENERIC`) (any one of these features, not all)

HTML version: [Get activity details](https://support.gladstonesoftware.cloud/reference/configuration/get-activity-details)

## Overview

Returns the full configuration of one activity — its names and translations, what kind of activity it is, its participant limits, its image and the tags it carries. Use it after [listing activities](get-all-activities-with-optional-site-filtering.md) or [fetching them by tag](get-activities-by-tags.md), when you have an identifier and need the detail behind it.

Like the tag lookup, this endpoint is available anonymously, so a public booking journey can show an activity's detail page before anyone signs in.

**A missing activity returns `404` with the plain string `Activity not found`** — this is one of the few activity endpoints where `404` genuinely means "no such activity" rather than something structural. The lookup is an exact match on the identifier, so case and spacing must agree with the value you were given.

**Activity identifiers are tenant-specific and operator-chosen.** They differ between customers and between environments, so always come by them from a list call rather than hard-coding them.

**The response does not include the activity's own identifier.** It returns the detail and nothing that echoes back what you asked for, so keep the `id` you called with if you need to correlate responses.

Read this endpoint live rather than from a cache of your own: unlike the activity list, nothing here is served from a cache, so it always reflects the current configuration.

## Endpoint

`GET {base_url}/api/configuration/activity/{id}`

`{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 |
|------|------|----------|-------------|
| `id` | string | Yes | The activity identifier, as returned in `id` by the list-activities or activities-by-tags endpoints. Up to 15 characters and stored upper-cased. It is matched exactly, so an identifier in the wrong case or with stray whitespace returns `404` rather than the activity. |

## Sample request

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

## Response fields

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | The activity's short label, suitable for a heading or a list entry. It is the activity's short description, which is why it reads as a name rather than a description. |
| `description` | string | The longer explanatory text about the activity, for a detail panel. It can be null or empty when the operator has not filled it in, so do not build a layout that assumes it is present. |
| `typeInd` | string | What kind of activity this is, as a lower-case word: `partyactivity`, `hostedreservation`, `activity`, `course` or `class`. It is worked out from several of the activity's settings each time you read it, and the first match wins in that order — so a party activity reports `partyactivity` even if it is also hosted. It governs what the rest of the record means: `activity` is a straightforward bookable slot, whereas `class` and `course` are the types that can require a minimum number of participants. |
| `imageURL` | string | A URL for the activity's image, ready to use as-is. A stored reference is expanded into a full public CDN URL for the tenant before being returned; a value already beginning `http` is passed through untouched. Null or empty when the operator has set no image, so provide your own placeholder. |
| `siteId` | string | The site this activity belongs to. Each activity belongs to exactly one site, so the same activity run at several venues is several records with different identifiers — this field is how you tell them apart. |
| `activityGroupId` | string | The [activity group](get-activity-group-by-id.md) this activity is filed under, used to organise activities into families such as "Racket sports". Look it up there for the group's own name and translations. |
| `minBookees` | integer (int32) | The minimum number of participants the activity needs. `0` means no minimum. Only class-style activities may set this above `0` — the update endpoint rejects a non-zero value on an `activity` type outright — so expect `0` whenever `typeInd` is `activity`. |
| `maxBookees` | integer (int32) | The maximum number of participants the activity accepts. It is always greater than or equal to `minBookees`, because the update endpoint refuses any pair where it is not. This is the configured ceiling for the activity, not live remaining capacity — ask the availability endpoints for that. |
| `translations` | array of object | Localised versions of the activity's own text, one entry per translated field and culture. Returned as an **empty array**, not null, when nothing has been translated. Only cultures that have actually been translated appear, so fall back to `name` and `description` when nothing matches your user. |
| `translations[].Type` | string | Which piece of the activity's text this entry translates. Note the capital `T` — this one field is serialised in Pascal case while its siblings are camel case. |
| `translations[].culture` | string | The culture code the translated text is for, matching the codes configured in the tenant's cultures list. |
| `translations[].text` | string | The translated text itself, to be shown in place of the field named by `Type` when the user is in the matching culture. |
| `tags` | array of object | The tags attached to this activity — the operator-defined categories used for filtering and navigation. Empty when the activity is untagged. These are the same tags you can search by with [get activities by tags](get-activities-by-tags.md), so `tags[].id` here is the value to feed into that endpoint's `tagIds`. |
| `tags[].id` | integer (int32) | The tag's numeric identifier, and the value to send to the activities-by-tags endpoint. Numeric and tenant-specific — tags are configured per customer, so do not carry ids between environments. |
| `tags[].name` | string | The tag's display label, suitable for a filter chip or category heading. Use `tags[].translations` in preference where a translation exists for the user's culture. |
| `tags[].description` | string | Longer text explaining the tag, where the operator has supplied one. Frequently null — treat it as optional supporting copy rather than something to rely on. |
| `tags[].tagGroupId` | integer (int32) | The tag group the tag belongs to, which is how tags are organised into facets. Group tags by this value if you are rendering several filter categories at once. Only tags in groups of the activities or system type can be attached to an activity in the first place. |
| `tags[].translations` | array of object | Localised versions of the tag's text, held separately from the activity's own translations. An **empty array**, not null, when the tag has none. |
| `tags[].translations[].Type` | string | Which piece of the tag's text this entry translates. Pascal-cased like its counterpart on the activity. |
| `tags[].translations[].culture` | string | The culture code the translated tag text is for, matching the codes configured in the tenant's cultures list. |
| `tags[].translations[].text` | string | The translated tag text, to be shown in place of `tags[].name` or `tags[].description` for the matching culture. |

## Sample response

```json title="200 OK"
{
  "name": "string",
  "description": "string",
  "typeInd": "string",
  "imageURL": "string",
  "siteId": "string",
  "activityGroupId": "string",
  "minBookees": 1,
  "maxBookees": 1,
  "translations": [
    {
      "Type": "string",
      "culture": "string",
      "text": "string"
    }
  ],
  "tags": [
    {
      "id": 12345,
      "name": "string",
      "description": "string",
      "tagGroupId": 12345,
      "translations": [
        {
          "Type": "string",
          "culture": "string",
          "text": "string"
        }
      ]
    }
  ]
}
```

## Errors

| Status | Meaning | When |
|--------|---------|------|
| `404` | Not found | No activity has that identifier, including when the case or spacing does not match the stored value. The body is the plain string `Activity not found`. |
| `500` | Internal server error | The activity, tag or translation read failed, or the image URL could not be built. The body is empty. |
