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

# Quickstart: Voucher Redemption

> Redeem a voucher for the full amount with the Redemptions API

This guide walks through headless voucher redemption for the full amount and handling the redemption confirmation webhook.

## Prerequisites

* A test API key. See [Authentication](/api-reference/getting-started/authentication).
* A registered webhook endpoint. See [Webhook Setup](/api-reference/webhooks/setup) to register your URL and obtain your signing key.

***

## 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](/api-reference/collect/redemptions/object#schema-source).

<Note>
  `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.
</Note>

```bash theme={"system"}
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`.

```json theme={"system"}
{
  "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

* Handle the [`redemption.confirmed` webhook](/api-reference/collect/redemptions/webhook/confirmed) to react to the confirmed redemption server side.
* Review the full [Redemption object](/api-reference/collect/redemptions/object).
