PassNinja vs WalletWallet API
Both PassNinja and WalletWallet sign the Apple certificate for you. Compare their pricing models, features, and APIs side by side, with verified 2026 numbers.
PassNinja and WalletWallet are both API-first wallet-pass platforms. Both sign passes with their own Apple certificate so you don’t need to touch the Apple Developer Program. That puts them in the same category, which makes the choice between them more interesting than the usual “do you want to manage certs yourself or not.”
PassNinja has the broader product: Apple + Google Wallet with lifecycle on both, NFC, seven SDKs, and SMS/email delivery. WalletWallet is a REST API for Apple Wallet passes, served sub-200ms from Cloudflare’s global edge. POST to create, PUT to update with APNs push. The same .pkpass opens in Google Wallet on Android. $19/month flat.
The pricing models are different too. PassNinja bills per active pass per month, WalletWallet bills per pass generation. Which one is cheaper depends entirely on how long your passes live in your customers’ wallets.
This page tries to lay out both products fairly. If PassNinja is the right pick, we say so.
Summary
PassNinja is the more complete product: Apple + Google Wallet with lifecycle on both, NFC, SDKs, SMS delivery. It charges $21/month per pass template + $0.11 per active pass per month. Active-pass billing means a 100,000-member loyalty program costs about $11,000/month.
WalletWallet is a REST API for Apple Wallet passes, served sub-200ms from Cloudflare’s global edge. POST creates a signed .pkpass; PUT updates it and pushes the refresh over APNs. The same file opens in Google Wallet on Android (live updates on Google are on the roadmap). $19/month flat for up to 100,000 passes; 1,000/mo free, indefinite. We sign with our certificate, with no Apple Developer account required.
If you need Google Wallet live updates, NFC, multi-language SDKs, or SMS delivery, PassNinja is the right pick. If you only need Apple-Wallet lifecycle (with a Google Wallet pass available on Android), WalletWallet’s pricing is dramatically lower.
What PassNinja is

