Get membership type by ID

GET /api/configuration/membership-types/{all}

Success: 200 OK

Overview

Returns one membership type — the template an operator sells, defining how long a membership runs, how it renews, which price level it is priced from, what documentation a joiner must supply and which tags describe it. You will typically call this after listing types for a group with Get membership types by membership type groups, to fetch the full detail of the one the customer chose before starting a join.

This endpoint does not return a price. priceLevelId tells you which price level applies, but the money comes from the pricing calls. Use Get price level by ID to resolve the level itself.

Three things surprise integrators:

Endpoint

GET {base_url}/api/configuration/membership-types/{all}

{base_url} is the environment URL issued to your integration. See Authenticating with Gladstone APIs.

Path parameters

NameTypeRequiredDescription
idstringYesThe membership type to return. This is an operator-assigned code of maximum 15 characters, not a number — take it from the id of a type returned by Get membership types by membership type groups. The lookup is an exact match, so pass it back unchanged rather than upper-casing or trimming it. An ID that matches nothing returns 404.

Sample request

cURL
curl -X GET '{base_url}/api/configuration/membership-types/{all}' \
  -H 'Authorization: Bearer {accessToken}' \
  -H 'X-Use-SSO: true'

Response fields

FieldTypeDescription
idstringThe membership type's operator-assigned code, maximum 15 characters. Use it wherever a membership type is named — starting a join, filtering members, or querying prices.
descriptionstringThe type's display name, maximum 25 characters, so expect terse text such as ADULT PEAK. This is the only human-readable label on the record; use translations for other languages.
autoRenewIndicatorinteger (int32)The raw renewal flag. 1 means the membership renews automatically; any other value, including null, means it does not. Prefer autoRenews, which is the same fact as a boolean.
applyToLinksIndinteger (int32)Always 0 on this endpoint — it is never populated, so it tells you nothing about how the type is configured. Read isGroupMembership instead, which reflects the same setting and is populated correctly.
autoRenewsbooleanWhether the membership renews itself at the end of its term. Computed as autoRenewIndicator == 1, so a null indicator reports false. When true, duration and durationType tell you the length of each renewed term, and renewalDay/renewalMonth may anchor when it falls.
isGroupMembershipbooleanWhether the membership covers linked members — a family or corporate group — rather than only the individual who buys it. Derived from the type's apply-to-links setting: any non-zero value reports true.
paymentMethodIdstringThe payment method this type is sold on, maximum 15 characters. Mandatory on every membership type, so it is always present. Determines the collection mechanism — direct debit, card, cash — and therefore what a join flow must gather.
priceLevelIdstringThe price level the type is priced from, maximum 15 characters. Resolve it with Get price level by ID. Null when the type has no price level, in which case minAge and maxAge are also null, because they are taken from the level.
statusIdstringThe member status applied to a member holding this membership, maximum 15 characters. Null when the type does not set one.
durationinteger (int32)How many durationType periods one term of the membership runs for — 12 with a durationType of Monthly is a twelve-month membership. Read it together with durationType; on its own it is meaningless. Null when the type has no fixed term.
durationTypeIndicatorinteger (int32)The raw code behind durationType: 0 monthly, 1 daily, 2 weekly. Provided for callers that prefer the number; durationType carries the identical value.
durationTypeinteger (enum)One of: 0, 1, 2. The unit that duration is counted in — 0 monthly, 1 daily, 2 weekly. Note that 0 means monthly, not "unset"; a type with no term reports null here rather than 0.
unitsinteger (int32)Always null on this endpoint. The operator may have configured a units value, but this call never returns it.
unitTypeIndicatorinteger (int32)Always null on this endpoint — never populated by this call.
unitTypeinteger (enum)One of: 0, 1, 2, 3, 4, 5. Computed from unitTypeIndicator, which this endpoint never populates, so it is always null here. Were it populated, the codes are 0 nothing, 1 daily, 2 weekly, 3 fortnightly, 4 monthly, 5 yearly.
startupTypeinteger (int32)Always null on this endpoint — never populated by this call.
renewalDayinteger (int32)The day of the month the membership's term is anchored to, taken from the type's default start day. Null when the type does not fix one, in which case the term runs from the join date. Read with renewalMonth.
renewalMonthinteger (int32)The month the membership's term is anchored to, taken from the type's default start month, for annual types with a common renewal date across all members. Null when the type does not fix one.
minAgeinteger (int32)The youngest age eligible for this membership, copied from the associated price level's age range, not from the membership type's own age settings. It is only populated when priceLevelId is set and that level declares a non-zero start or end age; otherwise it is null, which means "no age restriction known from this call" rather than "no restriction".
maxAgeinteger (int32)The oldest age eligible, copied from the associated price level's age range under the same conditions as minAge. The two are populated or omitted together — you never get one without the other. A level whose range is 0–0 yields null for both.
imageUrlstringAbsolute URL of the type's promotional image on the public CDN, built as {cdn}/public/{tenantId}/images/{filename} with the filename lower-cased. Null when the type has no image, and also null when the environment has no CDN URL configured — so do not treat null as proof the operator has not uploaded one.
preventConcurrencyIndbooleanAlways false on this endpoint — never populated by this call, so it does not tell you whether concurrent memberships are actually blocked.
allowDuplicateSubscriptionsbooleanAlways false on this endpoint — never populated by this call.
priorityinteger (int32)The type's ordering weight, used where several types compete and one must be chosen.
earliestStartDatestring (date-time)The earliest date a membership of this type may start, returned with the time truncated to midnight — treat it as a date. Null when the type imposes no floor. When you are combining several types, note that a single type with a null value relaxes the constraint for the whole set rather than being ignored.
fixedEndDatestring (date-time)The calendar date this membership type is configured to end on, which makes it a fixed-term type rather than one that runs for its usual duration. Returned with the time truncated to midnight — treat it as a date. null when the type has no fixed end date. A fixed end date can only be set on a type that does not auto-renew and is not paid by Direct Debit, BACS or recurring card payment, but a type whose renewal or payment settings were changed after the date was set still carries it. Set or remove it with Update membership type configuration.
tagGroupsarray of objectThe tag groups that contain at least one tag applied to this membership type, ordered by sortOrder. Tags are the operator's own classification scheme — use them to filter or badge types in your UI. Only groups with a matching tag appear; a group the operator has defined but not used on this type is absent, not empty.
tagGroups[].idinteger (int32)The group's numeric identifier, and the key its translations entries are held against.
tagGroups[].keystringThe group's stable text key. Prefer matching on this rather than on id or name, since it is the value that survives across environments.
tagGroups[].namestringThe group's display name in the default language. Use tagGroups[].translations for other languages.
tagGroups[].descriptionstringLonger explanatory text for the group, for a tooltip or help panel.
tagGroups[].typestringThe key of the tag group's type — the operator-defined category the group itself belongs to. Resolve it with Get tag group by ID or key.
tagGroups[].allowMultipleTagsbooleanWhether more than one tag from this group may apply at once. When false, expect exactly one entry in tags; when true, expect one or more.
tagGroups[].sortOrderinteger (int32)The group's display position. Groups arrive already sorted by this value, so you only need it if you re-sort or merge with another source.
tagGroups[].tagsarray of objectThe tags from this group that are applied to this membership type, ordered by sortOrder. Not the group's full membership — tags the operator has defined but not applied here are absent.
tagGroups[].tags[].idinteger (int32)The tag's numeric identifier, and the key its translations entries are held against.
tagGroups[].tags[].keystringThe tag's stable text key. Match on this rather than on name.
tagGroups[].tags[].namestringThe tag's display name in the default language.
tagGroups[].tags[].descriptionstringLonger explanatory text for the tag.
tagGroups[].tags[].sortOrderinteger (int32)The tag's display position within its group. Tags arrive already sorted by it.
tagGroups[].tags[].isSecondarybooleanMarks the tag as a secondary rather than primary classification.
tagGroups[].tags[].translationsarray of objectLocalised text for this tag, keyed on the tag's id. Empty when no translations have been captured.
tagGroups[].tags[].translations[].typestringThe object type the translation belongs to — always Tag in this collection.
tagGroups[].tags[].translations[].culturestringThe culture the text is written in.
tagGroups[].tags[].translations[].textstringThe translated text, replacing the tag's default-language text when rendering in that culture.
tagGroups[].translationsarray of objectLocalised text for the tag group itself, keyed on the group's id. Empty when no translations have been captured.
tagGroups[].translations[].typestringThe object type the translation belongs to — always TagGroup in this collection.
tagGroups[].translations[].culturestringThe culture the text is written in.
tagGroups[].translations[].textstringThe translated text for the group.
translationsarray of objectLocalised text for the membership type itself, keyed on id, covering every translatable property of the record. Empty when no translations have been captured — in which case description is all you have, in the operator's default language.
translations[].typestringThe object type the translation belongs to — always MembershipType in this collection.
translations[].culturestringThe culture the text is written in.
translations[].textstringThe translated text for the membership type.
documentationRequiredarray of objectThe document types a joiner must supply before this membership can be sold — proof of age, proof of address and the like. Empty when the type demands none. Collect these during your join flow; the platform does not gather them for you.
documentationRequired[].documentTypeIdinteger (int32)The document type's numeric identifier, and the key its translations entries are held against. Quote it when uploading the member's document.
documentationRequired[].documentDescriptionstringThe document type's display name in the default language — what to ask the joiner for.
documentationRequired[].translationsarray of objectLocalised text for this document type, keyed on documentTypeId. Empty when no translations have been captured.
documentationRequired[].translations[].typestringThe object type the translation belongs to — always DocumentType in this collection.
documentationRequired[].translations[].culturestringThe culture the text is written in.
documentationRequired[].translations[].textstringThe translated document description for that culture.
maximumUsageinteger (int32)Always 0 on this endpoint — never populated by this call, so 0 does not mean "unlimited" or "none". The operator may have configured a maximum usage figure; this endpoint simply does not return it.

