Get member picture
GET /api/members/{memberId}/base64-member-picture
Success: 200 OK
- Products: Operator (
FOH), Consumer (CONSUMER), Integrations (INTEGRATIONS) (any one of these products, not all) - Features: Online Bookings (
ONLINEBOOK), Online Joining (ONLINEJOIN), TRP Integration (TRP), Front of House Generic Access (FOHGENERIC) (any one of these features, not all)
Overview
Retrieves a member's profile photograph — the one staff see at reception to confirm who is presenting a card — together with the member's photo upload history and the upload limits that apply to them. Use it to show the current photo, and to tell the member whether they can change it now and, if not, when they can.
A member with no photograph returns 200 with picture set to null, not 404; the upload history and limits are still returned. Most members typically have no picture, so treat a null picture as an ordinary outcome. A 404 now means the member itself does not exist.
Two limits govern a new photo, and both are reported in the response:
- Change frequency. After a successful upload the member must wait
uploadFrequencydays before uploading again. They can upload now iflastSuccessfulPhotoUploadUtcisnull, or if that time plusuploadFrequencydays is in the past; otherwise that same sum is the earliest time they can. A call to Update member picture made sooner is refused with409. - Photo-check attempts. Before a photo is stored it can be put through Gladstone's photo checks (face detection and the other content checks). Each completed check — accepted or rejected — counts as one attempt, and a member may make at most
maxRetriesattempts in a 24-hour window. Checks that fail for a server-side reason are not counted. A successful upload resets the count to0.
The attempt count is not cleared when its window ends; it is reset the next time the member makes an attempt. Work out whether it is still current yourself: if pictureValidationAttemptWindowStartUtc is null or more than 24 hours ago, treat the count as 0. If it is within the last 24 hours and pictureValidationAttemptCount has reached maxRetries, no further attempt is accepted until 24 hours after the window start. A maxRetries of 0 means attempts are unlimited.
The image comes back raw: no data URI prefix, no content type and no dimensions. You are told nothing about the format, so if you need to render it you will have to sniff the bytes or assume what your operator uploads.
This endpoint is single-member only — a linked member's picture cannot be read with a primary member's token.
Endpoint
GET {base_url}/api/members/{memberId}/base64-member-picture
{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 picture and upload status you want. Must be greater than 0; 0 and -999 are rejected with 400. With a member-scoped token this must be the token's own member — linked members are not accepted. |
Sample request
curl -X GET '{base_url}/api/members/{memberId}/base64-member-picture' \
-H 'Authorization: Bearer {accessToken}' \
-H 'X-Use-SSO: true'Response fields
All date-times are UTC. Treat them as UTC whether or not the value carries a Z suffix.
| Field | Type | Description |
|---|---|---|
picture | string | The image bytes, base64-encoded, or null when the member has no picture. Standard base64 with no data:image/...;base64, prefix — add one yourself if you are putting it in an img tag. The image format is whatever was uploaded and is not reported anywhere in the response. |
lastSuccessfulPhotoUploadUtc | string (date-time) | When the member's picture was last stored successfully, or null if no upload has been recorded for them. Add uploadFrequency days to find the earliest time the member can upload again. |
pictureValidationAttemptCount | integer (int32) | Photo-check attempts recorded in the window that started at pictureValidationAttemptWindowStartUtc. Counts accepted and rejected checks alike; checks that failed for a server-side reason are not counted. 0 when the member has no upload history, and reset to 0 by a successful upload. Not cleared when the window ends — see the Overview for how to tell whether it is current. |
pictureValidationAttemptWindowStartUtc | string (date-time) | Start of the 24-hour window that pictureValidationAttemptCount applies to, or null when the member has no upload history. A window more than 24 hours old has expired, and the count with it. |
uploadFrequency | integer (int32) | Minimum number of days the member must wait between successful uploads, as configured for your organisation. Defaults to 180 when not configured. 0 means there is no waiting period. |
maxRetries | integer (int32) | Maximum number of photo-check attempts the member may make in a 24-hour window. Defaults to 5 when not configured. 0 means attempts are unlimited. |
Sample response
{
"picture": "iVBORw0KGgoAAAANSUhEUgAA...",
"lastSuccessfulPhotoUploadUtc": "2026-04-14T09:31:07",
"pictureValidationAttemptCount": 2,
"pictureValidationAttemptWindowStartUtc": "2026-10-12T08:02:44",
"uploadFrequency": 180,
"maxRetries": 5
}{
"picture": null,
"lastSuccessfulPhotoUploadUtc": null,
"pictureValidationAttemptCount": 0,
"pictureValidationAttemptWindowStartUtc": null,
"uploadFrequency": 180,
"maxRetries": 5
}Errors
| Status | Meaning | When |
|---|---|---|
400 | Bad request | memberId is 0 or negative. The body is {memberId} is an invalid member ID. |
403 | Forbidden | The token belongs to a different member. Linked members are not accepted here. The body is The given member ID of {memberId} does not belong to the logged in member. |
404 | Not found | No member exists with that id. The body is Member with id '{memberId}' does not exist. A member who exists but has no picture is not an error: see picture. |
500 | Internal server error | An unexpected server-side failure while reading the picture or upload history. No detail is returned in the body. |