WalletPassAPI Docs

API reference

Webhook events

What each event's data holds. Every delivery is { id, type, createdAt, data }: see Webhooks to check its signature.

pass.created

A pass is created.

From the API, the dashboard or a spreadsheet import. issuer is the set that signed it (platform: the test credentials).

{
  "id": "evt_2f6c9a0d1b7e4c55",
  "type": "pass.created",
  "createdAt": "2026-10-08T19:31:12.000Z",
  "data": {
    "serialNumber": "9f904677-e06d-4b0f-8404-878ff1066f88",
    "externalId": "crm-1042",
    "status": "active",
    "issuer": "default"
  }
}

pass.updated

A pass's content changes.

Only when something changed: an update that changes nothing sends nothing. version is its new version, and notified whether installed passes were sent it. A notification adds notification, its message.

{
  "id": "evt_2f6c9a0d1b7e4c55",
  "type": "pass.updated",
  "createdAt": "2026-10-08T19:31:12.000Z",
  "data": {
    "serialNumber": "9f904677-e06d-4b0f-8404-878ff1066f88",
    "externalId": "crm-1042",
    "status": "active",
    "version": 5,
    "notified": true,
    "notification": "Double points this weekend"
  }
}

pass.revoked

A pass is revoked.

{
  "id": "evt_2f6c9a0d1b7e4c55",
  "type": "pass.revoked",
  "createdAt": "2026-10-08T19:31:12.000Z",
  "data": {
    "serialNumber": "9f904677-e06d-4b0f-8404-878ff1066f88",
    "externalId": "crm-1042",
    "status": "revoked"
  }
}

pass.erased

A revoked pass is deleted permanently.

Its content and holder are gone; only the serial number is kept. reason is requested (you deleted it) or retention (30 days after its revoke).

{
  "id": "evt_2f6c9a0d1b7e4c55",
  "type": "pass.erased",
  "createdAt": "2026-10-08T19:31:12.000Z",
  "data": {
    "serialNumber": "9f904677-e06d-4b0f-8404-878ff1066f88",
    "externalId": "crm-1042",
    "status": "erased",
    "reason": "retention"
  }
}

pass.apple.installed

A pass is added to an Apple device.

appleDevices is how many Apple devices it's on now.

{
  "id": "evt_2f6c9a0d1b7e4c55",
  "type": "pass.apple.installed",
  "createdAt": "2026-10-08T19:31:12.000Z",
  "data": {
    "serialNumber": "9f904677-e06d-4b0f-8404-878ff1066f88",
    "externalId": "crm-1042",
    "status": "active",
    "appleDevices": 1
  }
}

pass.apple.removed

A pass is removed from an Apple device.

reason is unregistered when the holder removes it, or push_token_invalid when Apple says devices no longer have it (devicesRemoved says how many). appleDevices is how many it's still on.

{
  "id": "evt_2f6c9a0d1b7e4c55",
  "type": "pass.apple.removed",
  "createdAt": "2026-10-08T19:31:12.000Z",
  "data": {
    "serialNumber": "9f904677-e06d-4b0f-8404-878ff1066f88",
    "externalId": "crm-1042",
    "status": "active",
    "appleDevices": 0,
    "reason": "unregistered"
  }
}

pass.google.saved

A holder saves a pass to Google Wallet.

{
  "id": "evt_2f6c9a0d1b7e4c55",
  "type": "pass.google.saved",
  "createdAt": "2026-10-08T19:31:12.000Z",
  "data": {
    "serialNumber": "9f904677-e06d-4b0f-8404-878ff1066f88",
    "externalId": "crm-1042",
    "status": "active"
  }
}

pass.google.removed

A holder removes a pass from Google Wallet.

{
  "id": "evt_2f6c9a0d1b7e4c55",
  "type": "pass.google.removed",
  "createdAt": "2026-10-08T19:31:12.000Z",
  "data": {
    "serialNumber": "9f904677-e06d-4b0f-8404-878ff1066f88",
    "externalId": "crm-1042",
    "status": "active"
  }
}

credential.expiring

An Apple certificate is about to expire.

60, 30, 14 and 7 days before an Apple certificate expires. Renew it in the dashboard, under Credentials. Not sent for credentials your organization shares with the workspace.

{
  "id": "evt_2f6c9a0d1b7e4c55",
  "type": "credential.expiring",
  "createdAt": "2026-10-08T19:31:12.000Z",
  "data": {
    "issuer": "default",
    "provider": "apple",
    "identity": "pass.com.example.loyalty",
    "expiresAt": "2026-11-07T12:00:00.000Z",
    "daysLeft": 30
  }
}

batch.completed

A spreadsheet import finishes.

A spreadsheet import has finished, with how many rows did what. status is completed, or stopped or cancelled when it ended early, such as when the month's operations ran out.

{
  "id": "evt_2f6c9a0d1b7e4c55",
  "type": "batch.completed",
  "createdAt": "2026-10-08T19:31:12.000Z",
  "data": {
    "id": "imp_8kq2m4x7",
    "status": "completed",
    "created": 412,
    "updated": 37,
    "unchanged": 3,
    "failed": 2,
    "skipped": 0
  }
}

Pass events never carry holder details: get the pass by its serialNumber when you need them. Add endpoints and choose their events in the dashboard, under Webhooks.