---
title: "List program members"
method: GET
path: "/v2/loyalties/programs/{programId}/members"
tags: ["Programs"]
---

# List program members

`GET /v2/loyalties/programs/{programId}/members`

Returns a cursor-paginated list of members of the program. Results can be filtered by ID, status, customer ID and creation date. Results can be ordered by creation date, status, or customer ID (ascending or descending). The same field cannot be ordered both ascending and descending at the same time.

Returns `404` when the program does not exist.

List items do not include the `cards` array. Use the following endpoints to retrieve cards for a given member:
- [Get customer memberships](/api-reference/programs/get-customer-memberships),
- [Get program member](/api-reference/programs/get-program-member),
- [Get program membership](/api-reference/programs/get-program-membership).

## Query parameters

- `limit` integer, nullable
- `order` union
  - string[]
  - '-created_at' | 'created_at' | 'status' | '-status' | 'customer_id' | '-customer_id'
- `cursor` string, nullable
- `filters` LoyaltiesProgramsMembersListRequestQuery — Request query schema for **GET** `/v2/loyalties/programs/{programId}/members`.
  - `junction` 'AND' | 'OR', nullable — How multiple field filters are combined. Defaults to `AND`.
  - `id` LoyaltiesProgramsMembersListRequestQueryId — ID filter conditions for member IDs. At least one condition is required.
    - `conditions` object, required
      - `$is` union — Value equals. Single value or an array with exactly one value.
        - string
        - string[]
      - `$is_not` union — Value does not equal. Single value or an array with exactly one value.
        - string
        - string[]
      - `$in` union — Value is one of. Single value or an array of 1-100 values.
        - string
        - string[]
      - `$not_in` union — Value is not one of. Single value or an array of 1-100 values.
        - string
        - string[]
  - `status` LoyaltiesProgramsMembersListRequestQueryStatus — Enum filter conditions for member status. Allowed values are `ACTIVE` and `INACTIVE`. At least one condition is required.
    - `conditions` object, required
      - `$is` union — Value equals. Single value or an array with exactly one value.
        - 'ACTIVE' | 'INACTIVE'
        - string[]
      - `$is_not` union — Value does not equal. Single value or an array with exactly one value.
        - 'ACTIVE' | 'INACTIVE'
        - string[]
      - `$in` union — Value is one of. Single value or an array of 1-10 values.
        - 'ACTIVE' | 'INACTIVE'
        - string[]
      - `$not_in` union — Value is not one of. Single value or an array of 1-10 values.
        - 'ACTIVE' | 'INACTIVE'
        - string[]
  - `customer_id` LoyaltiesProgramsMembersListRequestQueryCustomerId — ID filter conditions for customer IDs. At least one condition is required.
    - `conditions` object, required
      - `$is` union — Value equals. Single value or an array with exactly one value.
        - string
        - string[]
      - `$is_not` union — Value does not equal. Single value or an array with exactly one value.
        - string
        - string[]
      - `$in` union — Value is one of. Single value or an array of 1-100 values.
        - string
        - string[]
      - `$not_in` union — Value is not one of. Single value or an array of 1-100 values.
        - string
        - string[]
  - `created_at` DateFilter — Date filter conditions. `$before`/`$after` take date strings (ISO 8601); `$is`, `$more_than`, `$less_than` take non-negative integers; `$has_value`/`$is_unknown` are presence checks. Each condition accepts a single value or an array with exactly one value. At least one condition is required.
    - `conditions` object, required
      - `$before` union — Date is before the given date.
        - string, date-time
        - string[]
      - `$after` union — Date is after the given date.
        - string, date-time
        - string[]
      - `$is` union — Date matches the given non-negative integer value.
        - string
        - string[]
      - `$more_than` union — More than the given non-negative integer value.
        - string
        - string[]
      - `$less_than` union — Less than the given non-negative integer value.
        - string
        - string[]
      - `$has_value` string, nullable — Field has a value (presence check).
      - `$is_unknown` string, nullable — Field has no value (absence check).

## Response `200`

Cursor-paginated list of members.

- LoyaltiesProgramsMembersListResponseBody — Response body schema for **GET** `/v2/loyalties/programs/{programId}/members`.
  - `data` Member[], required — Members on the current page (without the `cards` array).
    - `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`.
  - `cursor` ListCursor, required — Pagination cursor.
    - `next` string, required — Cursor value to pass as the `cursor` query parameter to fetch the next page.
    - `expires_at` string, date-time, required — Timestamp when the cursor expires.
  - `object` 'list', required — Object type marker, always `list`.

## Other responses

- `400` — Validation error - query parameters failed validation, or the cursor is invalid, expired, or does not match the query.
- `404` — Resource (program) not found.
- `500` — Internal server error.

## Changes

- **2026-09-01** (v2) `a972e3958604` — 1 info
  - the response property `cursor/oneOf[#/components/schemas/ListCursor]/expires_at` became required for the status `200`
- **2026-09-01** (v2) `45dab307cb4a` — 1 warning, 1 info
  - deleted the `path` request parameter `programId`
  - removed the non-success response with the status `409`
- **2026-07-31** (v2) `703a0a42ea43` — 1 breaking, 1 info
  - added `#/components/schemas/ListCursor` to the `cursor` response property `oneOf` list for the response status `200`
  - removed `#/components/schemas/MemberListCursor` from the `cursor` response property `oneOf` list for the response status `200`
- **2026-07-17** (v2) `4cbaee5a82d5` — 8 info
  - added the optional property `resource_id` to the response with the `400` status
  - added the optional property `resource_id` to the response with the `404` status
  - added the optional property `resource_id` to the response with the `409` status
  - added the optional property `resource_id` to the response with the `500` status
  - …4 more
- **2026-07-06** (v2) `341403eb19e5` — 9 breaking, 13 warning, 20 info
  - added the pattern `^lcrsmbr_[a-f0-9]+$` to the `query` request parameter `cursor`
  - added the pattern `^lprg_[a-f0-9]+$` to the `path` request parameter `programId`
  - the response property `code` became optional for the status `400`
  - the response property `code` became optional for the status `500`
  - …38 more

[Change history](https://skmtc.dev/voucherifyio/apis/voucherify-loyalty-v2-api/changes/v2/loyalties/programs/:programId/members/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-service-production.skmtc.workers.dev/v1/apis/voucherifyio/voucherify-loyalty-v2-api/revisions/dbfaefa45f8b/schema)
