WalletWallet API

Changelog

What changed in WalletWallet API.

Branded share pages: your colors, logo, and wording

  • Business accounts can put their own look on every share page, on pass.walletwallet.dev and on their custom domain. Dashboard › Branding sets the page background, the card color, the card text color, a logo or brand name above the card, the headline, a footer line with a link, and a favicon. A live preview shows the page before you save.
  • Every field is optional. An unset field keeps the standard look, so a card with no color of its own keeps the color of each pass. The settings apply to live and revoked passes alike, and the pass logo stays on the card unless you hide it.
  • The owner manages the branding. Moving to a plan without the feature pauses it: visitors see the standard page, and the settings stay until the plan comes back.
  • Share pages now live on pass.walletwallet.dev. shareUrl and the X-Pass-Url header return the new host, and links on api.walletwallet.dev redirect to it.

Custom domains: share pages on a subdomain you own

  • Business accounts can serve their pass install pages from a host such as passes.example.com instead of pass.walletwallet.dev. Add the host on Dashboard › Custom domain, create the CNAME record it shows at your DNS provider, and the page checks the status until the certificate is active. One subdomain per team; an apex domain cannot be added.
  • Once the domain is active, shareUrl in the create response, the X-Pass-Url header, the CSV export, and the share links and QR codes in the Pass Editor and the Pass Manager all use it. The path stays /p/<serial>, so existing links on pass.walletwallet.dev keep working.
  • The owner manages the domain. Removing it, or moving to a plan without the feature, returns every link to pass.walletwallet.dev at once.

Credential sets: manage multiple Apple certificates and Google issuers

  • Pro and Business accounts can add credential sets: your own Apple Pass Type ID certificate, an APNs key for updates, and a Google Wallet issuer, under a slug you choose. Name the set in the new credentials field of POST /api/passes and the pass is issued under your identity end to end. An account holds as many sets as it needs, one per brand or per client.
  • Apple private keys are never uploaded. We generate the key pair and hand you a certificate signing request; you upload it to the Apple Developer portal and send the issued .cer back.
  • Manage sets from Dashboard › Certificates or over the API at /api/credentials. Stored key material is encrypted at rest and never echoed back. The Pass Manager, the pass status, and the CSV export show which set each pass uses, and the list filters by set.

Google Wallet saves are now a count

  • The pass status, the pass list, and the CSV export carry a new googleSaves number: the Google Wallet saves of a pass minus its removals. The Pass Manager and the editor show it next to the Apple device count.
  • Google reports a save once per Google account and never names the device, so the number estimates the accounts that hold the pass. A second phone on the same account does not add to it.
  • googleInstalled and googleSaved keep working unchanged.

Teams: invite colleagues to your account

  • Business accounts can invite as many team members as they need from the new Team page. Everyone on the team works on the same passes, batches, and integrations with the same API key.
  • The person who created the account is its owner. Only the owner changes the plan, rotates the API key, manages certificates, and invites or removes members. Members do everything else, including reading the key.
  • Signing in to the dashboard now uses a browser session instead of the API key, so a removed member is signed out everywhere at once. The ww_live_ key keeps working unchanged for the API, MCP, and Zapier.

iOS 27 passes: Featured Actions, the poster layout, and a truer preview

  • featuredActions (Pro) puts up to two tappable tiles under the pass on iOS 27 and later. Each action is an identifier, one of Apple's fourteen action types, and a link; Apple draws the icon and label from the type. Google Wallet shows the same actions as link rows in the pass details, and older iOS ignores the field. Full guide: Featured Actions and poster passes.
  • backgroundURL (Pro) switches a pass to Apple's poster layout: the artwork fills the pass, with the logo, one header field, up to four primary fields, up to two footerFields, and the barcode over it. The pass carries the classic layout next to it, so iOS 26 and earlier show that one, and Google Wallet uses the artwork as its image band when there is no strip.
  • The pass editor gains a Featured Actions section, a Footer Field row, and a Background slot cropped to Apple's poster size. Its Apple preview switches to the poster layout as soon as a background is set, and its Google preview follows the redesigned Google Wallet layout, both drawn from device measurements inside a phone frame.
  • Swap actions or artwork with a PUT and installed passes update in place on both wallets.

Integrations (beta): create passes from ChatGPT, Claude, or Zapier

  • WalletWallet is now an MCP server at https://api.walletwallet.dev/mcp. Connect it to Claude, ChatGPT, or any MCP client with OAuth and create, update, or revoke passes by describing them. Check them out on the Integrations page in the dashboard.
  • Zapier can create, update, or revoke a pass when something happens in another app. Accept the private beta invite on the same page.

Wide logos on Google Wallet

  • The new wideLogoURL field puts a 1280×400 px transparent PNG wordmark top-left of the Google Wallet card, uncropped. When it is set, Google drops logoText and the round logo from the card.
  • Apple Wallet keeps using logoURL and falls back to the wide logo only when logoURL is absent.
  • The pass editor gets a Wide logo field under Logo. The image is scaled to fit 1280×400 px and never cropped, and each preview shows it where that wallet puts it.
  • The editor previews no longer show placeholder logo text when the field is empty.

