WalletWallet API
Generate Apple Wallet passes with one API call, then push live updates to every installed device whenever the content changes. JSON in, .pkpass out — no certificates or Apple Developer account to set up.
Starts free for up to 1000 passes per month
$0.00019 per pass on Pro
curl -X POST https://api.walletwallet.dev/api/pkpass \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ww_live_<your_key>" \
-d '{
"barcodeValue": "LOYALTY-98765",
"barcodeFormat": "QR",
"logoText": "Bayroast Coffee",
"primaryFields": [{"label": "CARD", "value": "Coffee Rewards"}],
"secondaryFields": [{"label": "TIER", "value": "Gold Status"}],
"colorPreset": "green",
"expirationDays": 365,
"stripURL": "https://example.com/coffee-strip.jpg"
}' \
-o rewards.pkpass Returns a signed .pkpass file. PUT the same JSON later to push updates to installed devices.
Why WalletWallet API?
Single Endpoint
One POST request, instant .pkpass file. No multi-step flows or Apple developer account needed.
Live Pass Editor
Design your pass visually, then grab the exact API call to reproduce it. Preview first, code second.
Free for 1,000 passes/mo
No credit card required. Start generating passes immediately and only upgrade when you need to.
No Setup Required
We handle Apple certificates and signing. You just send JSON, we return a ready-to-use .pkpass.
Fully Customizable Fields
Add as many fields as you need. Headers, primary, secondary, back-of-pass — all configurable via simple JSON arrays.
Your Branding
Custom colors, logos, thumbnails, and strip images to match your brand.
Push Updates to Installed Passes
Change a field, send one PUT request, and every iPhone with the pass installed banners on the lock screen within seconds. Wallet refreshes the pass in place — no reinstall needed.
Lock-Screen Location Triggers
Add up to 10 coordinates per pass. Wallet surfaces the pass on the user's lock screen when their device is nearby — coffee shop, stadium, storefront.
Use Cases
Build wallet experiences for any industry
Membership Cards
Gyms, clubs, co-working spaces. Let members check in with a tap, and update tier or balance on every installed card the moment it changes.
Event Tickets
Conferences, concerts, sports. Scannable tickets that push gate changes, seat updates, or schedule shifts directly to every attendee's lock screen.
Coupons & Loyalty
Retail, restaurants, e-commerce. Drive repeat visits with offers that surface on the lock screen when customers walk near your storefront.
Student & Campus IDs
Universities, schools, training programs. Tap-to-enter library, gym, dining hall, with the ID surfacing on the lock screen as students arrive on campus.
Everything is configurable
Edit any field and see the pass update live
Text next to the logo (top-left)
No header fields
No primary fields
No secondary fields
No back fields
Overrides color preset
Wide banner image. Use secondary fields for readable text when using this option.
API Reference
Everything you need to generate passes
Endpoint
POST https://api.walletwallet.dev/api/pkpass
Authentication
Include your API key in the Authorization header using the Bearer scheme.
Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Authorization | Bearer ww_live_<your_key> |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| barcodeValue | string | Yes | The data encoded in the barcode (e.g., member ID, ticket number) |
| barcodeFormat | string | Yes |
One of:
QR PDF417 Aztec Code128 |
| logoText | string | No | Text next to the logo (top-left of pass). |
| description | string | No | Accessibility text (not visible). Defaults to logoText. |
| organizationName | string | No | Issuing org shown in Wallet under the pass title. Max 64 chars. Falls back to your account default. |
| primaryFields | array | No | Main content fields. Array of {label, value, changeMessage?} objects. changeMessage is the lock-screen banner template that fires when this field's value changes during an update. |
| secondaryFields | array | No | Fields below primary. Array of {label, value, changeMessage?} objects. |
| headerFields | array | No | Top-right header area. Array of {label, value, changeMessage?} objects. |
| backFields | array | No | Back of pass. Array of {label, value, changeMessage?} objects. |
| locations | array | No | Up to 10 geofences. {latitude, longitude, altitude?, relevantText?} per entry. Surfaces the pass on the lock screen when the device is nearby. |
| colorPreset | string | No |
Color theme:
dark blue green red purple orange |
| color | string | No |
Custom hex color (Pro only)
e.g.,
#1e40af |
| logoURL | string | No |
URL to custom logo image (Pro
only). Supports HTTPS URLs or a
PNG data URI
(data:image/png;base64,...).
|
| title | string | No | Legacy shortcut. Sets primaryFields[0].value and logoText if those aren't set. |
| cardLabel | string | No | Legacy shortcut. Sets primaryFields[0].label. Defaults to CARD. |
| label | string | No | Legacy shortcut. Sets secondaryFields[0].label. |
| value | string | No | Legacy shortcut. Sets secondaryFields[0].value. |
| thumbnailURL | string | No | Top-right image. HTTPS URL or PNG data URI. Pro only. |
| stripURL | string | No | Banner behind the primary field. Switches to store card layout. HTTPS URL or PNG data URI. Pro only. |
| iconURL | string | No | Replaces the default lock-screen notification icon. Distinct from logoURL, which renders on the pass face. HTTPS URL or PNG data URI. Pro only. |
| expirationDays | number | No |
Pass expires after this many days. Common presets:
30,
90,
365. Any integer between
1 and
3650 is accepted.
|
Response
application/vnd.apple.pkpass
binary file (save as
.pkpass)
Successful responses include an X-Serial-Number header with the server-generated serial — save it if you plan to call PUT /api/pkpass/<serial> to push updates later.
Examples
curl -X POST https://api.walletwallet.dev/api/pkpass \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ww_live_<your_key>" \
-d '{
"barcodeValue": "MEMBER-12345",
"barcodeFormat": "QR",
"logoText": "Membership Card"
}' \
-o membership.pkpass curl -X POST https://api.walletwallet.dev/api/pkpass \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ww_live_<your_key>" \
-d '{
"barcodeValue": "LOYALTY-98765",
"barcodeFormat": "QR",
"logoText": "Bayroast Coffee",
"description": "Loyalty card for Bayroast Coffee",
"primaryFields": [{"label": "CARD", "value": "Coffee Rewards"}],
"secondaryFields": [{"label": "TIER", "value": "Gold Status"}],
"headerFields": [{"label": "BALANCE", "value": "$25.00"}],
"colorPreset": "dark",
"expirationDays": 365,
"logoURL": "https://example.com/logo.png",
"thumbnailURL": "https://example.com/photo.png",
"stripURL": "https://example.com/banner.png"
}' \
-o rewards.pkpass Updating a pass
Pass content can change after install. PUT /api/pkpass/<serial> with a new body and every device with the pass installed gets a push notification within seconds — Wallet refreshes the pass in place.
PUT https://api.walletwallet.dev/api/pkpass/<serial>
Add a changeMessage to any field to control the lock-screen banner text. Identical bodies are free — no push, no quota.
See the full Update Pass reference for the response shape and error codes.
Barcode Formats
| Format | Best For |
|---|---|
| QR | General purpose, high data capacity |
| PDF417 | Boarding passes, IDs |
| Aztec | Transit tickets, compact spaces |
| Code128 | Retail, inventory |
Rate Limits
| Plan | Monthly Limit | Custom Colors | Custom Logo |
|---|---|---|---|
| Free | 1,000 | No | No |
| Pro | 100,000 | Yes | Yes |
Priced for scale
$0.00019 per pass. No certificate fees.
Free
For testing & hobby projects
- 1,000 passes/month
- All barcode formats
- 6 color presets
- Primary & secondary fields
- Signed .pkpass delivery
- Global edge via Cloudflare
- No Apple Developer account needed
Your first month is Pro, automatically
Pro
For production apps
- 100,000 passes/month
- Everything in Free
- Live pass updates with push notifications
- Lock-screen location triggers (10 per pass)
- Custom colored passes
- Custom logo, thumbnail, strip & notification icon
- Header & back fields
- Priority support
$0.00019 per pass
Need more? Contact us for unlimited pricing.