Update a member's basic profile details
PUT /api/members/{memberId}/profile
- Products: Operator (
FOH), Consumer (CONSUMER) (any one of these products, not all) - Features: Online Bookings (
ONLINEBOOK), Online Joining (ONLINEJOIN), Front of House Generic Access (FOHGENERIC) (any one of these features, not all)
Overview
Updates the core identity fields on a member record — name, title, date of birth, email, join date — and the three administrative codes that classify the member: siteId, statusId and priceLevelId.
This is a partial update with one exception. Every field you omit (or send as null) is left at its current value, so you can send only the fields you are changing. The exception is titleId: if you omit it, send null or send an empty string, the member's title is overwritten with the default title UNKNO. If you are not changing the title, send the member's current titleId back.
Validation runs against the member record as it will be after your changes, so a change to dateOfBirth is checked against the price level you are also setting in the same request. All validation failures return 400 with a plain-text message; nothing is written unless every check passes.
Linked members are permitted — a token issued for a member linked to {memberId} may call this endpoint.
Endpoint
PUT {base_url}/api/members/{memberId}/profile
{base_url} is the environment URL issued to your integration. See Authenticating with Gladstone APIs.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
memberId | integer (int32) | Yes | The member whose profile is updated. Must match the member id in your access token, or be a member linked to it, or the request is rejected. Any id in the body is ignored and replaced with this value. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
titleId | string | No | The member's form of address, as an id from the tenant's title list. 1–15 characters. Omitting this field does not leave the title alone — an absent, null or empty titleId resets the member's title to the default UNKNO. Send the current value back if you are not changing it. A value that does not exist in the title list is rejected with 400 Title ID {titleId} not found. |
firstName | string | No | The member's forename(s), maximum 25 characters. Omit, or send null or an empty string, to leave the existing value unchanged — this field cannot be cleared through this endpoint. |
lastName | string | No | The member's surname, 1–25 characters. Omit, or send null or an empty string, to leave the existing value unchanged — this field cannot be cleared through this endpoint. |
dateOfBirth | string (date-time) | No | The member's date of birth. Must not be in the future. Omit or send null to leave it unchanged. Some price levels are age-restricted: if the price level in force after this request requires a date of birth and the member has none, the call fails with A date of birth is required for this price level; if the date of birth falls outside the price level's age range it fails with The member's date of birth is outside of the age range defined on the price level. |
siteId | string | No | The centre the member is registered at, 1–15 characters. Must be an existing site id or the call fails with 400 Site ID {siteId} not found. Omit or send null to leave the member at their current site. |
statusId | string | No | The member's account status code (an id from the tenant's status list), 1–15 characters. Must exist or the call fails with 400 Status ID {statusId} not found. Omit or send null to leave the status unchanged. |
priceLevelId | string | No | The pricing band the member is charged at, 1–15 characters. Must exist or the call fails with 400 Price level ID {priceLevelId} not found. Changing it re-runs the age check described under dateOfBirth. Omit or send null to leave the price level unchanged. |
email | string | No | The member's home email address, maximum 255 characters. Validated as a well-formed address, and must not already belong to a different member — a clash returns 400 A member with that email address already exists. Omit or send null to leave the existing address unchanged. |
joinDate | string (date-time) | No | The date the member joined, used as the start of their membership history. Omit or send null to leave the existing join date unchanged. |
Sample request
curl -X PUT '{base_url}/api/members/{memberId}/profile' \
-H 'Authorization: Bearer {accessToken}' \
-H 'X-Use-SSO: true' \
-H 'Content-Type: application/json' \
-d '{
"titleId": "string",
"firstName": "string",
"lastName": "string",
"dateOfBirth": "2026-08-14T19:00:00Z",
"siteId": "string",
"statusId": "string",
"priceLevelId": "string",
"email": "member@example.com",
"joinDate": "2026-08-14T19:00:00Z"
}'Errors
A successful call returns 204 No Content with an empty body. Failures return a plain-text message, not JSON.
| Status | Meaning | When |
|---|---|---|
400 | Bad request | email is not a well-formed address: The email field is not a valid e-mail address. |
400 | Bad request | email already belongs to another member: A member with that email address already exists |
400 | Bad request | An unknown code was supplied: Price level ID … not found, Status ID … not found, Site ID … not found or Title ID … not found |
400 | Bad request | The price level requires a date of birth the member does not have: A date of birth is required for this price level |
400 | Bad request | The member's date of birth is outside of the age range defined on the price level |
400 | Bad request | A field breaches its length limit, or dateOfBirth is in the future — for example Last name cannot be more than 25 characters, Date of Birth must not be in the future |
404 | Not found | No member exists with that id: No member could be found with the ID {memberId} |
500 | Internal server error | The change could not be saved, or another unexpected server-side failure occurred. No detail is returned in the body. |