---
title: "Update program member"
method: PUT
path: "/v2/loyalties/programs/{programId}/members/{memberId}"
tags: ["Programs"]
---

# Update program member

`PUT /v2/loyalties/programs/{programId}/members/{memberId}`

Updates a program member's metadata. Provided object keys are merged into the existing metadata; omitted keys are preserved. Pass `metadata: null` to clear all metadata (sets it to an empty object).

This endpoint cannot change `status`. Use [Activate a program member](/api-reference/programs/activate-a-program-member) or [Deactivate a program member](/api-reference/programs/deactivate-a-program-member) for status transitions.

Records a `vl.member.updated` activity. Returns the updated member without the `cards` array. Returns `404` when the program or member does not exist. Returns `400` when the request body fails validation or the project `vl_member` metadata schema rejects the payload.

## Request body

- LoyaltiesProgramsMembersUpdateRequestBody — Request body schema for **PUT** `/v2/loyalties/programs/{programId}/members/{memberId}`. Only metadata is updatable. No additional properties are allowed.
  - `metadata` object, nullable, required — Member metadata to apply. Object keys are merged into existing metadata (omitted keys are preserved). Validated against the `vl_member` metadata schema when configured. Pass `null` to clear all metadata.

## Response `200`

The updated member (without cards).

- LoyaltiesProgramsMembersUpdateResponseBody — A loyalty program member.
  - `id` string, required — Identifies the member.
  - `customer_id` string, required — Identifies the enrolled customer.
  - `program_id` string, required — Identifies the loyalty program.
  - `status` 'ACTIVE' | 'INACTIVE' | 'DELETED', required — Current member status. Allowed values: `ACTIVE`, `INACTIVE`, `DELETED`. `INACTIVE` members cannot earn points or redeem rewards.
  - `metadata` object, required — Stores custom member metadata. Empty object when none is set.
  - `created_at` string, date-time, required — Records when the member was created (ISO 8601).
  - `updated_at` string, date-time, nullable, required — Records the last update (ISO 8601). `null` if the member has never been updated.
  - `object` 'member', required — Object type. Always `member`.

## Other responses

- `400` — Validation error - request body failed validation.
- `404` — Resource not found.
- `500` — Internal server error.

## Changes

- **2026-08-28** (v2) `dde32dd225f4` — 8 breaking, 1 info
  - removed the required property `created_at` from the response with the `200` status
  - removed the required property `customer_id` from the response with the `200` status
  - removed the required property `id` from the response with the `200` status
  - removed the required property `metadata` from the response with the `200` status
  - …5 more
- **2026-07-31** (v2) `e9b432b0cdf2` — 2 warning
  - deleted the `path` request parameter `memberId`
  - deleted the `path` request parameter `programId`
- **2026-07-31** (v2) `f6f2f3388362` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/voucherifyio/apis/voucherify-loyalty-v2-api/changes/v2/loyalties/programs/:programId/members/:memberId/put.md)

---

[API](https://skmtc.dev/voucherifyio/apis/voucherify-loyalty-v2-api.md) · [All operations](https://skmtc.dev/voucherifyio/apis/voucherify-loyalty-v2-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/voucherifyio/voucherify-loyalty-v2-api/revisions/dbfaefa45f8b/schema)
