# Get all member statuses

`GET /api/configuration/statuses`

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

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

## Overview

Lists the member statuses the operator has configured. Every member record carries exactly one status, and it is the operator's way of marking where a member stands — current, lapsed, suspended, a prospect who has not joined yet. Use this list to turn the status code on a member record into a label, and to populate a status picker.

Statuses are **entirely operator-defined**. There is no starter set and no platform-wide meaning: an id such as `ACTIVE` exists only if that operator created it, and its behaviour comes from the four flags on the status rather than from its name. Hard-coding a status id is a latent bug. Note that the platform uppercases ids when they are created, so `active` and `ACTIVE` are the same status and you will always receive the uppercase form.

Statuses also drive booking access: if a status appears in [the booking status restrictions list](get-all-booking-status-restrictions.md), members holding it are barred from making bookings. That restriction is separate from the flags below — check both.

Results come back in no guaranteed order, and there is no filter and no paging, and there is no active/inactive concept for a status itself, so every status ever created is returned. A status cannot be deleted while any member still holds it. When none exist you get `200` with an empty array `[]`. A change to the statuses may not appear immediately.

## Endpoint

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

`{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/statuses' \
  -H 'Authorization: Bearer {accessToken}' \
  -H 'X-Use-SSO: true'
```

## Response fields

| Field | Type | Description |
|-------|------|-------------|
| `[].id` | string | The status code held on each member record — compare a member's status against this to find the matching entry. Maximum 15 characters, unique within the tenant, and **always uppercase**: the platform uppercases ids on creation, so a duplicate differing only in case is rejected with a `409`. Chosen by the operator, so it is tenant-specific and carries no cross-tenant meaning; resolve it at run time rather than hard-coding it. |
| `[].description` | string | The status label to display. **Maximum 25 characters** — note that the create and update endpoints state a 255-character limit, but anything longer than 25 characters fails rather than returning a tidy validation error. Nullable, so it can be `null` while `id` is populated; fall back to `id` when rendering. Free text the operator can edit, so never match on it. |
| `[].backColourHex` | string | Suggested background colour for the status when shown as a badge or row highlight, as `#RRGGBB`. **Returned as an empty string, not `null`, when no colour is configured**, so test for emptiness rather than nullness before using it in a stylesheet. New statuses created through the API default to `#E0E0E0` when no colour is supplied. No alpha channel. |
| `[].textColourHex` | string | Suggested foreground colour to pair with `backColourHex`, in the same `#RRGGBB` form and with the same empty-string-when-unset behaviour. The two are set independently, so an unreadable combination is possible; check contrast before adopting them verbatim. |
| `[].collectSalesInvoices` | boolean | Whether outstanding sales invoices should still be collected from members holding this status. **A status with the flag unset reports `false`** — you cannot distinguish "deliberately off" from "never configured" through this API. Always present; never `null`. |
| `[].treatMembersAsExpired` | boolean | Whether members holding this status should be treated as expired — the flag an operator sets on statuses such as "lapsed" so that the member no longer counts as current. An unset flag reports `false`. Always present; never `null`. Do not confuse it with the booking status restrictions, which block booking through a separate mechanism. |
| `[].freezeSubscriptions` | boolean | Whether a member moving to this status should have their subscriptions frozen rather than continuing to bill — the flag behind statuses such as "suspended". An unset flag reports `false`. Always present; never `null`. |
| `[].prospectStatus` | boolean | Whether this status marks someone as a prospect — an enquiry or lead who has not become a member — rather than a member proper. Use it to keep prospect statuses out of a picker meant for members, and vice versa. An unset flag reports `false`. Always present; never `null`. |

## Sample response

```json title="200 OK"
[
  {
    "id": "string",
    "description": "string",
    "backColourHex": "string",
    "textColourHex": "string",
    "collectSalesInvoices": true,
    "treatMembersAsExpired": true,
    "freezeSubscriptions": true,
    "prospectStatus": true
  }
]
```

## Errors

| Status | Meaning | When |
|--------|---------|------|
| `500` | Internal server error | Any unexpected server-side failure while reading the statuses. The response is a bare status code with **no body**, so there is no detail to branch on. Retry with backoff; this list changes rarely, so a cached copy is a safe fallback. |
