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

# List member benefit transactions

`GET /v2/loyalties/programs/{programId}/members/{memberId}/benefits/transactions`

## Request

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

Lists benefit transactions (benefit fulfillments) for a given program member, with cursor-based pagination.

Supports filtering by benefit ID and creation date.

## Query parameters

- `limit` integer, nullable
- `order` union
  - string[]
  - 'id' | '-id'
- `cursor` string, nullable
- `filters` V2LoyaltiesProgramsMembersBenefitsTransactionsListRequestQuery: Request query schema for **GET** `/v2/loyalties/programs/{programId}/members/{memberId}/benefits/transactions`.
  - `junction` 'AND' | 'OR', nullable: Joins the field filters. Allowed values are `AND` and `OR`. Defaults to `AND`.
  - `benefit_id` LoyaltiesProgramsMembersBenefitsTransactionsListRequestQueryBenefitId: ID filter conditions for benefit ids. Values must match pattern `^lben_[a-f0-9]+$`. `$is`/`$is_not` accept a single value (string or 1-element array); `$in`/`$not_in` accept a string or an array of 1-100 values.
    - `conditions` object, required
      - `$is` union: Matches one value. A string or a one-element array. Format `lben_[a-f0-9]+`.
        - string
        - string[]
      - `$is_not` union: Excludes one value. A string or a one-element array. Format `lben_[a-f0-9]+`.
        - string
        - string[]
      - `$in` union: Matches any of the values. A string or an array of 1 to 100 values. Format `lben_[a-f0-9]+`.
        - string
        - string[]
      - `$not_in` union: Excludes any of the values. A string or an array of 1 to 100 values. Format `lben_[a-f0-9]+`.
        - string
        - string[]
  - `created_at` TransactionFilterDateConditions: Date filter conditions. `$before`/`$after` accept an ISO date-time string. `$is`/`$more_than`/`$less_than` accept a non-negative integer number of days ago. `$has_value`/`$is_unknown` accept any single value and match rows where the field is set / not set. Single values may also be passed as 1-element arrays.
    - `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
        - string[]
      - `$after` union: Matches dates after the given value. An ISO 8601 date-time, as a string or a one-element array.
        - string
        - 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`

Paginated list of benefit transactions.

