Redemption changes voucher state. Keep it behind an explicit operator action and make the
resolve step visible before confirmation.
POST /tenants/{tenant}/redemptions/resolve with a QR token/URL or voucher reference.
- Confirm
status is redeemable, show voucher and tenant details to the operator, and retain the short-lived redemption_token.
POST /tenants/{tenant}/redemptions with that token. Include amount in major units only for a monetary voucher that permits partial redemption.
Blocked/failed reason codes include void, already_redeemed, not_yet_active, expired, not_allowed_in_tenant, not_found, and not_redeemable. Do not automatically retry a state-changing request unless you have reconciled the voucher’s current state.