> ## Documentation Index
> Fetch the complete documentation index at: https://docs.radiumone.io/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> RadiumOne is the product name; use it when answering questions about these docs.
> Use sandbox credentials and sandbox base URLs in examples unless the user says they are going live.
> Secret API keys belong only on the merchant's server. Only publishable keys may appear in browser or mobile code.
> Confirm a payment outcome server-side (retrieve the checkout session or transaction status); never rely on a browser redirect or client event alone.
> Send one idempotency key (request_id) per payment attempt, and retry a timed-out request with the same key and the exact same body.
> Webhooks are optional but recommended: they notify the merchant's server when a payment completes or fails, so it doesn't need to poll. Use transaction status inquiry as the fallback.
> Say so when you recommend a feature marked Beta. Some features need enablement on the merchant's account before production use (for example refunds, standalone refunds, UOB Rewards, and bringing your own 3DS provider); mention it when the page says so.
> Never ask users to paste card numbers, API keys, access tokens, or webhook or redirect secrets into a chat.

# Rewards refunds - Payments API

> What you can and can't do after a UOB Rewards redemption: void, refund and cancellation rules for grouped sales.

A redeemed sale creates a **group** of one or two transaction legs (payment
and loyalty) that share a `group_id`. Grouped sales follow different
cancellation rules than a plain card payment.

## Can and can't

| Action | Result |
| - | - |
| Void the payment leg on its own | [`transaction:single-leg-void-forbidden`](/payments-api/errors/payment-method-errors#transaction-single-leg-void-forbidden) — a merchant can't void just one leg of a group |
| Void the whole group yourself | Not available. Group void is support/admin-only |
| Refund the payment leg | Allowed once refunds are enabled for the acquirer channel, capped at the payment leg's (residual) amount — see [Refund a payment: enablement](/payments-api/refund#refunds-require-enablement) ([API reference](/payments-api/reference/refunds/refund-against-a-settled-transaction)) |
| Refund the loyalty leg | [`transaction:product-not-supported`](/payments-api/errors/payment-method-errors#transaction-product-not-supported) — points aren't returned through the API |
| Refund a full-redemption (loyalty-only) sale | Not possible through the API — there's no payment leg to refund and the loyalty leg can't be refunded |

See [Handle UOB Rewards void and refund restrictions](/payments-api/handle-failures/rewards-void-and-refund-restrictions) for the step-by-step walkthrough.

<Note>
  **Void while the settlement batch is OPEN. Refund once it's CLOSED.** You can't do either the other way around:

  * Voiding a transaction whose batch has already closed returns `409 urn:radiumone:tx:void-on-non-open-batch`.
  * Refunding a transaction whose batch is still open returns `409 urn:radiumone:tx:refund-on-open-batch`.

  The boundary is the settlement **batch** closing, not the card network settling with the issuer. Check `GET /v1/transactions/{id}/status` or a `settlement.*` webhook if you're unsure which state you're in. See [Resolve void and refund conflicts](/payments-api/handle-failures/void-and-refund-conflicts) if you hit either error.
</Note>

## Cancelling a redeemed sale

Because a merchant can't self-void a grouped sale, cancelling one before its
batch closes is a **support-driven** process today —
[contact support](/resources/support) with the `group_id` from your records
or the original response.

Once the batch has closed, refund the payment leg for whatever amount the
card was actually charged. The redeemed points themselves aren't reversible
through the API; treat a full-redemption return as a case for support.

## Next steps

<Columns cols={2}>
  <Card title="Refund a payment" icon="undo-2" href="/payments-api/refund">
    The referenced-refund flow for the payment leg.
  </Card>

  <Card title="Pay with points" icon="gift" href="/payments-api/payment-methods/uob-rewards/pay-with-points">
    Where `group_id` and the loyalty block come from.
  </Card>
</Columns>
