Sets approval status to approved or rejected. Rejected requires a reason.
- Mock serverhttps://docs.pers.ninja/_mock/swagger/redemptions/{id}/approval
- https://api.pers.ninja/v2https://api.pers.ninja/v2/redemptions/{id}/approval
curl -i -X PATCH \
'https://docs.pers.ninja/_mock/swagger/redemptions/{id}/approval' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"status": "approved",
"reason": "string"
}'Redemption approval updated
Optional owner business ID. If set, this redemption belongs to a specific business. If null, the redemption is tenant-owned (system-level).
Terms and conditions for the redemption. Plain text or HTML. Multi-language handling at app level.
Optional token units the user must transfer/burn as payment (ERC20, ERC1155, or ERC721). When set, these are transferred from user → business in addition to (or instead of) creditTokenAmount.
Computed payment mechanism. Use this for rendering decisions (FREE = no payment, CREDIT = platform credit tokens, TOKEN_PAY = ERC20 transfer, TOKEN_BURN = ERC1155/ERC721 stamp/NFT, MIXED = credit + token). Never stored — derived from creditTokenAmount and priceTokenUnits.
The minimum user status type to redeem the redemption
Country code restrictions as an array of strings (e.g., ["NOT_ES", "FR"])
[ "NOT_ES", "FR" ]
ERC721 only - Admin-defined dynamic context for AI prompts and trigger-based validity. Always applied to tokens minted from this redemption. Special keys: validityDate, validityEndDate, validityDuration for token expiry.
{ "eventName": "Summer Sale", "validityDuration": 30 }
Required user fields specific to this redemption (beyond type defaults). Can include built-in field keys (email, firstName) or custom field UUIDs.
All required fields for this redemption (type baseline + extras, deduplicated). Use this for validation.
Redemption-specific booking requirement override. Set to override type default. Omit or null = use type default.
Effective booking requirement (specific override ?? type default). Use this for validation. Null = no booking required.
{ "id": "string", "ownerBusinessId": "string", "description": "string", "name": "string", "imageUrl": "string", "logoUrl": "string", "terms": "string", "startDate": "2019-08-24T14:15:22Z", "endDate": "2019-08-24T14:15:22Z", "isActive": true, "approval": { "status": "pending_approval", "approvedAt": "2019-08-24T14:15:22Z", "approvedBy": "string", "rejectionReason": "string" }, "creditTokenAmount": 0, "type": { "name": "string", "description": "string", "imageUrl": "string", "baseRequiredUserFields": [], "bookingRequirement": { … }, "id": 0 }, "priceTokenUnits": [], "mechanism": "FREE", "tokenUnits": [ { … } ], "order": 0, "supply": { "available": 0, "total": 0 }, "maxPerUser": 0, "minUserStatusType": { "name": "string", "description": "string", "minTokenBalance": "string", "discountPercentage": 0, "imageUrl": "string", "eligibleTokenAddresses": [ … ], "tags": [ … ], "order": 100, "id": 0 }, "countryCodeRestrictions": [ "NOT_ES", "FR" ], "tags": [], "context": { "eventName": "Summer Sale", "validityDuration": 30 }, "specificRequiredUserFields": [], "requiredUserFields": [], "specificBookingRequirement": { "type": "active", "eligibleBusinessIds": [ … ], "eligibleBusinessTypeIds": [ … ] }, "bookingRequirement": { "type": "active", "eligibleBusinessIds": [ … ], "eligibleBusinessTypeIds": [ … ] }, "included": { "redeemCount": 0, "ownerBusiness": { … }, "requiredUserInfo": { … }, "booking": { … } } }