---
title: "Adjust card points"
method: POST
path: "/v2/loyalties/programs/{programId}/members/{memberId}/cards/{cardId}/points"
tags: ["Programs"]
---

# Adjust card points

`POST /v2/loyalties/programs/{programId}/members/{memberId}/cards/{cardId}/points`

## Request

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

Manually adjusts the points balance of the member's card.

A positive `points` value creates an `ADMIN_CREDIT` card transaction. The expiration date comes from the member tier when that tier defines its own points expiration. Otherwise the date comes from the card definition. `expiration_date` is `null` when points don't expire.

A negative `points` value creates an `ADMIN_DEBIT` card transaction.

When `points` is `0`, no transaction is created and `status` is `NO_CHANGE`.

The transaction is created with status `PENDING` and processed asynchronously. The program and the member must be `ACTIVE`. The program must also be inside its validity window. Otherwise the response is `423`. The response is `404` when the program or the member doesn't exist, or when the card isn't assigned to that member.

## Request body

- V2LoyaltiesProgramsMembersCardsPointsAdjustRequestBody: No additional properties are allowed.
  - `points` integer, required: Number of points to adjust. Positive values add points (`ADMIN_CREDIT` transaction), negative values subtract points (`ADMIN_DEBIT` transaction), zero results in no transaction (`NO_CHANGE`).
  - `reason` string: Optional reason for the adjustment, stored in the transaction details.

## Response `200`

Result of the points adjustment.

