Skip to main content

Wallet pass lifecycle

A pass goes through a few simple states. Knowing them avoids two classic mistakes: chasing a customer who already has the card, and accepting the same coupon twice.

The states​

StateWhat happenedHow to know
Senteldo wallet created the pass and its link. The email or SMS went out if you asked for it.Response of the create call
InstalledThe customer added the pass to Apple Wallet or Google Wallet. Their device now gets updates.pass.installed webhook, status filter on GET/clients
UninstalledThe customer removed the pass from their phone.pass.uninstalled webhook
RedeemedThe pass was scanned and validated.POST/passes/template/{templateId}/redeem/{barcode}
ExpiredThe expiry date has passed. The pass stays in the Wallet, marked as expired.Pass expiry date

Webhooks are set at wallet level. See Webhooks.

Nudge inactive customers​

A customer got their card but never installed it? POST/clients/reminder-inactive reminds every inactive customer (all) or a given list (specific).

Redeem and unredeem​

At scan time, your till or access control calls POST/passes/template/{templateId}/redeem/{barcode} with the template id and the scanned barcode. The pass becomes "redeemed". A second scan of the same pass is rejected with PASS_ALREADY_REDEEMED.

Cashier made a mistake? Cancel with POST/passes/template/{templateId}/unredeem/{barcode}. On a pass that was never redeemed, the API returns PASS_NOT_REDEEMED.

POST/passes/template/{templateId}/redeem/{barcode}Try it
curl -L -X POST 'https://api-v2.test.eldowallet.fr/passes/template/$TEMPLATE_ID/redeem/$BARCODE' \
-H 'Accept: application/json' \
-H 'x-lang: en' \
-H 'Authorization: Bearer <token>'
One source of truth

Let eldo wallet validate the pass, not just your till. The status updates in the customer’s Wallet and in your stats.

Set a status directly​

PassEndpointStatuses
CouponPUT/coupons/{id}/passes/{instanceId}/statusUNUSED, USED, EXPIRED
Coupon (expire now)POST/coupons/{id}/passes/{instanceId}/expire
TransitPUT/transits/{transitId}/passes/{barcode}/statusUNUSED, USED
EventPUT/events/{id}/passes/{barcode}/status

Expiry​

  • Loyalty card: validity block on PATCH/store-cards. expirationType is NO_EXPIRATION, AT_DATETIME (fixed date) or AFTER_PERIOD (a duration after creation, in years, months or weeks).
  • Coupon: expirationDate on the template, overridable per customer when sending.
  • Transit: expirationDate on the pass, or for a whole trip with PATCH/transits/{transitId}/passes/trip/{tripNumber}.

Once expired, the pass stays greyed out in the customer’s Wallet as a receipt.

The status filter on GET/clients accepts active, inactive, deleted, canceled and expired.

Go further​

API news, once a month

New endpoints, upcoming changes, guides and use cases. No spam, one-click unsubscribe.

Report a technical problem

An API error, a pass that does not update, an email that does not arrive? Describe the problem: our technical team will answer.

For a fast answer, include:

  • The method and endpoint (e.g. POST /clients)
  • The error code returned (errorCode) and the body sent
  • The date and time of the call
  • The identifiers involved (customer, template, pass)

Never include an API token or a password.

AI assistant

Beta

Loading…

AI-generated answers (Claude): double-check important details.

Sign in to use the assistant