Skip to main content
POST
Redeem points/assets
Creates an amount redemption for a participant. Provide program_id, asset_id, amount, and a description. Set capture: true to capture immediately, capture: false to authorize into PENDING, or omit it to use the program’s fulfillment_mode. Instant capture debits AVAILABLE and credits the program’s configured redemption target. Authorization moves the amount from AVAILABLE to HELD and returns reservation_id plus the effective expires_at. Use expires_at or ttl_seconds to bound a pending redemption; they are mutually exclusive. Pass an idempotency_key to safely retry requests. Duplicate requests return 200 with the existing redemption instead of 201.
For deadline selection and resolution endpoints, see the Redemption lifecycle guide.

Authorizations

X-API-Key
string
header
required

API key passed in the X-API-Key header.

Path Parameters

id
string<uuid>
required

Participant ID

Body

application/json

Redemption details

amount
string
required

Amount to debit (decimal string)

Minimum string length: 1
Example:

"1000.00"

asset_id
string<uuid>
required

The asset to debit from the participant's balance

Example:

"550e8400-e29b-41d4-a716-446655440001"

description
string
required

Context for this redemption, used in journal entries (1-500 chars)

Required string length: 1 - 500
Example:

"Cash out reward points"

program_id
string<uuid>
required

The program this redemption belongs to

Example:

"550e8400-e29b-41d4-a716-446655440000"

capture
boolean

Whether to capture immediately. True completes instantly, false authorizes, and omission uses the program fulfillment_mode.

Example:

false

expires_at
string<date-time>

Absolute pending-redemption deadline (RFC3339); alternative to ttl_seconds and limited to one year. If no request or program deadline is set, the authorization defaults to 90 days.

Example:

"2024-01-15T11:30:00Z"

idempotency_key
string

Prevents duplicate redemptions when retrying requests

Example:

"redeem-12345"

ttl_seconds
integer

Relative pending-redemption deadline in seconds; alternative to expires_at and limited to one year. If no request or program deadline is set, the authorization defaults to 90 days.

Example:

3600

Response

Duplicate request (idempotency key matched, returns existing record)

amount
string

Total amount debited from the participant's balance (decimal string)

Example:

"1000.00"

asset_id
string<uuid>

The asset that was debited

Example:

"550e8400-e29b-41d4-a716-446655440003"

capture_journal_entry_id
string<uuid>

Ledger entry that captured a pending redemption

Example:

"550e8400-e29b-41d4-a716-446655440007"

captured_at
string<date-time>

When the pending redemption was captured

Example:

"2024-01-15T10:45:00Z"

created_at
string<date-time>

When this redemption was created

Example:

"2024-01-15T10:30:00Z"

description
string

Context for this redemption, used in journal entries

Example:

"Redeemed: Gift Card"

expires_at
string<date-time>

Effective deadline of the backing reservation. Always present for pending redemptions; defaults to 90 days and may be configured up to one year.

Example:

"2024-01-15T11:30:00Z"

failure_reason
string

Machine-readable or operator-supplied terminal failure detail

Example:

"fulfillment_failed"

id
string<uuid>

Unique identifier for this redemption

Example:

"550e8400-e29b-41d4-a716-446655440000"

journal_entry_id
string<uuid>

Immutable ledger anchor: the hold entry for pending redemptions, otherwise the instant redemption entry

Example:

"550e8400-e29b-41d4-a716-446655440005"

participant_id
string<uuid>

The participant who redeemed

Example:

"550e8400-e29b-41d4-a716-446655440002"

program_id
string<uuid>

The program this redemption belongs to

Example:

"550e8400-e29b-41d4-a716-446655440001"

quantity
integer

Number of units redeemed (catalog redemptions only)

Example:

2

reservation_id
string<uuid>

Reservation backing a pending redemption

Example:

"550e8400-e29b-41d4-a716-446655440006"

resolved_at
string<date-time>

When the pending redemption reached a terminal state

Example:

"2024-01-15T10:45:00Z"

reversed_amount
string

Cumulative amount reversed so far (decimal string)

Example:

"0.00"

reversed_quantity
integer

Cumulative units reversed so far (UNIT_BASED catalog redemptions only)

Example:

0

reward_id
string<uuid>

The reward catalog item that was redeemed (catalog redemptions only)

Example:

"550e8400-e29b-41d4-a716-446655440004"

status
enum<string>

Current lifecycle and reversal state

Available options:
PENDING,
COMPLETED,
FAILED,
CANCELLED,
PARTIALLY_REVERSED,
FULLY_REVERSED
Example:

"COMPLETED"

unit_cost
string

Cost per unit at the time of redemption (catalog redemptions only, decimal string)

Example:

"500.00"

updated_at
string<date-time>

When this redemption was last updated (e.g., after a reversal)

Example:

"2024-01-15T10:30:00Z"