- V2LoyaltiesProgramsMembersCardsPointsAdjustResponseBody: Result of a manual card points adjustment.
  - `transaction` CardTransaction, required: A card transaction.
    - `id` string, required: Unique card transaction ID assigned by Voucherify.
    - `card_id` string, required: ID of the card the transaction belongs to. Assigned by Voucherify.
    - `program_id` string, required: ID of the loyalty program. Assigned by Voucherify.
    - `member_id` string, required: ID of the member owning the card. Assigned by Voucherify.
    - `card_definition_id` string, required: ID of the card definition of the card. Assigned by Voucherify.
    - `card_type` 'INDIVIDUAL', required: Card type.
    - `type` 'ADMIN_CREDIT' | 'ADMIN_DEBIT' | 'ADMIN_POINTS_EXPIRATION' | 'POINTS_EARNED' | 'POINTS_SPENT_ON_REWARD' | 'POINTS_PURCHASED' | 'POINTS_PURCHASE_REVERSED' | 'POINTS_SPENT_ON_ORDER' | 'POINTS_REFUNDED' | 'POINTS_RETURNED' | 'POINTS_EXPIRED' | 'PENDING_POINTS_ADDED' | 'PENDING_POINTS_ACTIVATED' | 'PENDING_POINTS_CANCELED', required: Transaction type. Options depend on the endpoint and the transaction variant.
    - `details` CardTransactionDetails, required: Card transaction details. Variant-dependent fields are not present on all variants.
      - `reason` string, nullable: Reason for the transaction (e.g. the reason provided in a manual adjustment request).
      - `rejection` object, nullable: Rejection details when the transaction was rejected, or `null`.
        - `reason` string: Rejection reason.
        - `details` string: Detailed rejection description.
      - `metadata` object: Transaction metadata (empty object when none).
      - `points` object: Points affected by the transaction (variant-dependent fields; pending points don't return `expiration_date` and `expiration_type`.).
        - `total` number: Number of points. Negative for debits.
        - `expiration_date` string, date, nullable: Expiration date of the affected points (`YYYY-MM-DD`), or `null`.
        - `expiration_type` 'NO_EXPIRATION' | 'ROLLING_EXPIRATION' | 'CALENDAR_EXPIRATION' | 'SLIDING_EXPIRATION' | 'null', nullable: Points expiration type of the affected points, or `null`.
        - `date` string, date: Activation date of the pending points (`YYYY-MM-DD`). Pending points variants only.
        - `type` 'IMMEDIATE' | 'PERIOD_BASED' | 'FIXED_DATES' | 'EVENT_BASED': Pending points activation type. Pending points variants only.
      - `bucket` LoyaltyV2CardPointsBucketSimple: Simple representation of a points expiration bucket, embedded in card transaction details.
        - `id` string, required: Point expiration bucket ID.
        - `points` object, required: Points affected by the transaction.
          - `total` number, required: Number of points affected.
        - `expiration_date` string, date, required: Date when the points expire.
        - `expiration_type` 'NO_EXPIRATION' | 'ROLLING_EXPIRATION' | 'CALENDAR_EXPIRATION' | 'SLIDING_EXPIRATION', required: Expiration type of the points.
      - `buckets` LoyaltyV2CardPointsBucketSimple[]: The points buckets that expired (`POINTS_EXPIRED` only).
        - `id` string, required: Point expiration bucket ID.
        - `points` object, required: Points affected by the transaction.
          - `total` number, required: Number of points affected.
        - `expiration_date` string, date, required: Date when the points expire.
        - `expiration_type` 'NO_EXPIRATION' | 'ROLLING_EXPIRATION' | 'CALENDAR_EXPIRATION' | 'SLIDING_EXPIRATION', required: Expiration type of the points.
      - `date` string, date: Expiration date (`POINTS_EXPIRED` only, `YYYY-MM-DD`).
      - `reward` object, nullable: Reference to the reward involved, or `null`.
        - `id` string: Reward ID (`lrew_[a-f0-9]+`) assigned by Voucherify.
      - `reward_transaction` object, nullable: Reference to the related reward transaction, or `null`.
        - `id` string: Reward transaction ID (`lrtx_[a-f0-9]+`) assigned by Voucherify.
      - `card_transaction` object, nullable: Reference to the linked card transaction (e.g. the spend side of a points purchase), or `null`.
        - `id` string: Card transaction ID (`lctx_[a-f0-9]+`) assigned by Voucherify.
      - `purchase` object, nullable: References to the original purchase transactions (reversal/return variants), or `null`.
        - `card_transaction` object, nullable
          - `id` string: Card transaction ID (`lctx_[a-f0-9]+`) assigned by Voucherify.
        - `reward_transaction` object, nullable
          - `id` string: Reward transaction ID (`lrtx_[a-f0-9]+`) assigned by Voucherify.
      - `order` object, nullable: Reference to the order paid with points (`POINTS_SPENT_ON_ORDER` only), or `null`.
        - `id` string: Order ID assigned by Voucherify.
      - `order_transaction` object, nullable: Reference to the related order transaction (`POINTS_SPENT_ON_ORDER` only), or `null`.
        - `id` string: Order transaction ID (`lotx_[a-f0-9]+`) assigned by Voucherify.
      - `target_card` object, nullable: Reference to the target card credited by a points purchase (`POINTS_SPENT_ON_REWARD` only), or `null`.
        - `id` string: Card ID (`lcrd_[a-f0-9]+`) assigned by Voucherify.
      - `purchase_transaction` object, nullable: Reference to the linked purchase card transaction (`POINTS_SPENT_ON_REWARD` only), or `null`.
        - `id` string: Card transaction ID (`lctx_[a-f0-9]+`) assigned by Voucherify.
    - `status` 'PENDING' | 'PROCESSING' | 'APPROVED' | 'REJECTED', required: Transaction processing status. Transactions are created as `PENDING` and processed asynchronously.
    - `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` 'card_transaction', required: Object type marker, always `card_transaction`.
  - `status` 'TRANSACTION_CREATED' | 'NO_CHANGE', required: `TRANSACTION_CREATED` when a transaction was created, `NO_CHANGE` when the requested points amount was zero.
  - `message` 'Points addition transaction created' | 'Points subtraction transaction created' | 'Provided amount is zero, transaction was not created', required: Human-readable result message: - "Points addition transaction created", - "Points subtraction transaction created", - "Provided amount is zero, transaction was not created".

## Other responses

- `400`: Validation error – request body failed validation.
- `404`: Resource not found.
- `423`: Resource locked - the program or member is not in a state that allows this operation.
- `500`: Internal server error.

## Changes

- **2026-10-14** (v2) `6a418ac8b7b1`: 4 breaking, 2 warning, 1 info
  - added `#/components/schemas/CardPointsAdjust` to the request body `allOf` list
  - removed the required property `message` from the response with the `200` status
  - removed the required property `status` from the response with the `200` status
  - removed the required property `transaction` from the response with the `200` status
  - …3 more
- **2026-10-13** (v2) `f95b50556c93`: 1 breaking, 1 warning, 5 info
  - added the new required request property `points`
  - removed `#/components/schemas/CardPointsAdjust` from the request body `allOf` list
  - added the new optional request property `reason`
  - removed `#/components/schemas/CardPointsAdjustResult` from the response body `allOf` list for the response status `200`
  - …3 more
- **2026-10-13** (v2) `9905dfce1d1e`: 4 breaking, 2 warning, 1 info
  - added `#/components/schemas/CardPointsAdjust` to the request body `allOf` list
  - removed the required property `message` from the response with the `200` status
  - removed the required property `status` from the response with the `200` status
  - removed the required property `transaction` from the response with the `200` status
  - …3 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/points/post.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)