Sample response

200 OK
{
  "id": "string",
  "description": "string",
  "autoRenewIndicator": 1,
  "applyToLinksInd": 1,
  "autoRenews": true,
  "isGroupMembership": true,
  "paymentMethodId": "string",
  "priceLevelId": "string",
  "statusId": "string",
  "duration": 1,
  "durationTypeIndicator": 1,
  "durationType": 0,
  "units": 1,
  "unitTypeIndicator": 1,
  "unitType": 0,
  "startupType": 1,
  "renewalDay": 1,
  "renewalMonth": 1,
  "minAge": 1,
  "maxAge": 1,
  "imageUrl": "string",
  "preventConcurrencyInd": true,
  "allowDuplicateSubscriptions": true,
  "priority": 1,
  "earliestStartDate": "2026-08-14T19:00:00Z",
  "fixedEndDate": null,
  "tagGroups": [
    {
      "id": 12345,
      "key": "string",
      "name": "string",
      "description": "string",
      "type": "string",
      "allowMultipleTags": true,
      "sortOrder": 1,
      "tags": [
        {
          "id": 12345,
          "key": "string",
          "name": "string",
          "description": "string",
          "sortOrder": 1,
          "isSecondary": true,
          "translations": [
            {
              "type": "string",
              "culture": "string",
              "text": "string"
            }
          ]
        }
      ],
      "translations": [
        {
          "type": "string",
          "culture": "string",
          "text": "string"
        }
      ]
    }
  ],
  "translations": [
    {
      "type": "string",
      "culture": "string",
      "text": "string"
    }
  ],
  "documentationRequired": [
    {
      "documentTypeId": 12345,
      "documentDescription": "string",
      "translations": [
        {
          "type": "string",
          "culture": "string",
          "text": "string"
        }
      ]
    }
  ],
  "maximumUsage": 1
}

Errors

This endpoint only ever returns 200, 404 and 500. The other rows below are not returned by this endpoint; they are listed so you recognise them if a gateway or proxy in front of the API returns one.

StatusMeaningWhen
400Bad requestNot produced by this endpoint. A membership type that does not exist returns 404, not 400 — worth checking if you have generalised from other Configuration lookups, several of which do the opposite.
404Not foundNo membership type has that ID. The body is the plain-text sentence Membership type ID {id} was not found., including the full stop.
422Unprocessable entityNot produced by this endpoint.
500Internal server errorAn unexpected server-side failure while reading the type, its tags or its price level. The response body is empty — the reason is not returned to you. Note that this also covers faults reading the price level used to fill minAge/maxAge, so a broken price level can fail an otherwise valid membership type.
503Service unavailableNot produced by this endpoint. Treat it as an infrastructure response and retry.

This page as markdown · All pages · llms.txt