curl --request POST \
--url {protocol}://{host}/v2/loyalties/programs/{programId}/rewards/purchases/{rewardTransactionId}/refund \
--header 'Content-Type: application/json' \
--header 'X-App-Id: <api-key>' \
--header 'X-App-Token: <api-key>' \
--data '{
"policies": {}
}'{
"transaction": {
"id": "lrtx_12fa3c01696025a386",
"card_id": "lcrd_128f962dbd8c4ba5e1",
"card_transaction_id": "lctx_12fa3c0169a025a387",
"program_id": "lprg_128f58429f4c4bf7b2",
"member_id": "lmbr_128f962dbc8c4ba5dc",
"reward_id": "lrew_1294cebb458e4904a0",
"status": "APPROVED",
"type": "REFUND",
"details": {
"reason": "Manual reward refund",
"rejection": null,
"metadata": {},
"points": {
"total": 500
},
"result": {
"reward": {
"id": "lrew_1294cebb458e4904a0",
"type": "MATERIAL"
},
"quantity": 1,
"material": {
"type": "PRODUCT",
"product": {
"id": "prod_1294ce96f66d469498"
}
},
"digital": null
},
"purchase": {
"card_transaction": {
"id": "lctx_12cad1abefa2311e02"
},
"reward_transaction": {
"id": "lrtx_12cad1abefa2311e03"
}
}
},
"created_at": "2026-09-02T12:03:11.401Z",
"updated_at": null,
"object": "reward_transaction"
},
"status": "APPROVED",
"message": "Reward refund transaction created. Points will be returned to the member's card shortly."
}Refund reward purchase
Refunds an APPROVED reward purchase made by a program member. The purchase transaction is marked REFUNDED, a new REFUND reward transaction is created with status APPROVED, and the points spent on the purchase are returned to the member’s card.
The request body is optional and an empty payload is allowed. Policies default to refund: DEFAULT and stock: DEFAULT.
The endpoint responds with 202 before the card balance changes. A POINTS_RETURNED card transaction is created for the member’s card and processed shortly after the response. Returned points receive a new expiration date, resolved from the member’s tier or card definition points expiration settings. They do not inherit the expiration of the originally spent points.
For a LOYALTY_CARD_POINTS reward, the points credited to the target card are also reversed, with a POINTS_PURCHASE_REVERSED card transaction on that card.
Only rewards whose refunds.type is REFUNDABLE can be refunded. Any other reward is rejected with 423 and key reward_refund_policy_does_not_allow_refunds. Send policies.refund: ALLOW to force the refund.
The program and the reward transaction must exist within the project, otherwise the request fails with 404. The request is rejected with 423 when:
- The program is not
ACTIVE(non_active_program) or is outside its validity hours (program_outside_validity_window), - The transaction is not a purchase (
non_purchase_reward_transaction) or is notAPPROVED(non_approved_reward_transaction); refunding the same purchase twice fails here, - The reward, its program assignment, the member’s card, or the card definition no longer exists,
- For
LOYALTY_CARD_POINTSrewards, the target card no longer holds the purchased points, or returning the cost would exceed the source card earning limits.
A valid request URL is required to generate request examples{
"transaction": {
"id": "lrtx_12fa3c01696025a386",
"card_id": "lcrd_128f962dbd8c4ba5e1",
"card_transaction_id": "lctx_12fa3c0169a025a387",
"program_id": "lprg_128f58429f4c4bf7b2",
"member_id": "lmbr_128f962dbc8c4ba5dc",
"reward_id": "lrew_1294cebb458e4904a0",
"status": "APPROVED",
"type": "REFUND",
"details": {
"reason": "Manual reward refund",
"rejection": null,
"metadata": {},
"points": {
"total": 500
},
"result": {
"reward": {
"id": "lrew_1294cebb458e4904a0",
"type": "MATERIAL"
},
"quantity": 1,
"material": {
"type": "PRODUCT",
"product": {
"id": "prod_1294ce96f66d469498"
}
},
"digital": null
},
"purchase": {
"card_transaction": {
"id": "lctx_12cad1abefa2311e02"
},
"reward_transaction": {
"id": "lrtx_12cad1abefa2311e03"
}
}
},
"created_at": "2026-09-02T12:03:11.401Z",
"updated_at": null,
"object": "reward_transaction"
},
"status": "APPROVED",
"message": "Reward refund transaction created. Points will be returned to the member's card shortly."
}Authorizations
Path Parameters
Unique loyalty program identifier (format: lprg_ followed by hexadecimal characters).
^lprg_[a-f0-9]+$Unique reward transaction identifier of the purchase to refund (format: lrtx_ followed by hexadecimal characters).
^lrtx_[a-f0-9]+$Body
Optional refund policies. An empty payload is allowed.
Request body schema for POST /v2/loyalties/programs/{programId}/rewards/purchases/{rewardTransactionId}/refund.
Refund policies. When omitted or null, defaults are applied.
Show child attributes
Show child attributes
Response
Refund accepted. The refund reward transaction has been created with status APPROVED and points will be returned to the member's card asynchronously.
Response body schema for POST /v2/loyalties/programs/{programId}/rewards/purchases/{rewardTransactionId}/refund.
The created REFUND-type reward transaction.
Show child attributes
Show child attributes
Result status. Always APPROVED on success.
APPROVED Returns the result message: "Reward refund transaction created. Points will be returned to the member's card shortly.".
Was this page helpful?

