This guide walks through headless voucher redemption for the full amount and handling the redemption confirmation webhook.
Prerequisites
Step 1: Create a redemption
Create a redemption server side using your secret key. The minimum required fields are type and source.pin or source.token. Conform your UI to the required source attributes per type. See the source schema.
amount and currency are optional. Omit both to redeem the voucher’s full value. The example below sets an explicit amount; remove the amount and currency fields to redeem the full value instead.
curl --request POST \
--url https://api.momentpay.net/collect/redemptions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "vouchers.one_voucher",
"source": {
"pin": "1115684091419838"
},
"amount": 1900,
"currency": "ZAR",
"external_reference": "order-2026-0001"
}
'
The response includes a status of confirmed and the redeemed_amount.
{
"id": "rdm_6a0d5c7fe182228a6c64cb78",
"status": "confirmed",
"version": 3,
"type": "vouchers.one_voucher",
"provider_reference": {
"serial_number": "20260520082514335162"
},
"amount": 1900,
"reserved_amount": 1900,
"redeemed_amount": 1900,
"reversed_amount": 0,
"currency": "ZAR",
"operations": [
{
"id": "mpd2156u_7cwvqp5m",
"type": "reserve",
"status": "succeeded",
"amount": 1900,
"provider_reference": {
"pin": "1115684091419838"
},
"created_at": "2026-05-20T08:25:01.014Z"
},
{
"id": "mpd2185c_vz0wyx10",
"type": "confirm",
"status": "succeeded",
"amount": 1900,
"provider_reference": {
"serial_number": "20260520082514335162"
},
"created_at": "2026-05-20T08:25:14.248Z"
}
],
"related_ids": [],
"external_reference": "order-2026-0001",
"created_at": "2026-05-20T08:24:56.501Z",
"updated_at": "2026-05-20T08:25:14.249Z"
}
Testing
Use the following 16 digit source.pin (or source.token) to test voucher redemption.
The following values are redeemable with all three providers for the indicated amount. Any source.pin besides the values below results in a failure.
source.pin or source.token | status | redeemable.amount |
|---|
| 12345678901234 | confirmed | |
| 99999999999999 | confirmed | |
| 88888888888888 | confirmed | |
| anything else | failed | |
Next steps