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

# List card activities

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

## Request

- Base URL: `https://api.voucherify.io`
- URL: `https://api.voucherify.io/v2/loyalties/programs/{programId}/members/{memberId}/cards/{cardId}/activities`
- Auth: one of:
  - API key in header `X-App-Id` and API key in header `X-App-Token`
  - HTTP bearer

Returns a cursor-paginated list of activities recorded for the member's card. The card must still be assigned to that member. Filters are `id`, `type`, and `created_at`. Default order is `-created_at`, then `id` ascending.

Returns 404 when the program doesn't exist, when the member doesn't exist in that program, or when the card isn't currently assigned to that member. The program is checked first, then the member. A DELETED member returns 404 with `resource_type` `member`. A missing assignment and a missing or deleted card both return 404 with `resource_type` `card`.

Returns 400 with key `invalid_query_params` when the query fails validation. That check runs before the program, member, and card lookup. A cursor that doesn't match `^lcrsacrd_[a-f0-9]+$`, a `limit` outside 1 to 100, an `order` other than `created_at` or `-created_at`, or an array that orders by both directions fails here.

After the program, member, and card are found, an unknown or expired cursor returns `invalid_or_expired_cursor`. A cursor recorded for different `filters` or `order` returns `cursor_and_query_mismatch`. The cursor stays valid when only `limit` changes.

## Query parameters

- `limit` integer, nullable
- `order` union
  - string[]
  - 'created_at' | '-created_at'
- `cursor` string, nullable
- `filters` V2LoyaltiesProgramsMembersCardsActivitiesListRequestQueryFilters: Field-specific filters for **GET** `/v2/loyalties/programs/{programId}/members/{memberId}/cards/{cardId}/activities`.
  - `junction` 'AND' | 'OR', nullable: Joins the field filters. Allowed values are `AND` and `OR`. Defaults to `AND`.
  - `id` LoyaltiesProgramsMembersCardsActivitiesListRequestQueryFiltersId: ID conditions. Format `lacrd_[a-f0-9]+`. At least one condition is required.
    - `conditions` object, required
      - `$is` union: Matches one value. A string or a one-element array. Format `lacrd_[a-f0-9]+`.
        - string
        - string[]
      - `$is_not` union: Excludes one value. A string or a one-element array. Format `lacrd_[a-f0-9]+`.
        - string
        - string[]
      - `$in` union: Matches any of the values. A string or an array of 1 to 100 values. Format `lacrd_[a-f0-9]+`.
        - string
        - string[]
      - `$not_in` union: Excludes any of the values. A string or an array of 1 to 100 values. Format `lacrd_[a-f0-9]+`.
        - string
        - string[]
  - `type` LoyaltiesProgramsMembersCardsActivitiesListRequestQueryFiltersType: Enum conditions. At least one condition is required.
    - `conditions` object, required
      - `$is` union: Matches one value. A string or a one-element array.
        - 'vl.card.created' | 'vl.card.assigned' | 'vl.card.unassigned' | 'vl.card.code_generation.succeeded' | 'vl.card.code_generation.failed'
        - string[]
      - `$is_not` union: Excludes one value. A string or a one-element array.
        - 'vl.card.created' | 'vl.card.assigned' | 'vl.card.unassigned' | 'vl.card.code_generation.succeeded' | 'vl.card.code_generation.failed'
        - string[]
      - `$in` union: Matches any of the values. A string or an array of 1 to 10 values.
        - 'vl.card.created' | 'vl.card.assigned' | 'vl.card.unassigned' | 'vl.card.code_generation.succeeded' | 'vl.card.code_generation.failed'
        - string[]
      - `$not_in` union: Excludes any of the values. A string or an array of 1 to 10 values.
        - 'vl.card.created' | 'vl.card.assigned' | 'vl.card.unassigned' | 'vl.card.code_generation.succeeded' | 'vl.card.code_generation.failed'
        - 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: Matches dates before the given value. An ISO 8601 date-time, as a string or a one-element array.
        - string, date-time
        - string[]
      - `$after` union: Matches dates after the given value. An ISO 8601 date-time, as a string or a one-element array.
        - string, date-time
        - string[]
      - `$is` union: Matches a date exactly the given number of days ago. A non-negative integer, as a string or a one-element array.
        - string
        - string[]
      - `$more_than` union: Matches dates more than the given number of days ago. A non-negative integer, as a string or a one-element array.
        - string
        - string[]
      - `$less_than` union: Matches dates less than the given number of days ago. A non-negative integer, as a string or a one-element array.
        - string
        - string[]
      - `$has_value` string, nullable: Matches when the field is set. The condition value is ignored.
      - `$is_unknown` string, nullable: Matches when the field is not set. The condition value is ignored.

## Response `200`

Cursor-paginated list of card activities.

- V2LoyaltiesProgramsMembersCardsActivitiesListResponseBody: Cursor-paginated list of card activities.
  - `data` CardActivity[], required: Card activities on the current page.
    - `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.
    - `id` string, required: Unique activity ID.
    - `card_id` string, required: ID of the card the activity relates to.
    - `type` 'vl.card.created' | 'vl.card.assigned' | 'vl.card.unassigned' | 'vl.card.code_generation.succeeded' | 'vl.card.code_generation.failed', required: Activity type. Allowed values: `vl.card.created`, `vl.card.assigned`, `vl.card.unassigned`, `vl.card.code_generation.succeeded`, and `vl.card.code_generation.failed`.
    - `data` CardActivityData, required: Snapshots of the objects involved at the time of the activity. Always contains `card` and `program`. For `vl.card.assigned` and `vl.card.unassigned`, also contains `member` and `member_card`. For `vl.card.code_generation.failed`, also contains `result`.
      - `card` Card, required: A full loyalty card snapshot.
        - `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`.
        - `program_id` string, required: Identifies the loyalty program.
        - `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.
      - `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.
      - `member` Member: 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`.
      - `member_card` MemberCard: 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: 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`.
              - …
            - `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.
          - `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`.
      - `result` CardCodeGenerationFailureResult: Outcome of a failed card code generation.
        - `details` string, required: Explains why code generation failed.
  - `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`: The query failed validation (`invalid_query_params`), the cursor is unknown or expired (`invalid_or_expired_cursor`), or the cursor was recorded for different `filters` or `order` (`cursor_and_query_mismatch`). Query validation runs before the program, member, and card lookup. Cursor checks run after all three are found. The cursor stays valid when only `limit` changes.
- `404`: The program doesn't exist (`resource_type` `program`), the member doesn't exist in that program (`resource_type` `member`), or the card isn't currently assigned to that member (`resource_type` `card`). The program is checked first, then the member. A DELETED member returns 404. A missing assignment and a deleted card both use `resource_type` `card`.
- `500`: Internal server error.

## Changes

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

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