
- Pass status changed — fires each time a pass moves between lifecycle states. The most common use is detecting enrollment: when a customer adds their pass to Apple Wallet or Google Wallet, the pass goes from
PREACTIVEtoACTIVE, and that change fires the webhook. - Transaction created — fires when a transaction is recorded against a pass, for example an NFC tap at a terminal.
Before you start
- An HTTPS endpoint that can receive POST requests. The URL must be public — plain HTTP, localhost, and private network addresses are rejected.
- Which events you need. For enrollment notifications, Pass status changed is enough.
- Your endpoint’s credentials, if it requires them — for example a bearer token to send in an
Authorizationheader.
Create a subscription
- Open your program and find the Event webhooks card.
- Click Configure — or Manage, if the program already has subscriptions — then Add subscription.
- Give it a Name that says where the events go, for example “Loyalty CRM sync”, and optionally a Description.
- Enter the Webhook URL — the HTTPS endpoint that receives the deliveries.
- Under Signing secret, click Generate, then Copy. Sharing this secret with your endpoint lets it verify that deliveries really come from Stell — optional, but recommended.
- Tick the Event types the endpoint should receive. The Example payload panel next to the form shows exactly what your endpoint gets for each selected type.
- Leave Active on.
- If your endpoint requires authentication, add it under Custom Headers — see below.
- Click Create subscription.

Custom headers
Custom headers are sent with every delivery — typically your endpoint’s authentication. Click Add Header and pick a preset:- Authorization — for token auth; enter the value your endpoint expects, for example
Bearer your-token-here. - X-API-Key — for endpoints keyed by API key.
- Custom — any header of your own, as long as its name starts with
X-.
Authorization and X-* headers are allowed. Headers without a value aren’t saved, and if two headers share a name, only the last value is kept.
Manage subscriptions
Open Manage on the Event webhooks card to see the program’s subscriptions — each shows its name, event types, and an Active or Inactive badge.- Edit — change anything about the subscription: name, URL, events, secret, headers. The program it belongs to can’t be changed; create a subscription on the other program instead.
- Pause — turn off the Active switch in the edit dialog. Deliveries stop, but the configuration is kept for when you switch it back on.
- Delete — stops all event deliveries to the endpoint permanently. This can’t be undone.
Test your webhook
There’s no test button — verify with a real pass instead, which also proves the whole chain:- Issue a pass in the subscribed program, with your own details.
- Add it to your wallet.
- Adding the pass activates it — that status change fires the webhook within moments. Check that your endpoint received the delivery.
Nothing fires when a pass is merely issued — the first Pass status changed delivery comes when the customer adds it to a wallet. A pass that’s never added sends nothing.
If deliveries don’t arrive
- Right program? The most common miss: the pass belongs to a different program than the one with the subscription.
- Subscription Active, with the right event type ticked?
- Did a subscribed event actually happen? A status change or a transaction — issuing a pass alone doesn’t fire anything.
- Does your endpoint answer with a 2xx status? Failed deliveries are retried twice within seconds, then dropped — see retries.
- Expecting a header that isn’t arriving? Only
AuthorizationandX-*custom headers are sent; anything else was dropped when the subscription was saved.