---
title: "Get program membership"
method: GET
path: "/v2/loyalties/programs/{programId}/memberships/{customerId}"
tags: ["Programs"]
---

# Get program membership

`GET /v2/loyalties/programs/{programId}/memberships/{customerId}`

Returns a single membership - the member's full loyalty profile within the program, combining the member, the program, and the member's loyalty cards enriched with tier progress. Use `identification_type` to choose how the `customerId` path value is interpreted.

Returns `404` when the program does not exist, or when the customer/member has no membership in the program.

## Query parameters

- `identification_type` 'customer_id' | 'customer_source_id' | 'member_id'

## Response `200`

The membership in the program.

- Membership — A loyalty membership - the member's full loyalty profile within a program, combining the member, the program, and the member's loyalty cards with tier progress.
  - `member` Member, required — A loyalty program member.
    - `id` string, required — Unique member ID.
    - `customer_id` string, required — Unique Voucherify ID of the customer enrolled as this member.
    - `program_id` string, required — Unique Voucherify ID of the loyalty program the member belongs to.
    - `status` 'ACTIVE' | 'INACTIVE' | 'DELETED', required — Current member status. `INACTIVE` member can't earn points or redeem rewards.
    - `metadata` object, required — Free-form metadata attached to the member (empty object when none).
    - `created_at` string, date-time, required — Timestamp when the member was created (ISO 8601).
    - `updated_at` string, date-time, nullable, required — Timestamp when the member was last updated (ISO 8601), or `null` if never updated.
    - `object` 'member', required — Object type marker, always `member`.
  - `program` ProgramSimple, required — A loyalty program in its simple representation, as embedded in membership responses.
    - `id` string, required — Unique program identifier.
    - `name` string, required — Program name.
    - `status` 'DRAFT' | 'ACTIVE' | 'INACTIVE' | 'DELETED', required — Program status.
    - `metadata` object, required — User-defined key-value metadata. Defaults to `{}`.
    - `object` 'program', required — Object type marker. Always `program`.
  - `cards` MembershipCard[], required — Member's loyalty cards - one per card definition assigned to the program, each enriched with tier progress. Card codes are generated asynchronously, so `card.code` may be `null` right after member creation.
    - `member_role` 'OWNER' | 'MEMBER', required — Role of the member on this card. Currently, loyalty program members can have only the `OWNER` role.
    - `created_at` string, date-time, required — Timestamp when the card was assigned to the member (ISO 8601).
    - `card` CardSimple, required — A loyalty card in its simple representation, as embedded in member responses.
      - `id` string, required — Unique Voucherify ID of the card.
      - `card_definition_id` string, required — Unique Voucherify ID of the card definition the card was created from.
      - `card_type` 'INDIVIDUAL', required — Card type. Currently only `INDIVIDUAL` is supported.
      - `code` string, nullable, required — Human-readable card code. Card code generation is asynchronous - this field is `null` right after member creation and is populated shortly after, once the background code generation completes.
      - `lifetime_bucket` CardLifetimeBucket, required — Lifetime points counters of a card.
        - `points` CardLifetimeBucketPoints, required — Lifetime counters of regular points. All counters default to 0. The available balance is calculated as: `total` - `subtracted` - `expired` - `spent` - `refunded` + `returned` - `locked` + `unlocked` - `purchased_reversed`.
          - `total` number, required — Total accumulated points, including points added manually, earned by fulfilling earning rules and activated from pending points (excluding returned points).
          - `earned` number, required — Total points earned by fulfilling earning rules (does not include activated pending points or points added manually).
          - `added` number, required — Total manually added points.
          - `purchased` number, required — Total points purchased via a `LOYALTY_CARD_POINTS` reward (credited to the target card).
          - `purchased_reversed` number, required — Total purchased points reversed via reward refund.
          - `subtracted` number, required — Total manually subtracted points.
          - `expired` number, required — Total expired points.
          - `spent` number, required — Total points spent on rewards.
          - `refunded` number, required — Total refunded points (points that were earned by products which were later returned).
          - `returned` number, required — Total returned points (by returning a purchased reward).
          - `locked` number, required — Total locked points (by locking a purchased reward).
          - `unlocked` number, required — Total unlocked points (by unlocking a purchased reward).
        - `pending_points` CardLifetimeBucketPendingPoints, required — Lifetime counters of pending points. The available pending balance is max(`total` - `activated` - `canceled`, 0).
          - `total` number, required — Total pending points ever added.
          - `activated` number, required — Total pending points activated into regular points.
          - `canceled` number, required — Total pending points canceled.
      - `balance` CardBalance, required — Current available balance of a card.
        - `points` number, required — Currently available regular points.
        - `pending_points` number, required — Currently pending (not yet activated) points.
      - `next_expiration` CardNextExpiration, required — The nearest upcoming points expiration on a card.
        - `points` number, required — Number of points that will expire.
        - `date` string, date, required — Date when the points expire (`YYYY-MM-DD`).
      - `next_activation` CardNextActivation, required — The nearest upcoming pending points activation on a card. For the `EVENT_BASED` type, `date` is omitted and `cancel_date` is returned instead; for other types `date` is returned and `cancel_date` is omitted.
        - `points` number, required — Number of pending points to be activated.
        - `type` 'IMMEDIATE' | 'PERIOD_BASED' | 'FIXED_DATES' | 'EVENT_BASED', required — Pending points activation type from the card definition.
        - `date` string, date — Activation date (`YYYY-MM-DD`). Present for all types except `EVENT_BASED`.
        - `cancel_date` string, date — Date when the pending points are canceled if the activating event does not occur (`YYYY-MM-DD`). Present only for the `EVENT_BASED` type.
      - `object` 'card', required — Object type marker, always `card`.
    - `object` 'member_card', required — Object type marker, always `member_card`.
    - `tier_progress` MemberTierProgress, required — Member's tier progress on a card.
      - `current` MemberTierProgressCurrent, required — The member's current tier.
        - `tier` MemberTierProgressTier, required — Tier reference with id and name.
          - `id` string, nullable, required — Unique Voucherify ID of the tier (`lt_...`), or `null`.
          - `name` string, nullable, required — Tier name, or `null`.
        - `start_at` string, date-time, nullable, required — Timestamp when the current tier started for the member (ISO 8601), or `null`.
        - `expires_at` string, date-time, nullable, required — Timestamp when the member's tier expires (ISO 8601), or `null`.
        - `points` MemberTierProgressPoints, required — Points position within a tier.
          - `current` number, required — Member's current points counted towards the tier.
          - `min` number, required — Minimum points of the tier's range.
          - `max` number — Maximum points of the tier's range. Absent if this is the highest tier in the tier structure.
      - `tier_structure` MemberTierProgressTierStructure, required — Simple tier structure reference.
        - `id` string, required — Tier structure ID.
        - `object` 'tier_structure', required — Object type marker, always `tier_structure`.
      - `deferred` MemberTierProgressDeferred[], required — Upcoming tier assignments scheduled to start later, when the tier structure defers tier changes. The member will be assigned to the deferred tier at the start date.
        - `tier` MemberTierProgressTier, required — Tier reference with id and name.
          - `id` string, nullable, required — Unique Voucherify ID of the tier (`lt_...`), or `null`.
          - `name` string, nullable, required — Tier name, or `null`.
        - `start_at` string, date-time, nullable, required — Timestamp when the deferred tier starts (ISO 8601), or `null`.
        - `expires_at` string, date-time, nullable, required — Timestamp when the deferred tier expires (ISO 8601), or `null`.
      - `risks` MemberTierProgressRisk[], required — Upcoming risks of losing or downgrading the current tier.
        - `type` 'TIER_DOWNGRADE' | 'TIER_LEFT', required — Risk type - `TIER_DOWNGRADE` when the member would fall to a lower tier, `TIER_LEFT` when the member would leave the tier structure entirely.
        - `date` string, date-time, nullable, required — Date when the risk materializes (ISO 8601), or `null`.
        - `tier` MemberTierProgressTier, required — Tier reference with id and name.
          - `id` string, nullable, required — Unique Voucherify ID of the tier (`lt_...`), or `null`.
          - `name` string, nullable, required — Tier name, or `null`.
      - `opportunities` MemberTierProgressOpportunity[], required — Opportunities to reach higher tiers. Deferred tiers are not included in this list.
        - `valid_until` string, date-time, nullable, required — Deadline for taking advantage of the opportunity (ISO 8601), or `null`.
        - `tier` MemberTierProgressTier, required — Tier reference with id and name.
          - `id` string, nullable, required — Unique Voucherify ID of the tier (`lt_...`), or `null`.
          - `name` string, nullable, required — Tier name, or `null`.
        - `points` number, required — Points needed to reach the tier.
      - `object` 'member_tier_progress', required — Object type marker, always `member_tier_progress`.
  - `object` 'membership', required — Object type marker, always `membership`.

## Other responses

- `400` — Validation error - `identification_type` has an unsupported value.
- `404` — Resource not found - the program does not exist, or the customer/member has no membership in the program.
- `500` — Internal server error.

---

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