Prepare a template and key
Install the SDK using the current installation instructions. Follow the API quickstart to create a test API key and design a dedicated test template. For this example, use a template with a per-pass field namedmemberName. Supply any other fields listed in its requiredFields and any required per-pass actions listed in requiredActions.
Set TAPACE_API_KEY, TAPACE_TEMPLATE_ID and REGISTRATION_ID in your server environment. Use a registration ID already saved by your application. Reuse it only when retrying this same pass issuance, with the same request details.
Issue and deliver
holder.name and holder.email into the API’s holderName and holderEmail. You can also supply those flat properties directly; a supplied nested value takes precedence.
Save the returned pass ID in your database. Send distributionUrl to the holder through your own email, SMS or application flow. Issuing a pass does not add it to their phone automatically. See Deliver passes.
For your own wallet buttons, use pass.appleDownloadUrl or pass.googleSaveUrl. Either may be null; the hosted distribution page is a fallback.
Update the same pass
Continue in the same script, after issuance:result.update is present, inspect it later with tapace.passes.retrieveUpdate(pass.id, result.update.id). See Update passes.
Check the installed pass
Open the delivery URL in Safari on an iPhone and add the pass to Apple Wallet. After updating it, confirm the new value on the same installed pass. A silent update changes the pass without a notification banner; absence of an alert is expected. Readpass.presence.apple?.activeDevices or subscribe to wallet lifecycle webhooks to observe installations. API acceptance, an installed pass and a visible wallet change are separate checks. On Apple, a delivered status means the update signal was sent successfully; it does not prove the phone has fetched and displayed the new pass.