Set the text under the barcode

  • The new barcodeAltText field controls the line under the code. Send any string up to 128 characters and both wallets print it, or send an empty string and neither prints anything.
  • Omit the field and nothing changes: Apple Wallet leaves the line blank and Google Wallet prints the barcode value, exactly as before.
  • The pass editor has a matching Override Text Under Barcode toggle on the Barcode tab.

Batch import: turn a CSV into a batch of passes

  • Bulk passes is live in the dashboard: upload a CSV with one row per pass, design a single pass template, and generate the whole batch in one go.
  • CSV columns become {{column}} tokens anywhere in the template, so each pass carries its own row's name, member id, tier, or barcode value.
  • Batches process in the background. When one finishes, download a CSV with the serial number and share link for every row. Free plans generate up to 100 passes per batch, Pro up to 1,000.

Field labels are now optional

  • Every field label is now optional: omit label (or send an empty string) in primaryFields, secondaryFields, headerFields, or backFields and the value renders alone, with no label above it, on both wallets.
  • Built for value-only passes such as membership cards that show just the holder's name. A label-less primary field displays the value larger, and Google Wallet now accepts the save (a whitespace label used to break it with an empty subheader).
  • Legacy requests can do the same: send cardLabel: "" with title for a label-less title field. Omitting cardLabel keeps the CARD default, so nothing changes for existing integrations.

Upload size limits on passes and images

  • Each image is now capped at 1MB, the request body at 2MB, and the built .pkpass at 10MB. A request that exceeds any of these returns 400.
  • For crisp rendering, supply logoURL at 160×160 px, iconURL at 120×120 px, thumbnailURL at 180×180 px, and stripURL at 1080×360 px. These are the sizes the editor produces.

Code-less passes: the barcode is now optional

  • Omit barcodeValue to issue a pass with no barcode at all, on both wallets. Built for passes that are shown rather than scanned: completion certificates, membership and discount cards presented to staff, contact cards.
  • Nothing changes for existing integrations. When you do send a barcodeValue, a valid barcodeFormat is required exactly as before.

Revoke a pass with DELETE

  • New DELETE /api/passes/<serial> revokes a pass you issued (legacy alias DELETE /api/pkpass/<serial>).
  • Revoke invalidates the pass on every device it is installed on, on both wallets. Apple marks it voided and expired (greyed out, barcode dropped, filed under the holder's expired passes); Google moves it to the holder's expired passes.
  • See the Revoke a pass docs for the full behavior and response.

Pass Manager: manage every pass from the dashboard

  • Pass Manager lists every pass on your account, so you can find and edit one without writing any code. Included with Pro.
  • Search across your passes by their content, any field value such as a holder name, ticket number, or email, or by serial number.
  • See where each pass is live at a glance: how many Apple devices it is installed on, and whether it is saved to Google Wallet.
  • Open any pass in the editor pre-filled, change it, and push the update to every device it is installed on, on both wallets.
  • Export your passes to CSV (serial, title, holder, install counts, plus the share and edit links) for a spreadsheet or CRM.

Google Wallet support and a unified passes endpoint

  • Full Google Wallet support. Every pass you create now installs in both Apple Wallet and Google Wallet, with live push updates that reach both wallets from a single PUT.
  • New canonical POST /api/passes returns one JSON response with the Google Wallet save URL (googleSaveUrl), the signed Apple pass (applePass), and a shareUrl.
  • shareUrl is a hosted, share page at /p/<serial> that shows the right Add to Wallet button on a phone and a QR code to scan on desktop, so you can share a pass without building your own page.
  • Prefer the raw file? Add ?format=pkpass to stream the binary .pkpass straight to -o card.pkpass.
  • POST /api/pkpass and PUT /api/pkpass/<serial> keep working exactly as before. They will be retired in a future release, so point new integrations at /api/passes.
  • Read the announcement: One API, Two Wallets.

Control the Apple Wallet share button

  • New sharingProhibited field. It defaults to true to keep passes private (best for loyalty and membership cards). Set false to show the Apple Wallet share button on shareable passes.

Push updates, locations, and lock-screen banner text

  • Pass updates via push notifications with PUT /api/pkpass/<serial>
  • Lock-screen location triggers (up to 10 coordinates per pass)
  • changeMessage on field arrays to set the lock-screen banner text per field
  • iconURL to replace the lock-screen notification icon
  • Caller-supplied organizationName
  • X-Serial-Number response header on POST /api/pkpass

New pass customization parameters

  • stripURL for a wide banner image behind the primary field. It automatically switches the pass to a store card layout.
  • thumbnailURL for a square image in the top-right of the pass, ideal for a member photo or product shot.
  • cardLabel to replace the default "CARD" label above the pass title.
  • Live interactive pass preview added to the docs page.