POST to your server when something happens to a pass, so you don’t have to poll.
Events
Add an endpoint
- In the dashboard, open Developers → Webhooks. Endpoints are separate for test and live, so pick the right mode first.
- Select Add endpoint and enter your URL. It must be a public
https://address. - Choose the events to receive, or All events to also get event types added later.
- Copy the endpoint’s signing secret. You’ll use it to verify each request.
Payload
Every event has the same shape. It contains no holder details, so fetch the pass bydata.pass.id if you need them.
string
Unique event ID. A delivery can arrive more than once, so use it to skip duplicates.
boolean
true for live passes, false for test passes.string
apple or google.string
exact for Apple, which reports every device. best_effort for Google, which may report late or not at all.string
What triggered the event. For
pass.installed: device_registered or google_saved. For pass.removed: device_unregistered, push_token_rejected or google_deleted.string | null
Identifies one Apple device’s copy of the pass and stays the same if it’s re-added.
null for Google.object
Where the pass is now.
apple.active_devices counts devices that have it. google.observed_state is saved, removed or unknown.Verify signatures
Each request carriessvix-id, svix-timestamp and svix-signature headers. Verify them with the endpoint’s signing secret before trusting the payload. The Svix libraries do this for you:
Node.js
verify throws if the signature is wrong or the timestamp is too old. Reply with a 400 in that case.
Respond and retry
Reply with any2xx status within a few seconds, then do the work. Any other response counts as a failure, and the delivery is retried automatically with growing delays. Each endpoint’s page in the dashboard lists recent deliveries, and you can resend one from there.