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

# List program member activities

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

Returns a cursor-paginated list of lifecycle and card-assignment activities recorded for the member. Results can be filtered by `id`, `type`, or `created_at`.

Returns `400` when the provided cursor is invalid or has expired. Returns `404` when the program or member does not exist.

## Query parameters

- `limit` integer, nullable
- `order` union
  - string[]
  - 'created_at' | '-created_at'
- `cursor` string, nullable
- `filters` LoyaltiesProgramsMembersActivitiesListRequestQueryFilters — Field-specific filters for **GET** `/v2/loyalties/programs/{programId}/members/{memberId}/activities`.
  - `junction` 'AND' | 'OR', nullable — How multiple field filters are combined. Defaults to `AND`.
  - `id` LoyaltiesProgramsMembersActivitiesListRequestQueryFiltersId — ID filter conditions for member activity 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[]
  - `type` LoyaltiesProgramsMembersActivitiesListRequestQueryFiltersType — Enum filter conditions for member activity types. At least one condition is required.
    - `conditions` object, required
      - `$is` union — Value equals. Single value or an array with exactly one value.
        - 'vl.member.created' | 'vl.member.updated' | 'vl.member.deleted' | 'vl.member.activated' | 'vl.member.deactivated' | 'vl.member.card.assigned' | 'vl.member.card.unassigned'
        - string[]
      - `$is_not` union — Value does not equal. Single value or an array with exactly one value.
        - 'vl.member.created' | 'vl.member.updated' | 'vl.member.deleted' | 'vl.member.activated' | 'vl.member.deactivated' | 'vl.member.card.assigned' | 'vl.member.card.unassigned'
        - string[]
      - `$in` union — Value is one of. Single value or an array of 1-10 values.
        - 'vl.member.created' | 'vl.member.updated' | 'vl.member.deleted' | 'vl.member.activated' | 'vl.member.deactivated' | 'vl.member.card.assigned' | 'vl.member.card.unassigned'
        - string[]
      - `$not_in` union — Value is not one of. Single value or an array of 1-10 values.
        - 'vl.member.created' | 'vl.member.updated' | 'vl.member.deleted' | 'vl.member.activated' | 'vl.member.deactivated' | 'vl.member.card.assigned' | 'vl.member.card.unassigned'
        - 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 member activities.

- LoyaltiesProgramsMembersActivitiesListResponseBody — Response body schema for **GET** `/v2/loyalties/programs/{programId}/members/{memberId}/activities`.
  - `data` MemberActivity[], required — Member activities on the current page.
    - `id` string, required — Unique activity ID.
    - `member_id` string, required — ID of the member the activity relates to.
    - `type` 'vl.member.created' | 'vl.member.updated' | 'vl.member.deleted' | 'vl.member.activated' | 'vl.member.deactivated' | 'vl.member.card.assigned' | 'vl.member.card.unassigned', required — Activity type. Allowed values: `vl.member.created`, `vl.member.updated`, `vl.member.deleted`, `vl.member.activated`, `vl.member.deactivated`, `vl.member.card.assigned`, and `vl.member.card.unassigned`.
    - `data` MemberActivityData, required — Snapshots of the objects involved at the time of the activity. Always contains `member` and `program`. For `vl.member.card.assigned` and `vl.member.card.unassigned`, also contains `card` and `member_card`.
      - `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` Program, required — A loyalty program.
        - `id` string — Unique program identifier.
        - `name` string — Program name.
        - `status` 'DRAFT' | 'ACTIVE' | 'INACTIVE' | 'DELETED' — Program status.
        - `start_date` string, date-time, nullable — Program validity start date (ISO 8601), or `null` when not set.
        - `end_date` string, date-time, nullable — Program validity end date (ISO 8601), or `null` when not set.
        - `validity_hours` ProgramValidityHours — Validity hours configuration of the program.
          - `type` 'DAILY' | 'ANY_TIME' — Validity hours mode.
          - `daily` ProgramValidityDailyHours[] — Daily validity windows. Present only when `type` is `DAILY`.
            - `days_of_week` integer[] — Days of week the window applies to. 0 = Sunday through 6 = Saturday.
            - `start_time` string — Window start time in `HH:mm` format.
            - `end_time` string — Window end time in `HH:mm` format.
        - `metadata` object — Arbitrary key-value metadata. Defaults to `{}`.
        - `created_at` string, date-time — Creation timestamp (ISO 8601).
        - `updated_at` string, date-time, nullable — Last update timestamp (ISO 8601), or `null` when never updated.
        - `object` 'program' — Object type marker.
      - `card` Card — A full loyalty card snapshot.
        - `id` string, required — Identifies the card.
        - `program_id` string, required — Identifies the loyalty program.
        - `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. `null` until asynchronous code generation finishes.
        - `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.
        - `customer_id` string, nullable — Identifies the customer linked to the card.
        - `member_id` string, nullable — Identifies the member linked to the card.
        - `created_at` string, date-time, required — Records when the card was created (ISO 8601).
        - `updated_at` string, date-time, nullable, required — Records the last update (ISO 8601). `null` if the card has never been updated.
        - `object` 'card', required — Object type. Always `card`.
      - `member_card` object — A member's loyalty card - the member's assignment to the card (`member_role`, `created_at`) combined with the card details in the `card` object.
        - `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`.
              - …
            - `pending_points` CardLifetimeBucketPendingPoints, required — Lifetime counters of pending points. The available pending balance is max(`total` - `activated` - `canceled`, 0).
              - …
          - `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` unknown, required
    - `created_at` string, date-time, required — Timestamp when the activity was recorded (ISO 8601).
    - `group_id` string — ID grouping activities recorded within the same request.
    - `source` ActivitySource — Origin of an activity.
      - `channel` 'USER_PORTAL' | 'API' | 'CLIENT_API' | 'INTERNAL', required — Channel through which the activity was triggered.
      - `user` ActivitySourceUser — Dashboard user who triggered an activity.
        - `id` string, required — Identifies the user.
      - `api_key` ActivitySourceApiKey — API key used to trigger an activity.
        - `name` string — API key name.
        - `app_id` string — Application ID of the API key.
        - `client_app_id` string — Client application ID of the API key.
  - `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` — Query parameters failed validation.
- `404` — The program or member was not found.
- `500` — Internal server error.

## Changes

- **2026-09-17** (v2) `d617a829fe0d` — 2 warning, 7 info
  - deleted the `path` request parameter `memberId`
  - deleted the `path` request parameter `programId`
  - removed the non-success response with the status `409`
  - added the optional property `data/items/data/card` to the response with the `200` status
  - …5 more
- **2026-09-01** (v2) `a972e3958604` — 1 info
  - the response property `cursor/oneOf[#/components/schemas/ListCursor]/expires_at` became required for the status `200`
- **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-31** (v2) `f6f2f3388362` — 1 warning
  - added the new `vl.member.updated` enum value to the `data/items/type` response property 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

[Full history](https://skmtc.dev/voucherifyio/apis/voucherify-loyalty-v2-api/changes/v2/loyalties/programs/:programId/members/:memberId/activities/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/e19930243049?raw)
