# Retrieve a member's profile progress

`GET /api/members/{memberId}/profile-progress`

- **Success:** `200 OK`
- **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)

HTML version: [Retrieve a member's profile progress](https://support.gladstonesoftware.cloud/reference/members/retrieve-a-members-profile-progress)

## Overview

Returns the profile completion percentage recorded against one member — a single number between `0` and `100`, intended for onboarding user interfaces: a progress bar, or a prompt asking the member to fill in the details they are missing.

The percentage is stored, not calculated on read. The platform keeps it in one field on the member's profile-data record, and that field is written by whichever client last called `PUT /api/members/{memberId}/profile-progress`. This endpoint hands back that stored figure unchanged — it does not inspect the member's profile and work out how much of it is populated, and it does not tell you which details are still missing. If your integration is the thing driving members through profile completion, you own both the calculation and the write; if another client owns it, treat the number as that client's opinion of completeness rather than a platform-wide fact.

A member who has never had a percentage recorded still returns `200 OK`, with `completedPercentage` set to `null`. That is not the same as a recorded `0`, which means a record exists and says nothing is complete.

Access is checked against your access token: the member ID in the path must be the member the token was issued for, or a member linked to that member — a parent's token reading a child's account, for example. Anything else is rejected with `403 Forbidden`. A member ID that is not a whole number is rejected with `400 Bad Request` before the member is ever looked up.

## Endpoint

`GET {base_url}/api/members/{memberId}/profile-progress`

`{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 |
|------|------|----------|-------------|
| `memberId` | integer (int32) | Yes | The member whose recorded completion percentage you want. Must be the member your access token was issued for, or a member linked to them, otherwise the request is rejected with `403 Forbidden`. |

## Sample request

```bash title="cURL"
curl -X GET '{base_url}/api/members/{memberId}/profile-progress' \
  -H 'Authorization: Bearer {accessToken}' \
  -H 'X-Use-SSO: true'
```

## Response fields

| Field | Type | Description |
|-------|------|-------------|
| `completedPercentage` | integer (int32) | How complete the member's profile is, from `0` to `100`. This is the value last written through `PUT /api/members/{memberId}/profile-progress`, not a figure the platform derives from the profile itself. `null` means the member has no completion record at all — treat that as "not tracked", not as zero. |

## Sample response

```json title="200 OK"
{
  "completedPercentage": 1
}
```

## Errors

| Status | Meaning | When |
|--------|---------|------|
| `404` | Not found | No member exists with that ID. The body is the plain-text message `{memberId} is an invalid member ID`. A member who exists but has never had progress recorded returns `200 OK` with a `null` percentage instead. |
| `500` | Internal server error | Any unexpected server-side failure while reading the member. The response has no body, so there is nothing to parse — retry, and raise it with Gladstone if it persists. |
