The official app is available in public
Beta. Let it create and manage
these subscriptions. Do not also paste a Webhooks by Zapier — Catch Hook
URL into Perkstar for the same event unless you intentionally want two
independent deliveries.
Subscription lifecycle
1
The Zap is enabled
Zapier first creates a paused Perkstar webhook for the selected trigger and
retains its signing secret. It then explicitly activates the subscription
with the unique, unguessable Zapier HTTPS target URL, event, card, and
live/test filters. If activation fails, Zapier asks Perkstar to delete the
unused endpoint instead of delivering to a Zap whose setup did not finish.
The target URL is not exposed as a Zap field.
2
Perkstar records a matching event
Perkstar durably creates the delivery before scheduling the outbound POST.
Events that do not match that named trigger, selected card, or live/test
mode are rejected before a delivery row or outbound request is created.
3
Zapier acknowledges the request
Any
2xx response is success. Zapier then deduplicates and starts the Zap
run using the event fields.4
The trigger is disabled or removed
When Zapier unsubscribes the trigger, it deletes the app-managed Perkstar
endpoint by the ID returned during subscription. Re-enabling the trigger
creates a fresh endpoint and signing secret. Historical Zapier tasks remain
under Zapier’s retention settings.
409 webhook_subscription_limit_reached instead of silently replacing an
existing subscription.
Perkstar derives Zapier’s subscription identity from the connected business and
named trigger plus the Zap ID when the runtime supplies it. Zapier marks that
field deprecated and optional, so the official integration falls back to the
documented REST Hook target URL instead of refusing activation. Perkstar binds
the resulting key to the live webhook row rather than a 24-hour response cache.
A lost create response, access-token rotation, delayed retry, failed unsubscribe,
or reconnect with the same identity can recover the row and secret. When the Zap
ID is available, a changed callback URL recovers it too. The activation PATCH
applies the current URL, card, and live/test filters. Deleting the row removes
the binding immediately, so an off/on cycle cannot be given a deleted
subscription ID or a stale cached capacity error.
Event identity
Perkstar sends the official app this common envelope:id and X-Perkstar-Delivery-Id identify one logical delivery and remain
stable across its automatic retries. created is the source event’s
data.occurredAt time expressed as Unix seconds, so it also remains stable.
The X-Perkstar-Timestamp signing time and signature are regenerated for each
attempt. Zapier uses the stable ID to avoid starting the same logical task
twice.
The app exposes id, event_type, event_created_at, and organization_id to
later Zap steps. It flattens the event-specific data fields onto the same
record. event_created_at is the raw created value rendered as ISO 8601; it
is not the signing-attempt time.
Custom webhook endpoints support manual resend in Perkstar. Zapier-owned
subscriptions are app-managed and intentionally hidden from those edit, rotate,
delete, test, and resend controls.
Delivery policy
- Any HTTP
2xxresponse succeeds. - A non-
2xx, network failure, or response taking longer than ten seconds schedules the next attempt. - An HTTP
410 Goneresponse is treated as a permanently removed callback: Perkstar exhausts that delivery immediately and pauses the subscription. - After four failed attempts, the delivery is exhausted and retained for support diagnostics.
- Delivery is at least once. A receiver and every downstream write must tolerate duplicates.
- Different events can arrive out of order. Use
data.occurredAtor its equivalent outercreatedvalue for business ordering, not the signing timestamp.
Signature handling
Perkstar signs the exact raw body with HMAC-SHA256 and sendsX-Perkstar-Signature: t=<unix-seconds>,v1=<hex>. Zapier’s REST Hooks runtime
stores Perkstar’s one-time subscription secret and makes it available to the
live hook handler. Perkstar returns it only on creation or an authenticated
idempotent replay of that same app-owned subscription; normal reads never expose
it. The official app verifies the signature over the exact raw
bytes with a constant-time comparison and rejects timestamps more than five
minutes from receipt. Zapier also gives every active Zap a unique HTTPS target
URL; do not disclose or reuse it.
Developers building a separate receiver should follow Receive webhooks
and apply the same raw-body verification before parsing JSON. Zapier does not
support a separate subscription identity-confirmation handshake; callback HMAC
verification is performed inside the official app instead.
Testing an instant trigger
- Select the named trigger and the intended Perkstar connected account.
- If the trigger offers a card filter, choose the explicit active card.
- Ask Zapier to test or listen for the trigger.
- Perform the corresponding low-risk event in the connected Perkstar business.
- Confirm
event_type,organization_id,event_created_at, the flattened event-specific fields, and the stableidbefore mapping later steps.
webhook.test event is for Perkstar’s generic webhook tools and
is not exposed as a named Zapier trigger. If no recent match exists, perform the
corresponding low-risk event and test again. A sample is not evidence that every
optional field will be non-null on a later live event.
Timing and scope of observed triggers
Some triggers are emitted when Perkstar observes a provider or calculated state, rather than directly from a merchant API request:- Wallet Pass Installed fires once when Perkstar first obtains installation evidence for that pass. Apple supplies a device-registration callback. Recently issued Google passes are eligible on the 15-minute projector; older unseen objects use a lower check cadence, and provider responses or projector backlog can extend observation time. Issuing a pass or opening its save link does not fire the trigger.
- Card Scanned fires only after a successful online lookup in the Perkstar Scanner. An offline cache-only lookup, dashboard search, or POS customer lookup is outside this trigger’s contract.
- Customer Card Expired represents one enrolment reaching one effective
expiry instant. If that enrolment is extended and later reaches a different
effective expiry, another event can fire.
event_created_atreflects the expiry instant, even if projection occurs shortly afterwards. - Customer Lifecycle Group Changed represents movement among Perkstar’s six exclusive lifecycle groups. It does not track saved-segment membership, and an existing customer’s initial baseline classification is intentionally suppressed.
- New Customer Referral is created when one loyalty customer refers another customer. It does not report Perkstar merchant, agency, or partner referrals.

