WalletWallet API
Get API Key Docs Pricing Changelog Log in

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.

Last updated 2026-05-20

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 homepage screenshot

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 homepage screenshot

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/pkpass creates a signed pass and returns an X-Serial-Number header. 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 .pkpass conversion 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 locations surface 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), changeMessage templates for lock-screen banners, organizationName as the notification title. See /llms.txt for 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.txt and 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 passesPassNinjaWalletWallet
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)PassNinjaWalletWallet
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 designsPassNinja 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 .pkpass opens in Google Wallet on Android, but Google Wallet doesn’t honor webServiceURL, so our PUT updates 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, and pn.pass.uninstalled events 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

PassNinjaWalletWallet
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 SDKsPy / Rb / Node / Swift / Java / C# / PHP
Analytics dashboardwebhook events
Apple cert handlingplatform handlesplatform handles
API modeltemplate + passPOST + PUT, stateless
Free tier$10 credits1,000 passes/mo, indefinite
Pricing modelper-template + per-active-passflat $19/mo + per-generation
Public pricingyesyes
Edge / global deliverynot statedCloudflare Workers

When PassNinja is the better pick

  • You need Google Wallet live updates alongside Apple. PassNinja covers both wallets end-to-end. Our .pkpass opens 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.txt and 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.