Events

All webhook event types and their exact payload shapes. Pass the event name string when registering a webhook endpoint.

Every delivery includes a common envelope: event (event type string), tenantId, deliveryId, timestamp, and data (event-specific payload below).

Transactions

transaction.processed

Fired after a successful evaluate() call. Delivers points awarded and the full campaign breakdown.

fieldtypedescription
transactionIdstring (uuid)Earn transaction ID
transactionRefstringYour idempotency key
memberIdstring (uuid)Loyalty member ID
pointsAwardedintegerPoints earned in this transaction
pointsBalanceintegerMember balance after this transaction
campaignsarrayPer-campaign breakdown: campaignId, campaignName, pointsEarned, rewardIds
transaction.redeemed

Fired after a successful redeem() call. Delivers the discount issued and the updated balance.

fieldtypedescription
redeemTransactionIdstring (uuid)Redemption transaction ID
transactionRefstringYour idempotency key
memberIdstring (uuid)Loyalty member ID
pointsRedeemedintegerPoints burned
discountAmountintegerDiscount issued in cents
balanceBeforeintegerBalance before redemption
balanceAfterintegerBalance after redemption

Members

member.enrolled

Fired when a member is auto-created on their first evaluate() call.

fieldtypedescription
memberIdstring (uuid)Newly created loyalty member ID
externalRefstringYour customer identifier (memberRef from evaluate())
enrolledAtstring (ISO)Timestamp of enrolment
member.tier_changed

Fired when a member crosses a tier threshold and their tier is updated.

fieldtypedescription
memberIdstring (uuid)Loyalty member ID
previousTierIdstring (uuid) | nullTier ID before the change
newTierIdstring (uuid)Tier ID after the change
lifetimePointsintegerCumulative lifetime points at time of change
member.stamp_card_completed

Fired 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.

fieldtypedescription
memberIdstring (uuid)Loyalty member ID
campaignIdstring (uuid)Stamp card campaign ID
campaignNamestringCampaign display name

Campaigns

campaign.budget_alert

Fired when a campaign's spend crosses the configured alert threshold (budget × alertThreshold).

fieldtypedescription
campaignIdstring (uuid)Campaign ID
campaignNamestringCampaign display name
budgetCapintegerTotal budget cap in points
alertThresholdnumberAlert threshold as a fraction (e.g. 0.8 = 80%)
spentintegerPoints spent so far
campaign.budget_suspended

Fired when a campaign is automatically paused because it hit its budget cap.

fieldtypedescription
campaignIdstring (uuid)Campaign ID
campaignNamestringCampaign display name
budgetCapintegerTotal budget cap in points

Points

points.expired

Fired by the nightly expiry worker when a member's points expire.

fieldtypedescription
memberIdstring (uuid)Loyalty member ID
pointsExpiredintegerNumber of points that expired

Rewards

reward.issued

Fired by the fulfilment worker when a tangible reward transitions from PENDING_FULFILMENT to ISSUED. The reward code is available in the payload.

fieldtypedescription
rewardIdstring (uuid)Issued reward ID — use with GET /members/:memberId/rewards
memberIdstring (uuid)Loyalty member ID
campaignIdstring (uuid)Campaign that triggered the reward
campaignNamestringCampaign display name
rewardTypestringCOUPON_VOUCHER | GIFT_CARD | DISCOUNT_VOUCHER | FREE_ITEM
statestringAlways "ISSUED" for this event
valueobjectType-specific reward detail — code, amount, discountType, skus, etc.
Events — API Reference