PassNinja is a wallet-pass API for developers, with the Apple and Google Wallet pieces unified under one product. They sign with their own platform certificate by default, so customers don’t need an Apple Developer account to start, though they offer bring-your-own-cert as an option. The product covers the full pass lifecycle: create, update, push, scan via NFC. They also ship multi-language SDKs (Python, Ruby, Node.js, Swift, Java, C#, PHP) and built-in SMS/email delivery for “Add to Wallet” links.
PassNinja is the choice for teams that want a single API for both wallets, lifecycle features included, and a pricing model that bundles all of it into one monthly bill.
What WalletWallet is

WalletWallet is a REST API for Apple Wallet passes, served from Cloudflare’s global edge. Two write endpoints (POST, PUT), one read endpoint, no template or project state on our side.
- Apple Wallet, fully.
POST /api/pkpasscreates a signed pass and returns anX-Serial-Numberheader.PUT /api/pkpass/{serial}updates the pass and fans out an APNs push to every installed device. Identical bodies are free no-ops. - Google Wallet via
.pkpassconversion on Android. The signed pass we return opens directly in Google Wallet on Android, so one API call lands a pass in both wallets. Live push updates on Google Wallet are on the roadmap, not shipped. - Fast and cheap. Sub-200ms pass generation and instant push, served from Cloudflare’s co-located global edge. $19/mo flat for up to 100,000 passes; 1,000/mo free, indefinite. We sign with our certificate, with no Apple Developer account required.
- Everything a pass needs. Geofencing (up to 10
locationssurface the pass on the lock screen near a coordinate), barcode formats (QR,PDF417,Aztec,Code128),expirationDays, six color presets free plus custom hex on Pro, brand assets (logoURL/thumbnailURL/stripURL/iconURL),changeMessagetemplates for lock-screen banners,organizationNameas the notification title. See/llms.txtfor the full list. - Start simple, stay simple. The Pass Editor on the homepage previews every pass change live, including push updates. Tune the fields, colors, and images, watch the pass update, then copy the equivalent code and run it. The dashboard editor handles signed-in push-to-installed-passes too.
- Agent-ready docs. Point Claude or any LLM at
/llms.txtand it knows how to call the API. - Usable by non-developers. The Pass Editor doesn’t require writing code to design or test a pass.
Side-by-side code
PassNinja’s flow is two-step: define a template once via their API or dashboard, then create passes against the template. The pass response is a URL your user opens to add the pass to their wallet.
WalletWallet is one step:
curl -X POST https://api.walletwallet.dev/api/pkpass \
-H "Authorization: Bearer ww_live_..." \
-H "Content-Type: application/json" \
-d '{
"barcodeValue": "MEMBER-12345",
"barcodeFormat": "QR",
"logoText": "Loyalty Card",
"primaryFields": [{"label": "BALANCE", "value": "$42.50"}],
"secondaryFields": [{"label": "MEMBER", "value": "Sarah K."}]
}' \
--output member.pkpass
The response body is the .pkpass file. You serve it however you want, whether as an email attachment, an “Add to Apple Wallet” button on a page, or a download link.
Both shapes are valid. PassNinja’s template model gives you a reusable design and lets you push updates to every pass that shares it; WalletWallet’s stateless model is simpler when each pass is independent and you keep your own data.
Pricing at common volumes
PassNinja’s public pricing follows a formula: (templates × $21/mo) + (active passes × $0.11/mo). The interesting word is active, since a pass counts only while it’s installed and not expired. WalletWallet bills per generation, once, regardless of how long the pass lives.
That distinction matters more than any other number on this page.
Long-lived passes (loyalty, membership, business cards)
Steady-state monthly cost for a single pass design (one template). Active passes accumulate over time on PassNinja.
| Active passes | PassNinja | WalletWallet |
|---|---|---|
| 100 | $32 | $0 (free) |
| 1,000 | $131 | $0 (free) |
| 10,000 | $1,121 | $19 |
| 100,000 | $11,021 | $19 |
These numbers look extreme because the billing models are structurally different. PassNinja charges every month for every active member, while WalletWallet charges once at generation. For a loyalty program where the average member keeps the pass for two years, PassNinja’s 100K-member tier represents about $264,000 over the two-year life of those passes. WalletWallet’s $19/month doesn’t grow with active membership.
Short-lived passes (event tickets, coupons, boarding passes)
When a pass expires within roughly a month, “active passes” ≈ “passes generated this month” and the two billing models converge.
| Generations / mo (~1mo lifetime) | PassNinja | WalletWallet |
|---|---|---|
| 100 | $32 | $0 |
| 1,000 | $131 | $0 |
| 10,000 | $1,121 | $19 |
| 100,000 | $11,021 | $19 |
For a high-volume event ticket business, PassNinja is paying for the lifecycle features in the same bill, with Google-Wallet live updates and NFC included. WalletWallet’s $19 covers Apple-Wallet generation and updates; Google-Wallet live updates and NFC aren’t on our side, so if you need those you’d use another vendor.
Multiple pass designs
PassNinja charges $21/mo per template. Each unique pass design (your loyalty card, your VIP card, your gift card) is a separate template.
| Pass designs | PassNinja extra (templates only) | WalletWallet |
|---|---|---|
| 1 | $21/mo | $0 |
| 5 | $105/mo | $0 |
| 20 | $420/mo | $0 |
| 100 (e.g. white-label) | $2,100/mo | $0 |
WalletWallet has no template concept, since every pass is independent JSON. Heavy multi-design or per-customer-design workloads see this difference most.
What WalletWallet doesn’t do (yet)
We try to be upfront about this on every page. Compared to PassNinja, WalletWallet today:
- Does not support Google Wallet live updates. Our
.pkpassopens in Google Wallet on Android, but Google Wallet doesn’t honorwebServiceURL, so ourPUTupdates and APNs push only reach iOS devices. PassNinja covers Google Wallet end-to-end. - Does not support NFC (Apple VAS, Google SmartTap). PassNinja does.
- Does not have webhooks for install/uninstall events. PassNinja sends them.
- Does not include SMS/email delivery. PassNinja has it built in at $0.10/msg. We expect you to use SendGrid, Postmark, Twilio, or whatever delivery your stack already uses.
- Does not ship SDKs. PassNinja publishes seven (Python, Ruby, Node.js, Swift, Java, C#, PHP). We’re REST + JSON only.
- Does not have an analytics dashboard. No install/uninstall tracking on our side. PassNinja sends
pn.pass.installed,pn.pass.updated, andpn.pass.uninstalledevents via webhooks you can wire into your own analytics.
If any of these are blocking requirements, PassNinja is the better choice today. We’d rather you find out from this page than mid-implementation.
Feature comparison
| PassNinja | WalletWallet | |
|---|---|---|
| Apple Wallet pass generation | ✓ | ✓ |
| Google Wallet support | ✓ | — |
| Pass updates (Apple Wallet) | ✓ | ✓ (PUT /api/pkpass/{serial}) |
| Push notifications (Apple Wallet) | ✓ | ✓ (APNs fan-out on every PUT) |
| Pass updates / push on Google Wallet | ✓ | — |
| NFC (Apple VAS, Google SmartTap) | ✓ | — |
| Webhooks | ✓ | — |
| SMS / email pass delivery | $0.10/msg | — |
| Multi-language SDKs | Py / Rb / Node / Swift / Java / C# / PHP | — |
| Analytics dashboard | webhook events | — |
| Apple cert handling | platform handles | platform handles |
| API model | template + pass | POST + PUT, stateless |
| Free tier | $10 credits | 1,000 passes/mo, indefinite |
| Pricing model | per-template + per-active-pass | flat $19/mo + per-generation |
| Public pricing | yes | yes |
| Edge / global delivery | not stated | Cloudflare Workers |
When PassNinja is the better pick
- You need Google Wallet live updates alongside Apple. PassNinja covers both wallets end-to-end. Our
.pkpassopens in Google Wallet on Android, but updates and push reach only iOS on our side. - You need both Apple Wallet and Google Wallet. PassNinja gives you both behind one API. We’re Apple-only.
- You need NFC (Apple VAS, Google SmartTap, contactless redemption). PassNinja has it.
- You want SDKs in your language. PassNinja ships seven (Python, Ruby, Node.js, Swift, Java, C#, PHP). We’re REST-only.
- You want SMS/email delivery built into the same product. PassNinja has it; we don’t.
- You want lifecycle features bundled into your wallet bill. PassNinja’s active-pass pricing covers updates, push, and Google Wallet within the same line item, and sometimes that’s exactly the procurement model you want.
When WalletWallet is the better pick
- You want the fastest pass generation and push. Sub-200ms generation from Cloudflare’s co-located global edge; APNs push lands on every installed device within seconds. Most competitors don’t publish latency numbers, and we do.
- You want a live preview before writing any code. The Pass Editor on our homepage previews every pass change (fields, colors, images, push), and the dashboard editor sends real push updates to installed passes after signup. Copy the equivalent code when you’re ready.
- You want agent-ready docs. Point Claude or any LLM at
/llms.txtand it can call the API end-to-end. No SDK plumbing needed; the docs are designed for both humans and agents. - Non-developers on your team will touch this too. The Pass Editor doesn’t require writing code to design or test a pass.
- You skip the Apple Developer Program entirely. We sign with our certificate by default, with no $99/yr fee, no Pass Type ID setup, and no certificate renewal calendar.
- Your passes are long-lived. Loyalty cards, membership cards, business cards, and IDs are all things customers keep for months or years. The active-pass billing model is most expensive here, and our generation-fee model is cheapest. At 10,000 active loyalty members, PassNinja is $1,121/month and we’re $19/month.
- You only need Apple Wallet. If your customer base is iOS-skewed or you’ve decided to ship one wallet first and the other later, you don’t need to pay for Google Wallet you won’t use.
- Your passes are short-lived or you only need Apple-Wallet lifecycle. For event tickets and coupons that expire fast, or programs where Google-Wallet live updates and NFC aren’t on the requirements list, PassNinja’s $11,021/month at 100K active members is hard to justify when WalletWallet is $19.
- You have many pass designs. PassNinja’s $21/mo per template stacks fast with white-label or per-customer-design workloads. We don’t have a template concept, so this is free on our side.
- You want a flat, predictable monthly bill that doesn’t grow with active membership.
Try it before you decide
Get a free API key for 1,000 passes/month, indefinite, no card. After signup the Pass Editor in the dashboard previews every pass change live (including push updates to installed passes), so you can dial in fields, colors, and images, then copy the equivalent code and run it. Before signup the homepage Pass Editor runs the same preview live.
FAQ
Do I need an Apple Developer account for PassNinja or WalletWallet? No, not on either side. PassNinja and WalletWallet both sign with their own platform certificate by default. PassNinja’s pricing page describes their flow as “sign and issue NFC passes using our certificate”, with optional bring-your-own-cert later. The $99/yr Apple Developer fee is optional in both products.
Why is PassNinja so much more expensive at scale? PassNinja bills per active pass per month, so every member who keeps your pass installed costs $0.11/month, every month. WalletWallet bills per generation, once. For a 100,000-member loyalty program where members keep the pass for years, PassNinja is around $11,021/month for as long as those members stay, while WalletWallet stays at $19/month because we charged once at issue. The two billing models are structurally different.
What does “active pass” mean exactly? On PassNinja, an active pass is one that is installed in a wallet and not expired. If a pass expires (event ticket past the event date) or the user removes it from their wallet, it stops counting toward the active total. For short-lived passes, “active” approximates “issued this month”; for long-lived passes, “active” accumulates over time.
Can I migrate from PassNinja to WalletWallet? Apple-Wallet generation, updates, and push translate cleanly. Both APIs use the standard PassKit field model (primaryFields, secondaryFields, etc.), so payload translation is mostly mechanical. Google-Wallet live updates, NFC, webhooks, and SMS delivery don’t have equivalents on our side, so workflows depending on those would need to stay on PassNinja or run hybrid.
Does PassNinja have SDKs? Yes. Their SDK docs list packages for Python, Ruby, Node.js, Swift, Java, C#, and PHP. WalletWallet is REST-only (no SDKs yet). If your team’s language is in PassNinja’s list and SDK ergonomics matter, that’s a tangible difference.
Is the active-pass billing model bad? It’s a structurally different model. PassNinja’s active-pass fee scales with your installed base and bundles Google-Wallet live updates and NFC. Generation-fee billing doesn’t scale with active membership. At 100K long-lived members, PassNinja is about $11,000/month for as long as they stay, while WalletWallet stays $19/month. At short pass lifetimes (event tickets that expire in days), the two models converge. Both prices are public, so you can model your workload on either side.
What does Cloudflare Workers actually mean for me? WalletWallet runs on Cloudflare’s global edge network, so the pass-generation endpoint responds from whichever data center is nearest the request, and we target sub-200ms p50 worldwide. See our pricing page for live runtime numbers. PassNinja doesn’t publish their hosting architecture; we haven’t seen latency complaints from their customers either.
Last verified 2026-05-20. PassNinja’s pricing claims are pulled from passninja.com/pricing; SDK list from passninja.com/documentation/sdks; webhook and NFC details from the API reference. If you spot something out of date, let us know, and we’d rather correct the page than have it stale.
Try WalletWallet in 60 seconds
Sign up with just an email and verification code (no card), then generate your first signed .pkpass with one curl. Free tier covers 1,000 passes/month, indefinite.