---
title: "Get customer memberships"
method: GET
path: "/v2/loyalties/memberships/{customerId}"
tags: ["Programs"]
---

# Get customer memberships

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

## Request

- Base URL: `https://api.voucherify.io`
- URL: `https://api.voucherify.io/v2/loyalties/memberships/{customerId}`
- Auth: one of:
  - API key in header `X-App-Id` and API key in header `X-App-Token`
  - HTTP bearer

Returns loyalty memberships for a customer, including the resolved customer and each membership's member, program, and cards. `identification_type` chooses how `customerId` is read. It defaults to `customer_id`.

`customer_id` and `customer_source_id` return every membership for that customer. `member_id` returns the customer linked to that member and only the membership for that member's program.

Cards omit `tier_progress`. See [Get program membership](/api-reference/programs/get-program-membership) when you need tier progress.

Returns an empty `memberships` array when the customer exists and has no memberships. Returns `404` when the customer or member cannot be resolved.

## Query parameters

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

## Response `200`

Customer memberships across programs.

- V2LoyaltiesMembershipsGetResponseBody: Cross-program memberships result for a customer.
  - `customer` MembershipsCustomer, required: Customer identity returned by the cross-program memberships endpoint.
    - `id` string, required: Identifies the customer.
    - `source_id` string, nullable, required: Returns the customer's `source_id`, or `null` when none is set.
    - `object` 'customer', required: Object type marker. Always `customer`.
  - `memberships` MembershipWithoutTierProgress[], required: List of memberships. For `customer_id` and `customer_source_id`, includes every program the customer belongs to. For `member_id`, includes only that member's program. Empty when the customer has no memberships.
    - `member` Member, required: 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`.
    - `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`.
    - `object` 'membership', required: Object type marker, always `membership`.
    - `cards` MemberCard[], required: List of the member's loyalty cards for the program. `card.code` may be `null` right after member creation, while code generation is still running. Tier progress is omitted.
      - `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: Identifies the card.
        - `card_definition_id` string, required: Identifies the card definition.
        - `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.
        - `object` 'card', required: Object type. Always `card`.
        - `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` 'member_card', required: Object type marker, always `member_card`.
  - `object` 'memberships_result', required: Object type marker. Always `memberships_result`.

## Other responses

- `400`: The query failed validation (`invalid_query_params`). `identification_type` must be `customer_id`, `customer_source_id`, or `member_id`.
- `404`: Customer's ID, source ID, or member ID not found.
- `500`: Internal server error.

## Changes

- **2026-10-15** (v2) `4134cde57cda`: 4 breaking, 4 info
  - removed the required property `allOf[#/components/schemas/MembershipsResult]/memberships/items/allOf[subschema #2]/cards/items/card/oneOf[#/components/schemas/CardSimple]/allOf[subschema #2]/card_definition_id` from the response with the `200` status
  - removed the required property `allOf[#/components/schemas/MembershipsResult]/memberships/items/allOf[subschema #2]/cards/items/card/oneOf[#/components/schemas/CardSimple]/allOf[subschema #2]/code` from the response with the `200` status
  - removed the required property `allOf[#/components/schemas/MembershipsResult]/memberships/items/allOf[subschema #2]/cards/items/card/oneOf[#/components/schemas/CardSimple]/allOf[subschema #2]/id` from the response with the `200` status
  - removed the required property `allOf[#/components/schemas/MembershipsResult]/memberships/items/allOf[subschema #2]/cards/items/card/oneOf[#/components/schemas/CardSimple]/allOf[subschema #2]/object` from the response with the `200` status
  - …4 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/voucherifyio/apis/voucherify-loyalty-v2-api/changes/v2/loyalties/memberships/:customerId/get.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.dev/voucherifyio/apis/voucherify-loyalty-v2-api/revisions/e0d9f2d2532f?raw)
