How to Use Zapier Actions with PassNinja

Daniel Baudino

Updated June 25, 2026

TL;DR: Create, update, delete, and find passes from any Zapier trigger.
  1. 1. Add PassNinja as an action in any Zap.
  2. 2. Choose Create Pass, Update Pass, Delete Pass, or Find Pass.
  3. 3. Select your pass template — per-template fields appear automatically.
  4. 4. Map data from your trigger to the pass fields.
  5. 5. Use the returned serialNumber to chain updates, lookups, and deletions.

PassNinja exposes four Zapier actions that cover the full pass lifecycle — issuing a new pass, pushing updates to a pass already in someone's wallet, deleting a pass when access should be revoked, and looking up a pass by serial number. Together they let you automate every stage of a loyalty program, event, or access control workflow without writing code or calling the API directly.

The four actions

ActionWhat it does
Create PassIssues a new Apple Wallet or Google Pay pass from a template
Update PassChanges field values on an existing pass; update appears on device in real time
Delete PassPermanently deletes a pass; removes it from the holder's wallet
Find PassLooks up a pass by serial number; returns current field values

Create Pass

Use this to issue a new pass the first time a customer or guest enters your system.

When to use it

  • A customer signs up and needs a loyalty card
  • A guest registers for an event and needs a ticket or invitation
  • A member subscribes and needs a membership pass
  • Any situation where a new pass should be created on demand

How to set it up

  1. Add PassNinja → Create Pass as an action in your Zap.
  2. Connect your PassNinja account.
  3. Select a Pass Template from the dropdown — the list shows all templates in your account.
  4. After selecting a template, additional fields appear for every field defined on that template. Map data from your trigger to each field.
  5. Click Test action — Zapier creates a real pass and returns the result.

What it returns

{
  "id": "abc123def456789012",
  "serialNumber": "abc123def456789012",
  "passType": "ptk_0x1a4b",
  "passUrl": "https://i.installpass.es/p/abc123def456789012"
}

Always save the serialNumber somewhere retrievable — your CRM, a spreadsheet column, a database field. Every subsequent update, lookup, and deletion requires it.

Example Zap

Trigger: Typeform → New Submission
Action 1: PassNinja → Create Pass
  Template: Loyalty Card
  Email: {{form.email}}
  First Name: {{form.first_name}}
  Points: 0
Action 2: Gmail → Send Email
  To: {{form.email}}
  Body: Add your loyalty card to your wallet: {{1. passUrl}}
Action 3: HubSpot → Update Contact
  Pass Serial Number: {{1. serialNumber}}
  Pass URL: {{1. passUrl}}

Update Pass

Use this to push changes to a pass that's already in someone's wallet. The update appears on the device silently — no action required from the pass holder.

When to use it

  • A customer earns points and their balance needs to change
  • An event's date, location, or details change
  • A guest's table assignment or seat is updated
  • An access pass needs to show a new status (e.g., CHECKED IN)
  • A membership tier changes from Silver to Gold

How to set it up

  1. Add PassNinja → Update Pass as an action.
  2. Select a Pass Template.
  3. Provide the Serial Number of the pass to update — map this from a field in your trigger or a previous action that stored it.
  4. Fill in only the fields you want to change. Empty fields are ignored — they do not overwrite existing values.

Important: You can only update a pass you created. The serial number must belong to your account.

What it returns

{
  "id": "abc123def456789012",
  "serialNumber": "abc123def456789012",
  "passUrl": "https://i.installpass.es/p/abc123def456789012"
}

Example Zap — update points after a Shopify order

Trigger: Shopify → New Order
Action 1: PassNinja → Find Pass
  Pass Template: Loyalty Card
  Serial Number: {{order.customer.note}} (where you stored it at sign-up)
Action 2: Formatter by Zapier → Numbers → Perform Math
  Formula: {{1. pass.points}} + {{order.subtotal_price}}
Action 3: PassNinja → Update Pass
  Pass Template: Loyalty Card
  Serial Number: {{1. serialNumber}}
  Points: {{2. output}}

Example Zap — mark a guest as checked in

Trigger: Google Sheets → Updated Row (Check-In column changes to YES)
Filter: Only continue if Check-In Status exactly matches YES
Action 1: PassNinja → Update Pass
  Pass Template: Event Ticket
  Serial Number: {{sheet.pass_serial}}
  Status: CHECKED IN
  Checked In: true

Delete Pass

Use this to permanently revoke a pass. Once deleted, it no longer works and is removed from the holder's wallet on their next sync.

When to use it

  • A subscription or membership is cancelled
  • An event ticket is refunded
  • A guest's invitation is withdrawn
  • A single-use access pass has been used and should be voided

