0.1.0; TypeScript types are exported from @tapace/node.
In these signatures, options? means { idempotencyKey?: string }. Results are promises. ListResponse<T> contains object: "list", data, hasMore and nextCursor. There is no automatic page iterator.
Passes
PassUpdateResult contains pass and update. The update can be null when no wallet-visible change occurred. See pass issuance, updates, stamps and points for field rules.
void() calls POST /v1/passes/:id/void and permanently voids a pass. archive() calls POST /v1/templates/:id/archive. DELETE on those resource IDs deletes data and is a separate operation. Do not replace void or archive with a raw DELETE request.Templates, events and signing
Always send
expectedRevision when updating a template. A definition replaces the current definition; retrieving, editing and saving preserves fields you want to keep. If the revision is stale, retrieve the template again and review the change before resubmitting. See Update a template.
Templates expose issuePlatforms. To change wallet availability for new passes, include issuePlatforms: { apple: boolean, google: boolean } in templates.update, along with the required expectedRevision. Both wallet choices are required when supplying the object. Existing passes keep their wallets.
Event details are shared across test and live. Send event: {} to clear them. The SDK input requires an object; a retrieved event can still be null when no details are stored. See event details.
Google event sync entries expose environment, a nullable issuerId, status “updated” or “failed”, and an optional error. They do not declare a classId. PUT event/signing requests carry an SDK key, but do not currently provide stored-response replay. Reconcile their current state before retrying.
Deployments
Creating a deployment starts asynchronous work. Fetch its status and results rather than treating the first response as completed wallet delivery. See Deploy a template.
Notifications
Message fields are
appleText, googleTitle and googleBody, with scheduledFor for scheduling. Creation accepts ComposeNotificationParams with an optional schedule. Editing accepts UpdateNotificationParams, which requires a non-null scheduledFor string. Required text depends on the target wallets. See Send to a pass, Send to a template and Update a scheduled notification.
Assets
Upload data can be a Buffer, Uint8Array, base64 string or base64 data URL. The SDK converts bytes to base64. For a data URL, it infers MIME type unless you supply one. See asset limits and slots.
Account and wallet signers
tapace.me.retrieve() returns AccountInfo with organizationId and environment.
tapace.walletSigners.list() returns WalletSigners: environment, apple and google signer options. Each option exposes ready and an optional reason. Template signing assignments contain appleCertificateId and googleIssuerId.
See List wallet signers, Get template signing and Update template signing for the HTTP contracts. Signing choices affect new passes; existing passes retain their issued signing identity. The demo choice is test-only. Clearing a live selection with null is allowed, but test mode rejects null.
Page through results
Credit loyalty balances
Use a stamp-card pass foraddStamps and a points-card pass for addPoints. These operations add to the existing balance. To set a balance directly, use passes.update with stamps or points. Limits and rounding are described in the stamp and points guides.
Send a message
Use notifications when you want to send text rather than change a balance or field. A pass notification appears in Apple Wallet’s Message for you field; a template notification uses Announcements.notification.id and retrieve it later to inspect delivery. A new message needs a new saved operation ID. On Apple, resending identical visible text does not create another alert and is rejected by the API.
Deploy a changed template
Saving a template definition does not migrate existing passes. Create a deployment after saving the intended revision, then inspect its status and per-pass results.nextCursor.