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

# List member reward purchases

`GET /v2/loyalties/programs/{programId}/members/{memberId}/rewards/purchases`

## Request

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

Lists stored `PURCHASE` reward transactions for the program member, with cursor pagination. Filter by `id`, `reward_id`, `card_definition_id`, and `created_at`. Order by `id` (default `-id`, newest first). Purchases rejected before a transaction is stored don't appear. A purchase accepted with `202` that later fails is stored as `REJECTED` with `details.rejection`. Returns `404` when the program or the member doesn't exist. The program is checked first.

## Query parameters

- `limit` integer, nullable
- `order` union
  - string[]
  - '-id' | 'id'
- `cursor` string, nullable
- `filters` V2LoyaltiesProgramsMembersRewardsPurchasesListRequestQuery: Request query schema for **GET** `/v2/loyalties/programs/{programId}/members/{memberId}/rewards/purchases`.
  - `junction` 'AND' | 'OR', nullable: Joins the field filters. Allowed values are `AND` and `OR`. Defaults to `AND`.
  - `id` LoyaltiesProgramsMembersRewardsPurchasesListRequestQueryId: ID filter conditions for reward transaction ids. Values must match pattern `^lrtx_[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 `lrtx_[a-f0-9]+`.
        - string
        - string[]
      - `$is_not` union: Excludes one value. A string or a one-element array. Format `lrtx_[a-f0-9]+`.
        - string
        - string[]
      - `$in` union: Matches any of the values. A string or an array of 1 to 100 values. Format `lrtx_[a-f0-9]+`.
        - string
        - string[]
      - `$not_in` union: Excludes any of the values. A string or an array of 1 to 100 values. Format `lrtx_[a-f0-9]+`.
        - string
        - string[]
  - `reward_id` LoyaltiesProgramsMembersRewardsPurchasesListRequestQueryRewardId: ID filter conditions for reward ids. Values must match pattern `^lrew_[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 `lrew_[a-f0-9]+`.
        - string
        - string[]
      - `$is_not` union: Excludes one value. A string or a one-element array. Format `lrew_[a-f0-9]+`.
        - string
        - string[]
      - `$in` union: Matches any of the values. A string or an array of 1 to 100 values. Format `lrew_[a-f0-9]+`.
        - string
        - string[]
      - `$not_in` union: Excludes any of the values. A string or an array of 1 to 100 values. Format `lrew_[a-f0-9]+`.
        - string
        - string[]
  - `card_definition_id` LoyaltiesProgramsMembersRewardsPurchasesListRequestQueryCardDefinitionId: ID filter conditions for card definition IDs. Values must match pattern `^lcdef_[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 `lcdef_[a-f0-9]+`.
        - string
        - string[]
      - `$is_not` union: Excludes one value. A string or a one-element array. Format `lcdef_[a-f0-9]+`.
        - string
        - string[]
      - `$in` union: Matches any of the values. A string or an array of 1 to 100 values. Format `lcdef_[a-f0-9]+`.
        - string
        - string[]
      - `$not_in` union: Excludes any of the values. A string or an array of 1 to 100 values. Format `lcdef_[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 reward purchase transactions.

- V2LoyaltiesProgramsMembersRewardsPurchasesListResponseBody: Cursor-paginated list of reward purchase transactions.
  - `data` RewardPurchaseTransaction[]: Reward purchase transactions (type `PURCHASE` only).
    - `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`.
    - `card_id` string: Unique identifier of the loyalty card the points were spent from (format `lcrd_...`).
    - `id` string: Unique reward transaction identifier (format `lrtx_...`). Absent for `DRY_RUN` (SIMULATED) transactions, which are never persisted.
    - `card_definition_id` string, nullable: Unique identifier of the card definition for that card (format `lcdef_...`). `null` when none is stored.
    - `card_transaction_id` string, nullable: Identifies of the underlying card transaction (format `lctx_...`). `null` for `DRY_RUN` (SIMULATED) transactions.
    - `reward_id` string: Unique identifier of the purchased reward (format `lrew_...`).
    - `status` 'PENDING' | 'PROCESSING' | 'APPROVED' | 'REJECTED' | 'SIMULATED' | 'REFUNDED': Transaction status: - `PENDING`: Created and awaiting processing. - `PROCESSING`: Being processed. - `APPROVED`: Completed successfully. - `REJECTED`: Rejected (see `details.rejection`). - `SIMULATED`: Dry-run result that is not persisted. - `REFUNDED`: Purchase has been refunded.
    - `type` 'PURCHASE' | 'REFUND': Transaction type.
    - `details` union: Transaction details. Shape depends on `type` - purchase details for `PURCHASE`, refund details for `REFUND`.
      - RewardPurchaseTransactionDetailsPurchase: Details of a `PURCHASE` reward transaction.
        - `reason` string, required: Human-readable reason. For purchases: "Points spent on reward".
        - `rejection` RewardPurchaseRejection, required: Details about a rejected reward purchase transaction.
          - `reason` string, required: Machine-readable rejection reason.
          - `details` object: Additional structured context about the rejection. Fields depend on the rejection reason.
        - `metadata` object, required: Transaction metadata. Empty object when not set.
        - `points` RewardPurchasePoints, required: Points involved in the transaction.
          - `total` number, required: Total number of points.
        - `result` RewardPurchaseResult, required: Reward fulfillment result. Contains the fulfilled reward reference, quantity and the material or digital fulfillment payload.
          - `reward` RewardPurchaseResultReward: Reference to the fulfilled reward.
            - `id` string: Reward identifier (format `lrew_...`).
            - `type` 'MATERIAL' | 'DIGITAL': Reward type.
          - `quantity` number, nullable: Fulfilled quantity.
          - `material` RewardPurchaseResultMaterial: Material reward fulfillment.
            - `type` 'PRODUCT' | 'SKU': Material reward type.
            - `product` object: Product payload (present when `type` is `PRODUCT`).
            - `sku` object: SKU payload (present when `type` is `SKU`).
          - `digital` RewardPurchaseResultDigital: Digital reward fulfillment.
            - `type` 'DISCOUNT_COUPONS' | 'GIFT_VOUCHERS' | 'LOYALTY_CARD_POINTS': Digital reward type.
            - `discount_coupons` RewardPurchaseDigitalCoupon[]: Fulfilled discount coupons (present when `type` is `DISCOUNT_COUPONS`).
              - …
            - `gift_vouchers` RewardPurchaseDigitalGiftVoucher[]: Fulfilled gift vouchers (present when `type` is `GIFT_VOUCHERS`).
              - …
            - `loyalty_card_points` RewardPurchaseDigitalLoyaltyCardPoints: Loyalty card points fulfillment entry.
              - …
      - RewardPurchaseTransactionDetailsRefund: Details of a REFUND reward transaction.
        - `reason` string, required: Sets the refund reason. Always `Manual reward refund` for this endpoint.
        - `rejection` RewardPurchaseRejection, required: Details about a rejected reward purchase transaction.
          - `reason` string, required: Machine-readable rejection reason.
          - `details` object: Additional structured context about the rejection. Fields depend on the rejection reason.
        - `metadata` object, required: Transaction metadata. Empty object when not set.
        - `points` RewardPurchasePoints, required: Points involved in the transaction.
          - `total` number, required: Total number of points.
        - `result` RewardPurchaseResult, required: Reward fulfillment result. Contains the fulfilled reward reference, quantity and the material or digital fulfillment payload.
          - `reward` RewardPurchaseResultReward: Reference to the fulfilled reward.
            - `id` string: Reward identifier (format `lrew_...`).
            - `type` 'MATERIAL' | 'DIGITAL': Reward type.
          - `quantity` number, nullable: Fulfilled quantity.
          - `material` RewardPurchaseResultMaterial: Material reward fulfillment.
            - `type` 'PRODUCT' | 'SKU': Material reward type.
            - `product` object: Product payload (present when `type` is `PRODUCT`).
            - `sku` object: SKU payload (present when `type` is `SKU`).
          - `digital` RewardPurchaseResultDigital: Digital reward fulfillment.
            - `type` 'DISCOUNT_COUPONS' | 'GIFT_VOUCHERS' | 'LOYALTY_CARD_POINTS': Digital reward type.
            - `discount_coupons` RewardPurchaseDigitalCoupon[]: Fulfilled discount coupons (present when `type` is `DISCOUNT_COUPONS`).
              - …
            - `gift_vouchers` RewardPurchaseDigitalGiftVoucher[]: Fulfilled gift vouchers (present when `type` is `GIFT_VOUCHERS`).
              - …
            - `loyalty_card_points` RewardPurchaseDigitalLoyaltyCardPoints: Loyalty card points fulfillment entry.
              - …
        - `purchase` RewardPurchaseRefundPurchaseReference, required: References to the original purchase transactions being refunded.
          - `card_transaction` object, nullable: Reference to the original card transaction.
            - `id` string: Card transaction identifier (format `lctx_...`).
          - `reward_transaction` object, nullable: Reference to the original reward transaction.
            - `id` string: Reward transaction identifier (format `lrtx_...`).
    - `object` 'reward_transaction': Object type marker. Always `reward_transaction`.
  - `cursor` object, nullable: Pagination cursor. `null` when there are no more results.
    - `next` string: Cursor to pass as the `cursor` query parameter to fetch the next page (format `lcrstrx_...`).
    - `expires_at` string, date-time: Timestamp when the cursor expires.
  - `object` 'list': Object type marker. Always `list`.

## Other responses

- `400`: The query failed validation. `order` must be `id` or `-id`, and an array can't order by `id` and `-id` together. A cursor that doesn't match `^lcrstrx_[a-f0-9]+$` returns `invalid_query_params`. An unknown cursor returns `invalid_or_expired_cursor`. A cursor from a different `limit` or `order` returns `cursor_and_query_mismatch`.
- `404`: The program doesn't exist (`resource_type` `program`), or the member doesn't exist in that program (`resource_type` `member`). A member of another program is not found. The program is checked first.
- `500`: Internal server error.

## Changes

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

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