Skip to main content
This is the complete public outbound-event catalogue: 29 business events plus the targeted webhook.test diagnostic. Event names are stable, dotted, lowercase strings. New optional fields may be added without a version change; existing fields are not repurposed. Every example below shows the event-specific 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, installedAt, expiresAt, creditedAt, scheduledStart, scheduledEnd, attendedAt, and resolvedAt are ISO 8601 UTC timestamps.
  • created in the outer envelope is Unix seconds.
  • Money fields ending in Pence are integer minor units.
  • Nullable fields are sent as JSON null; optional fields may be absent.
  • testMode: true identifies a transaction generated with test credentials.

Customer lifecycle

previousGroup and currentGroup use one of vips, regulars, new, slipping, atRisk, or lost; currentGroup can be null if a customer no longer classifies into a group. These are Perkstar’s six exclusive lifecycle groups, not operator-created saved segments. The first classification is stored as a baseline without emitting customer.group_changed, so connecting a new endpoint does not replay every existing customer. For a business’s first interested endpoint, that baseline is established on the next completed projection. Tracking begins after the warm-up sweep, so a transition inside that initial window becomes baseline state rather than an event.

Wallet, scanner, expiry, and referrals

Observation boundaries

  • wallet.installed is the first provider-owned installation observation per pass and platform. Creating a pass or opening a save link is not an install. Apple reports a device registration directly. Recently issued Google passes are eligible on the 15-minute projector; older unseen objects back off to a lower check cadence, and provider responses or projector backlog can extend observation time. Do not treat 15 minutes as a delivery SLA. platform is apple or google, and detectionSource is apple_device_registration or google_has_users. When a business enables its first interested endpoint, the next completed Google check stores existing state as a no-event baseline; Google-install tracking begins after that warm-up sweep.
  • card.scanned covers a successful online lookup in the Perkstar Scanner. It does not fire for an offline IndexedDB cache lookup, a dashboard customer search, or a POS integration lookup. credentialType is wallet_pass_serial, enrollment_barcode, or physical_keyring. walletPassId and platform are non-null only for a direct wallet-pass serial; shared enrolment barcodes and physical keyrings are platform-neutral.
  • card.expired is per enrolment and effective expiry instant, not one event for the card template. expirySource is enrollment_override, fixed_date, or fixed_term. Extending or reissuing the enrolment can produce another event when the later effective expiry is reached.
  • referral.created is a customer-to-customer loyalty referral. It is not a merchant, agency, or partner-referral invitation. status is pending or credited; bonusTiming is on_signup or on_first_purchase, and creditedAt is null while a first-purchase referral remains pending.

Loyalty activity

transaction.created.type is normally STAMP, REDEEM, or ADJUST. tier.changed.kind is status, cashback, or discount.

Tickets, gifts, and multipasses

Memberships

Engagement

Bookings

All booking events use the same schema. Only the event name and resulting status 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. Provider lifecycles can skip states. Acuity appointments enter Perkstar as CONFIRMED, normally have no customerId until attendance matching runs, and are auto-attended by the Perkstar scheduler after their end time plus 15 minutes. Acuity does not emit a PENDING booking.

Diagnostics

The targeted test ignores the endpoint’s subscription filter, but the webhook must be active.