POST
/tenants/{tenantId}/transactions/redeem-quoteDry-run redemption — calculates the exact discount without writing anything to the database. Use this to power "you would save R0.50" previews at checkout before the member confirms they want to redeem.
No side effects — this endpoint never creates records, never deducts points, and is not idempotent. It is safe to call on every keypress in a "points to redeem" input field.
Path Parameters
Request Body
Response 200
Error Codes
Related endpoints
Request
cURL
curl -X POST "https://loyalty-engine-production-e5cb.up.railway.app/v1/tenants/$TENANT_ID/transactions/redeem-quote" \
-H "X-API-Key: sk_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"memberRef": "customer_27821234567",
"amount": 15000,
"pointsRequested": 500
}'Response — no constraint
200 OK
{
"pointsToRedeem": 500,
"discountAmount": 50,
"discountAmountRand": 0.50,
"pointsPerRand": 10,
"balanceAfter": 150,
"constraintApplied": null
}Response — constraint applied
200 OK
{
"pointsToRedeem": 300,
"discountAmount": 30,
"discountAmountRand": 0.30,
"pointsPerRand": 10,
"balanceAfter": 350,
"constraintApplied": "MAX_DISCOUNT_PERCENT_OF_BASKET"
}When constraintApplied is set, show the customer: "Maximum discount on this basket is discountAmountRand"