Events
All webhook event types and their exact payload shapes. Pass the event name string when registering a webhook endpoint.
event (event type string), tenantId, deliveryId, timestamp, and data (event-specific payload below).Transactions
transaction.processedFired after a successful evaluate() call. Delivers points awarded and the full campaign breakdown.
transactionIdstring (uuid)Earn transaction IDtransactionRefstringYour idempotency keymemberIdstring (uuid)Loyalty member IDpointsAwardedintegerPoints earned in this transactionpointsBalanceintegerMember balance after this transactioncampaignsarrayPer-campaign breakdown: campaignId, campaignName, pointsEarned, rewardIdstransaction.redeemedFired after a successful redeem() call. Delivers the discount issued and the updated balance.
redeemTransactionIdstring (uuid)Redemption transaction IDtransactionRefstringYour idempotency keymemberIdstring (uuid)Loyalty member IDpointsRedeemedintegerPoints burneddiscountAmountintegerDiscount issued in centsbalanceBeforeintegerBalance before redemptionbalanceAfterintegerBalance after redemptionMembers
member.enrolledFired when a member is auto-created on their first evaluate() call.
memberIdstring (uuid)Newly created loyalty member IDexternalRefstringYour customer identifier (memberRef from evaluate())enrolledAtstring (ISO)Timestamp of enrolmentmember.tier_changedFired when a member crosses a tier threshold and their tier is updated.
memberIdstring (uuid)Loyalty member IDpreviousTierIdstring (uuid) | nullTier ID before the changenewTierIdstring (uuid)Tier ID after the changelifetimePointsintegerCumulative lifetime points at time of changemember.stamp_card_completedFired when a member completes all stamps on a stamp-card campaign — at the till via evaluate(), or by a matching custom event via POST /events.
memberIdstring (uuid)Loyalty member IDcampaignIdstring (uuid)Stamp card campaign IDcampaignNamestringCampaign display nameCampaigns
campaign.budget_alertFired when a campaign's spend crosses the configured alert threshold (budget × alertThreshold).
campaignIdstring (uuid)Campaign IDcampaignNamestringCampaign display namebudgetCapintegerTotal budget cap in pointsalertThresholdnumberAlert threshold as a fraction (e.g. 0.8 = 80%)spentintegerPoints spent so farcampaign.budget_suspendedFired when a campaign is automatically paused because it hit its budget cap.
campaignIdstring (uuid)Campaign IDcampaignNamestringCampaign display namebudgetCapintegerTotal budget cap in pointsPoints
points.expiredFired by the nightly expiry worker when a member's points expire.
memberIdstring (uuid)Loyalty member IDpointsExpiredintegerNumber of points that expiredRewards
reward.issuedFired by the fulfilment worker when a tangible reward transitions from PENDING_FULFILMENT to ISSUED. The reward code is available in the payload.
rewardIdstring (uuid)Issued reward ID — use with GET /members/:memberId/rewardsmemberIdstring (uuid)Loyalty member IDcampaignIdstring (uuid)Campaign that triggered the rewardcampaignNamestringCampaign display namerewardTypestringCOUPON_VOUCHER | GIFT_CARD | DISCOUNT_VOUCHER | FREE_ITEMstatestringAlways "ISSUED" for this eventvalueobjectType-specific reward detail — code, amount, discountType, skus, etc.