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

# List member tier transactions

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

## Request

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

Lists tier transactions for the member: joins, leaves, upgrades, downgrades, expiration changes, and evaluation refreshes. Results use cursor pagination. Default order is `-id`, newest first.

Filters are `card_id`, `card_definition_id`, and `created_at`.

Returns 404 when the program doesn't exist, or when the member doesn't exist in that program. The program is checked first. A DELETED member returns 404.

Returns 400 with key `invalid_query_params` when the query fails validation. That check runs before the program and member lookup. `order` must be `id` or `-id`. An array that orders by both directions is rejected. A cursor that doesn't match `^lcrsttx_[a-f0-9]+$` fails here.

After the program and member 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[]
  - '-id' | 'id'
- `cursor` string, nullable
- `filters` V2LoyaltiesProgramsMembersTiersTransactionsListRequestQuery: Request query schema for **GET** `/v2/loyalties/programs/{programId}/members/{memberId}/tiers/transactions`.
  - `junction` 'AND' | 'OR', nullable: Joins the field filters. Allowed values are `AND` and `OR`. Defaults to `AND`.
  - `card_id` LoyaltiesProgramsMembersTiersTransactionsListRequestQueryCardId: ID filter conditions for loyalty card ids. Values must match pattern `^lcrd_[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 `lcrd_[a-f0-9]+`.
        - string
        - string[]
      - `$is_not` union: Excludes one value. A string or a one-element array. Format `lcrd_[a-f0-9]+`.
        - string
        - string[]
      - `$in` union: Matches any of the values. A string or an array of 1 to 100 values. Format `lcrd_[a-f0-9]+`.
        - string
        - string[]
      - `$not_in` union: Excludes any of the values. A string or an array of 1 to 100 values. Format `lcrd_[a-f0-9]+`.
        - string
        - string[]
  - `card_definition_id` LoyaltiesProgramsMembersTiersTransactionsListRequestQueryCardDefinitionId: 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 tier transactions.

- V2LoyaltiesProgramsMembersTiersTransactionsListResponseBody: Cursor-paginated list of tier transactions.
  - `data` TierTransaction[], required: List of tier transactions.
    - `id` string, required: Unique tier transaction identifier (format `lttx_...`).
    - `card_id` string, required: Unique identifier of the related loyalty card (format `lcrd_...`).
    - `program_id` string, required: Unique identifier of the loyalty program (format `lprg_...`).
    - `member_id` string, required: Unique identifier of the program member (format `lmbr_...`).
    - `card_definition_id` string, required: Identifies the card definition (format `lcdef_...`).
    - `tier_structure_id` string, required: Unique identifier of the tier structure (format `lts_...`).
    - `tier_id` string, nullable, required: Unique identifier of the related tier (format `lt_...`), or `null`.
    - `type` 'UPGRADED' | 'DOWNGRADED' | 'JOINED' | 'LEFT' | 'EXPIRATION_CHANGED' | 'EVALUATION_REFRESHED', required: Transaction type. `JOINED` - member joined a tier. `LEFT` - member left a tier. `UPGRADED` - member moved to a higher tier. `DOWNGRADED` - member moved to a lower tier. `EXPIRATION_CHANGED` - current tier unchanged; the expiration date was set, extended, or cleared. `EVALUATION_REFRESHED` - current tier and expiration day unchanged; the stored evaluation and points were recalculated.
    - `details` TierTransactionDetails, required: Details of the tier evaluation. Fields that do not apply to the transaction type are `null`. `JOINED` - `tier_to` set, `tier_from` null. `LEFT` - `tier_from` set, `tier_to` null. `UPGRADED` and `DOWNGRADED` - both `tier_from` and `tier_to` set. `EXPIRATION_CHANGED` - `expires_at` holds the new expiration; `tier_from` and `tier_to` null. `EVALUATION_REFRESHED` - `points` holds the recalculated value; `tier_from` and `tier_to` null.
      - `points` number, nullable, required: Qualifying points at the time of evaluation. Returns the point balance or the points earned in the tracking period, depending on the tier structure. `null` when points were not calculated.
      - `tier_from` string, nullable, required: Unique identifier of the tier the member moved from (format `lt_...`). `null` when there is no source tier, including `JOINED`, `EXPIRATION_CHANGED`, and `EVALUATION_REFRESHED` transactions.
      - `tier_to` string, nullable, required: Unique identifier of the tier the member moved to (format `lt_...`). `null` when there is no destination tier, including `LEFT`, `EXPIRATION_CHANGED`, and `EVALUATION_REFRESHED` transactions.
      - `origin` TierTransactionOrigin, required: Origin of the tier transaction.
        - `type` 'card_operations' | 'daily_task_operations' | 'member_card_created' | 'member_card_deleted' | 'segment_change', required: Origin type. `card_operations` - point operations on the card. `daily_task_operations` - scheduled daily tier processing. `member_card_created` - a member card was created. `member_card_deleted` - a member card was deleted. `segment_change` - the customer entered or left a segment used in tier qualification.
        - `card_transaction_ids` string[]: Unique identifiers of the card transactions that triggered the transaction (format `lctx_...`). Returned for the `card_operations` origin.
        - `segment_ids` string[]: Unique identifiers of the customer segments that triggered the transaction. Returned for the `segment_change` origin.
      - `rejection` TierTransactionRejection, required: Rejection details for a tier transaction.
        - `reason` string, required: Machine-readable rejection reason. Known value: `SUPERSEDED_BY_LATER_TRANSACTION`.
        - `details` string: Additional human-readable details about the rejection.
      - `start_at` string, date-time, nullable, required: Start of the tier membership period, or `null`.
      - `expires_at` string, date-time, nullable, required: Expiration of the tier membership period, or `null`.
    - `status` 'PENDING' | 'APPROVED' | 'REJECTED', required: Transaction status. `PENDING` - created, awaiting processing; `APPROVED` - completed successfully; `REJECTED` - rejected (see `details.rejection`).
    - `created_at` string, date-time, required: Timestamp when the transaction was created (ISO 8601).
    - `updated_at` string, date-time, nullable, required: Timestamp when the transaction was last updated (ISO 8601), or `null`.
    - `object` 'tier_transaction', required: Object type marker. Always `tier_transaction`.
  - `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`). `order` must be `id` or `-id`. Query validation runs before the program and member lookup. Cursor checks run after both are found. The cursor stays valid when only `limit` changes.
- `404`: The program doesn't exist (`resource_type` `program`), or the member doesn't exist in that program (`resource_type` `member`). The program is checked first. A DELETED member also returns 404.
- `500`: Internal server error.

## Changes

- **2026-10-14** (v2) `6a418ac8b7b1`: 3 breaking, 1 info
  - removed the required property `cursor` from the response with the `200` status
  - removed the required property `data` from the response with the `200` status
  - removed the required property `object` from the response with the `200` status
  - added `#/components/schemas/MemberTierTransactionListResponse` to the response body `allOf` list for the response status `200`
- **2026-10-13** (v2) `f95b50556c93`: 4 info
  - removed `#/components/schemas/MemberTierTransactionListResponse` from the response body `allOf` list for the response status `200`
  - added the required property `cursor` to the response with the `200` status
  - added the required property `data` to the response with the `200` status
  - added the required property `object` to the response with the `200` status
- **2026-10-13** (v2) `60ac77cb8a77`: 3 breaking, 1 info
  - removed the required property `cursor` from the response with the `200` status
  - removed the required property `data` from the response with the `200` status
  - removed the required property `object` from the response with the `200` status
  - added `#/components/schemas/MemberTierTransactionListResponse` to the response body `allOf` list for the response status `200`
- **2026-10-09** (v2) `6352ea148a00`: 1 info
  - for the `query` request parameter `filters`, the type was generalized from `object` to no type
- …earlier changes not shown

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