- V2LoyaltiesProgramsMembersBenefitsTransactionsListResponseBody: Cursor-paginated list of benefit transactions.
  - `data` BenefitTransaction[], required: List of benefit transactions.
    - `program_id` string: Unique identifier of the loyalty program (format `lprg_...`).
    - `member_id` string: Unique identifier of the program member (format `lmbr_...`).
    - `created_at` string, date-time: Timestamp when the transaction was created (ISO 8601).
    - `updated_at` string, date-time, nullable: Timestamp when the transaction was last updated (ISO 8601), or `null`.
    - `id` string: Unique benefit transaction identifier (format `lbtx_...`).
    - `benefit_id` string: Unique identifier of the fulfilled benefit (format `lben_...`).
    - `earning_rule_id` string: Unique identifier of the earning rule that triggered the fulfillment (format `lern_...`).
    - `type` 'FULFILLMENT': Transaction type. Always `FULFILLMENT`.
    - `details` BenefitTransactionDetails: Details of a `FULFILLMENT` benefit transaction.
      - `reason` string, nullable: Human-readable reason for the fulfillment. Typically `{program name} / {earning rule name}`.
      - `rejection` BenefitTransactionRejection: Rejection details for a benefit transaction.
        - `reason` string: Machine-readable rejection reason. Known values are `OUT_OF_STOCK`, `BENEFIT_NOT_FOUND`, `UNEXPECTED_ERROR`, `TRIGGER_LIMIT_COOLDOWN_NOT_PASSED`, and `TRIGGER_LIMIT_FREQUENCY_EXCEEDED`. Other error keys can be passed through, so treat this list as non-exhaustive.
        - `details` union: Additional rejection context. Stock, not-found, and unexpected-error rejections use a string. Trigger-limit rejections use an object.
          - string: Human-readable rejection message. Used for `OUT_OF_STOCK`, `BENEFIT_NOT_FOUND`, and `UNEXPECTED_ERROR`.
          - object: Trigger-limit cooldown rejection details. Returned when `reason` is `TRIGGER_LIMIT_COOLDOWN_NOT_PASSED`.
            - `type` 'COOLDOWN', required: Trigger-limit check that failed. Always `COOLDOWN`.
            - `remaining_ms` number, required: Milliseconds remaining before the earning rule cooldown ends.
          - object: Trigger-limit frequency rejection details. Returned when `reason` is `TRIGGER_LIMIT_FREQUENCY_EXCEEDED`.
            - `type` 'FREQUENCY', required: Trigger-limit check that failed. Always `FREQUENCY`.
            - `current_count` number, required: Number of times the earning rule has already triggered in the limited period.
            - `limit` number, required: Maximum number of times the earning rule may trigger in the limited period.
      - `metadata` BenefitTransactionDetailsMetadata: Benefit transaction metadata written at fulfillment time.
        - `event_id` string: Unique identifier of the event that triggered the fulfillment. Custom events use the `evcus_` prefix; other source events use their own ID formats.
        - `earning_item_id` string, nullable: Identifier of the earning item that produced the benefit (format `lernei_...`). `null` when the earning item is unknown.
      - `result` object, nullable: Benefit fulfillment result envelope.
        - `details` object: Fulfillment payload. Shape depends on the benefit type (`MATERIAL` or `DIGITAL`). Digital fulfillments also include published voucher fields at this level.
          - `material` BenefitMaterial: Material benefit - a physical product or SKU. Exactly one of `product` or `sku` is required, matching the `type`. In requests, the other property may be omitted or set to `null`. In responses, it is omitted.
            - `type` 'PRODUCT' | 'SKU', required: Whether the benefit is a whole product or a specific SKU.
            - `product` LoyaltyV2ActivityBenefitMaterialProduct: Product reference for a material benefit.
              - …
            - `sku` LoyaltyV2ActivityBenefitMaterialSKU: SKU reference for a material benefit.
              - …
          - `digital` BenefitDigital: Digital benefit - a reward sourced from a Voucherify campaign. Exactly one of `gift_vouchers` or `discount_coupons` is required, matching the `type`. In requests, the other property may be omitted or set to `null`. In responses, it is omitted. The referenced campaign must exist and its campaign type must match the benefit's digital type.
            - `type` 'GIFT_VOUCHERS' | 'DISCOUNT_COUPONS', required: Type of the digital reward.
            - `gift_vouchers` LoyaltyV2ActivityBenefitDigitalGiftVouchers: Gift vouchers digital benefit configuration.
              - …
            - `discount_coupons` LoyaltyV2ActivityBenefitDigitalDiscountCoupons: Discount coupons digital benefit configuration.
              - …
          - `voucher_id` string: Published voucher ID for digital fulfillments.
          - `code` string: Published voucher code for digital fulfillments.
          - `balance` number: Gift voucher balance after credit. Present for `GIFT_VOUCHERS` digital fulfillments. Distinct from `digital.gift_vouchers.balance`, which is the configured credit amount.
    - `status` 'PENDING' | 'APPROVED' | 'REJECTED': Transaction status. `PENDING` - created, awaiting processing; `APPROVED` - completed successfully; `REJECTED` - rejected (see `details.rejection`).
    - `object` 'benefit_transaction': Object type marker. Always `benefit_transaction`.
  - `cursor` object, nullable, required: Pagination cursor. `null` when there are no more results.
    - `next` string, required: Cursor to pass as the `cursor` query parameter to fetch the next page (format `lcrsbtx_...`).
    - `expires_at` string, date-time, required: Timestamp when the cursor expires.
  - `object` 'list', required: Object type marker. Always `list`.

## Other responses

- `400`: Invalid query parameters or pagination cursor.
- `404`: Resource (program or member) not found.
- `500`: Internal server error.

## Changes

- **2026-10-14** (v2) `d29b33490051`: 1 breaking, 11 warning, 1 info
  - the `allOf[#/components/schemas/MemberBenefitTransactionListResponse]/data/items/` response's property type changed from `object` to no type for status `200`
  - removed the optional property `allOf[#/components/schemas/MemberBenefitTransactionListResponse]/data/items/benefit_id` from the response with the `200` status
  - removed the optional property `allOf[#/components/schemas/MemberBenefitTransactionListResponse]/data/items/created_at` from the response with the `200` status
  - removed the optional property `allOf[#/components/schemas/MemberBenefitTransactionListResponse]/data/items/details` from the response with the `200` status
  - …9 more
- **2026-10-14** (v2) `be14b3318eb3`: 1 breaking, 12 info
  - the `allOf[#/components/schemas/MemberBenefitTransactionListResponse]/data/items/` response's property type changed from no type to `object` for status `200`
  - added the optional property `allOf[#/components/schemas/MemberBenefitTransactionListResponse]/data/items/benefit_id` to the response with the `200` status
  - added the optional property `allOf[#/components/schemas/MemberBenefitTransactionListResponse]/data/items/created_at` to the response with the `200` status
  - added the optional property `allOf[#/components/schemas/MemberBenefitTransactionListResponse]/data/items/details` to the response with the `200` status
  - …9 more
- …earlier changes not shown

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