> ## Documentation Index
> Fetch the complete documentation index at: https://voucherify-rc-lv2-guides.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Update program member

> 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.



## OpenAPI

````yaml /openapi/loyalties-v2.json put /v2/loyalties/programs/{programId}/members/{memberId}
openapi: 3.1.0
info:
  title: Voucherify Loyalty v2 API
  version: 2.0.0
  description: >-
    Complete OpenAPI specification for the Voucherify Loyalty v2 API.

    All endpoints require the LOYALTY_V2 feature flag.


    Combined from per-domain specs: programs.yaml, members.yaml,
    program-operations.yaml, card-definitions.yaml, earning-rules.yaml,
    tier-structures.yaml, benefits.yaml, rewards.yaml, examine.yaml
servers:
  - url: '{protocol}://{host}'
    variables:
      protocol:
        default: https
        enum:
          - https
          - http
      host:
        default: api.voucherify.io
security:
  - X-App-Id: []
    X-App-Token: []
  - bearerAuth: []
tags:
  - name: Programs
    description: >-
      Loyalty program CRUD, lifecycle management, program-scoped resource
      assignments (card definitions, earning rules, rewards, tier structures),
      member management (create, list, get, update, activate, deactivate,
      delete), membership retrieval (member + program + cards with tier
      progress, by customer ID, customer source ID, or member ID), card
      operations (points adjustment, pending points, expiring points,
      transactions), reward purchases, and activity history.
  - name: Card Definitions
    description: >-
      CRUD operations, lifecycle management, and activity history for card
      definitions. Card definitions describe the configuration for loyalty
      cards, including code generation, points expiration, earning/spending
      limits, pending points, refunds, and balance settings.
  - name: Earning Rules
    description: >-
      Manage earning rules that define how customers earn points or receive
      incentives based on triggers (events, segments, custom events). Includes
      CRUD, lifecycle, and activity history.
  - name: Tier Structures
    description: >-
      CRUD operations, lifecycle management, and activity history for tier
      structures. Includes nested tier definitions (create, list, update,
      delete) within tier structures. Tier structures define the tiering model
      for loyalty programs — how members qualify for and move between tiers.
  - name: Benefits
    description: >-
      Manage benefit definitions (fixed points, proportional points, material,
      digital). Includes CRUD, lifecycle transitions, and activity history.
  - name: Rewards
    description: >-
      CRUD, lifecycle operations, and activity history for reward definitions.
      Rewards can be material (product/SKU) or digital (discount coupons, gift
      vouchers).
  - name: Examine
    description: >-
      Evaluation endpoints that estimate earning opportunities and reward
      availability for a customer across their loyalty program memberships,
      without side effects.
paths:
  /v2/loyalties/programs/{programId}/members/{memberId}:
    parameters:
      - name: programId
        in: path
        required: true
        description: Unique loyalty program ID (format `lprg_[a-f0-9]+`).
        schema:
          type: string
          pattern: ^lprg_[a-f0-9]+$
      - name: memberId
        in: path
        required: true
        description: Program member ID (format `lmbr_[a-f0-9]+`).
        schema:
          type: string
          pattern: ^lmbr_[a-f0-9]+$
    put:
      tags:
        - Programs
      summary: Update program member
      description: >-
        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.
      operationId: updateProgramMember
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberUpdateRequest'
      responses:
        '200':
          description: The updated member (without cards).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
              examples:
                Updated member metadata:
                  value:
                    id: lmbr_128f962dbc8c4ba5dc
                    customer_id: cust_6onRrs4kCnvSVrTs5YtDPFBG
                    program_id: lprg_128f58429f4c4bf7b2
                    status: ACTIVE
                    metadata:
                      tier_note: gold
                      source: crm
                    created_at: '2026-06-11T15:59:41.298Z'
                    updated_at: '2026-07-30T10:15:22.401Z'
                    object: member
        '400':
          description: Validation error - request body failed validation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                Member not found:
                  value:
                    code: 404
                    key: not_found
                    message: Resource not found
                    details: Cannot find member with id lmbr_128f92dbc8c4ba5dc
                    request_id: v-12cf8bce66569748e7
                    resource_id: lmbr_128f92dbc8c4ba5dc
                    resource_type: member
                Program not found:
                  value:
                    code: 404
                    key: not_found
                    message: Resource not found
                    details: Cannot find program with id lprg_12858429f4c4bf7b2
                    request_id: v-12cf8b960f5adeeb76
                    resource_id: lprg_12858429f4c4bf7b2
                    resource_type: program
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    MemberUpdateRequest:
      type: object
      description: >-
        Request body for updating a program member. Only metadata is updatable.
        No additional properties are allowed.
      properties:
        metadata:
          description: >-
            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.
          oneOf:
            - type: object
            - type: 'null'
      required:
        - metadata
      additionalProperties: false
    Member:
      type: object
      description: A loyalty program member.
      properties:
        id:
          type: string
          pattern: ^lmbr_[a-f0-9]+$
          description: Unique member ID.
        customer_id:
          type: string
          pattern: ^cust_[a-zA-Z0-9]+
          description: Unique Voucherify ID of the customer enrolled as this member.
        program_id:
          type: string
          pattern: ^lprg_[a-f0-9]+$
          description: Unique Voucherify ID of the loyalty program the member belongs to.
        status:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - DELETED
          description: >-
            Current member status. `INACTIVE` member can't earn points or redeem
            rewards.
        metadata:
          type: object
          description: Free-form metadata attached to the member (empty object when none).
        created_at:
          type: string
          format: date-time
          description: Timestamp when the member was created (ISO 8601).
        updated_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Timestamp when the member was last updated (ISO 8601), or `null` if
            never updated.
        object:
          type: string
          const: member
          description: Object type marker, always `member`.
      required:
        - id
        - customer_id
        - program_id
        - status
        - metadata
        - created_at
        - updated_at
        - object
    ErrorResponse:
      type: object
      description: Standard error response returned by all Loyalty v2 endpoints.
      properties:
        code:
          type: integer
          description: HTTP status code of the error.
        key:
          type: string
          description: Machine-readable error key.
        message:
          type: string
          description: Human-readable error message.
        details:
          type: string
          description: Additional details about the error.
        request_id:
          type: string
          description: Unique identifier of the request that produced the error.
        resource_id:
          type: string
          description: Unique identifier of the resource that produced the error.
        resource_type:
          type: string
          description: Type of the resource that produced the error.
  securitySchemes:
    X-App-Id:
      type: apiKey
      name: X-App-Id
      in: header
    X-App-Token:
      type: apiKey
      name: X-App-Token
      in: header
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````