Skip to main content
POST
/
collect
/
redemptions
curl --request POST \
  --url https://api.momentpay.net/collect/redemptions \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "amount": 1900,
  "currency": "ZAR",
  "type": "vouchers.one_voucher",
  "source": {
    "pin": "1115684091419838"
  }
}
'
{
  "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"
}

Authorizations

Authorization
string
header
required

Authentication using Bearer tokens. Include your API key in the Authorization header.

Key Types:

  • Test Keys: sk_test_* for development and testing
  • Live Keys: sk_* for production environments
  • Public Keys: pk_test_* or pk_* for client-side operations

📩 Need access? Contact Support to request your API keys.

Usage:

Authorization: Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc

Headers

Idempotency-Key
string

Client supplied key. Replays return the original response within a 24 hour window. Replay with the same key but a different request body returns 409 Conflict.

Required string length: 1 - 200

Body

application/json

Request body for creating a new redemption.

type
enum<string>
required

Namespaced redemption type in category.type form. The category selects the value class and the suffix selects the specific provider that will fulfil the redemption.

Only the vouchers category is available today. Loyalty point categories (for example loyalty_points.skywards, loyalty_points.ebucks) are planned.

Available options:
vouchers.one_voucher,
vouchers.ott,
vouchers.blu
source
1Voucher · object
required

Provider specific source credential object that identifies the voucher being redeemed. The shape is owned by the adapter and selected by the parent type field.

amount
integer
required

Amount in cents.

Required range: x >= 1
currency
string
required
Required string length: 3
Example:

"ZAR"

redemption_options
object
metadata
object

Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. NEW Limitations:

  • Maximum 20 keys
  • Key names must be strings (max 40 characters)
  • Values must be strings (max 500 characters)
Example:
{
"customer_id": "cust_123456",
"order_id": "ord_789012"
}
external_reference
string

Response

Redemption created. Status varies by provider capability.

id
string
required
Pattern: ^rdm_[a-f0-9]{24}$
Example:

"rdm_663a1b9c8e4f2a0012abcd34"

status
enum<string>
required

Lifecycle status of the redemption aggregate.

Available options:
draft,
reserved,
confirmed,
failed
version
integer
required

Resource version for optimistic concurrency. Starts at 1 on creation and increments on every state change. Use the latest value when reconciling concurrent updates.

Required range: x >= 1
Example:

3

amount
integer
required

Requested amount in cents.

reversed_amount
integer
required

Amount reversed back to the provider in cents.

currency
string
required
Required string length: 3
Example:

"ZAR"

operations
object[]
required
created_at
string<date-time>
required
updated_at
string<date-time>
required
type
enum<string>

Namespaced redemption type in category.type form. The category selects the value class and the suffix selects the specific provider that will fulfil the redemption.

Only the vouchers category is available today. Loyalty point categories (for example loyalty_points.skywards, loyalty_points.ebucks) are planned.

Available options:
vouchers.one_voucher,
vouchers.ott,
vouchers.blu
provider_reference
object

Latest provider side reference bag. Shape depends on the most recent operation.

reserved_amount
integer

Amount currently reserved against the provider in cents.

redeemed_amount
integer

Amount captured by the provider in cents. May differ from amount on partial redeems.

source
1Voucher · object

Provider specific source credential object that identifies the voucher being redeemed. The shape is owned by the adapter and selected by the parent type field.

redemption_options
object

Provider specific configuration bag forwarded on each operation.

change_voucher
1Voucher · object

Replacement voucher issued by the provider when a partial redemption is performed (redeemed amount less than the original voucher value). Populated by 1Voucher and Blu today. The shape is selected by the redemption type.

Customer must keep pin to spend the remainder. amount, when present, is in cents. Blu does not return an amount for the replacement voucher, so the field is omitted. Caller can issue a stored value lookup against pin for the balance.

last_error
object

Provider mapped error attached to a failed operation or to a failed redemption aggregate.

metadata
object

Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. NEW Limitations:

  • Maximum 20 keys
  • Key names must be strings (max 40 characters)
  • Values must be strings (max 500 characters)
Example:
{
"customer_id": "cust_123456",
"order_id": "ord_789012"
}
external_reference
string