How to set it up

  1. Add PassNinja → Delete Pass as an action.
  2. Select the Pass Template.
  3. Provide the Serial Number of the pass to delete.

What it returns

{
  "id": "abc123def456789012",
  "serialNumber": "abc123def456789012",
  "deleted": true
}

Example Zap — delete a membership pass on Stripe cancellation

Trigger: Stripe → Cancelled Subscription
Action 1: PassNinja → Delete Pass
  Pass Template: Membership Card
  Serial Number: {{subscription.metadata.passninja_serial}}
Action 2: Gmail → Send Email
  Subject: Your membership has ended
  Body: Your digital membership card has been deactivated.

Tip: Store the serialNumber in Stripe subscription metadata when you create the pass. That makes it immediately available here without a lookup step.

Update vs Delete — when to use which

ScenarioUse
Membership lapsed — permanently goneDelete Pass
Subscription paused — temporarily inactiveUpdate Pass (set a status field to "Paused")
Event ended — keep record but void passUpdate Pass (set status to "Expired")
Single-use ticket — void after entryDelete Pass
Guest no-show — keep on fileUpdate Pass (set status to "No Show")

Find Pass

Use this to look up a pass by its serial number before updating or deleting it, or to check whether a pass already exists before creating a new one.

When to use it

  • You need to read current field values before calculating an update (e.g., current points balance before adding new points)
  • You want to check whether a pass exists before creating a duplicate
  • You need to confirm a pass belongs to a specific customer before taking action

How to set it up

  1. Add PassNinja → Find Pass as a search action.
  2. Select the Pass Template.
  3. Provide the Serial Number to look up.

What it returns

If the pass is found:

[{
  "id": "abc123def456789012",
  "serialNumber": "abc123def456789012",
  "passType": "ptk_0x1a4b",
  "passUrl": "https://i.installpass.es/p/abc123def456789012",
  "pass": {
    "email": "jane@example.com",
    "firstName": "Jane",
    "points": "250"
  }
}]

If not found: returns an empty result (no error — Zapier handles this as "0 results found").

Example Zap — prevent duplicate passes

Trigger: Google Sheets → New Row
Action 1: PassNinja → Find Pass
  Pass Template: Loyalty Card
  Serial Number: {{sheet.pass_serial_column}}
Filter: Only continue if Find Pass returned 0 results
Action 2: PassNinja → Create Pass
  ...

Example Zap — read current points before updating

Trigger: Shopify → New Order
Action 1: PassNinja → Find Pass
  Pass Template: Loyalty Card
  Serial Number: {{customer.note}}
Action 2: Formatter → Numbers → Perform Math
  Formula: {{1. pass__points}} + {{order.total_price}}
Action 3: PassNinja → Update Pass
  Points: {{2. output}}

Note: Nested fields from the pass object are accessed in Zapier as pass__fieldname (double underscore) in the data mapper.


Chaining actions together

The serialNumber returned by Create Pass is the key that connects all four actions. A well-designed Zap stores it at creation and reuses it throughout the pass lifecycle:

New customer signs up
  → Create Pass → returns serialNumber
  → Store serialNumber in CRM / sheet / database

Customer makes a purchase
  → Find Pass (using stored serialNumber)
  → Calculate new points
  → Update Pass (using same serialNumber)

Subscription cancelled
  → Delete Pass (using stored serialNumber)

Field mapping tips

Dynamic field names: After you select a Pass Template in Create Pass or Update Pass, the fields that appear depend on your template definition. If you change the template, recheck your field mappings.

Partial updates: In Update Pass, only fill in the fields you want to change. Any field left blank is skipped — it will not blank out the existing value on the pass.

Required vs optional fields: Fields marked required in the template must have a value for Create Pass. For Update Pass, all template fields are optional — you only send what's changing.

Date fields: Expect ISO 8601 format (2026-12-31T23:59:00.000Z). Use Formatter by Zapier → Date/Time → Convert if your source date is in another format.

Troubleshooting

"Pass template not found" The template ID stored in the action doesn't match any template in your account. Open the action step, reselect the template from the dropdown, and save.

Update Pass makes no visible change on the device Push notifications can take a few minutes to arrive on the device. If no update appears after 10 minutes, check that your PassNinja account has push credentials configured for the platform (Apple Push Notification Service for iPhone, Google Wallet API for Android).

Delete Pass succeeds but pass still shows in wallet The pass is deleted from PassNinja immediately, but the wallet app on the device removes it on the next background sync — usually within a few minutes.

Find Pass returns empty even though the pass exists Confirm the serial number is correct — it's case-sensitive. Also confirm the Pass Template dropdown in Find Pass matches the template the pass was created from.

Was this article helpful?
Yes No