data object. Perkstar wraps it
in the common envelope documented in Receive webhooks.
Field conventions
- IDs are opaque strings. Store and compare them exactly.
occurredAt,scheduledStart,scheduledEnd,attendedAt, andresolvedAtare ISO 8601 UTC timestamps.createdin the outer envelope is Unix seconds.- Money fields ending in
Penceare integer minor units. - Nullable fields are sent as JSON
null; optional fields may be absent. testMode: trueidentifies a transaction generated with test credentials.
Customer lifecycle
customer.enrolled
customer.enrolled
customer.unenrolled
customer.unenrolled
customer.anonymized
customer.anonymized
Loyalty activity
transaction.created.type is normally STAMP, REDEEM, or ADJUST.
tier.changed.kind is status, cashback, or discount.
transaction.created
transaction.created
coupon.redeemed
coupon.redeemed
reward.redeemed
reward.redeemed
tier.changed
tier.changed
Tickets, gifts, and multipasses
ticket.purchased
ticket.purchased
ticket.cancelled
ticket.cancelled
ticket.refunded
ticket.refunded
gift.purchased
gift.purchased
gift.redeemed
gift.redeemed
multipass.purchased
multipass.purchased
Memberships
membership.purchased
membership.purchased
membership.renewed
membership.renewed
membership.cancelled
membership.cancelled
Engagement
feedback.submitted
feedback.submitted
automation.fired
automation.fired
broadcast.sent
broadcast.sent
Bookings
All booking events use the same schema. Only the event name and resultingstatus differ.
Required fields are
id, provider, providerBookingId, status,
scheduledStart, loyaltyCredited, source, and occurredAt. The fields
customerId, cardId, scheduledEnd, attendedAt, and resolvedAt are
nullable. serviceLabel and staffLabel contain the provider labels saved on
the booking.
booking.created
booking.created
booking.confirmed
booking.confirmed
booking.attended
booking.attended
booking.no_show
booking.no_show
booking.cancelled
booking.cancelled
Diagnostics
The targeted test ignores the endpoint’s subscription filter, but the webhook
must be active.

