Wallet Passes API
Wallet passes (Apple Wallet and Google Wallet) are issued and managed from the Joryio dashboard and journeys. This API covers the one step that happens outside Joryio: recording when a pass is scanned/redeemed at your point of sale.
That scan is what powers the Scanned stage of the Wallet adoption funnel and the Scan rate in Analytics -> Wallet Analytics. Neither Apple nor Google notifies Joryio when a pass is used in store, so your POS (or a middleware integration) must post the scan here.
Authentication
All requests use an API key as a bearer token and require the wallet:write permission:
Authorization: Bearer jry_live_xxxxxxxxxxxxxxxxxxxx
Record a pass scan / redemption
POST /wallet-passes/scan
| Field | Type | Notes |
|---|---|---|
serialNumber | string | Required. The pass's unique id, read from the barcode/QR printed on the pass. |
properties | object | Optional. Free-form redemption metadata (store, amount, cashier, ...). Stored as-is on the resulting pass.scanned event and available in analytics. |
Example
TOKEN=jry_live_xxxxxxxxxxxxxxxxxxxx
BASE=https://api-eu1.joryio.com
curl -sX POST "$BASE/wallet-passes/scan" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"serialNumber": "a1b2c3d4-e5f6-4789-abcd-1234567890ab",
"properties": { "storeId": "store_42", "amount": 19.90, "currency": "EUR" }
}'
Response
{ "recorded": true }
recorded is false when no pass with that serialNumber exists in your organization - nothing is logged in that case.
Notes
- Idempotent per pass for analytics. The funnel counts distinct passes, so re-scanning the same
serialNumberstill counts as one scanned pass. Each call does emit its ownpass.scannedevent, so thepropertiesof every scan are retained. - What the serial is.
serialNumberis the pass identifier encoded in the pass barcode/QR. Read it at the register and send it verbatim. - Where it shows up. Scans feed the
pass.scannedevent stream and the Scanned stage / Scan rate in Wallet Analytics. Scan rate is computed as scanned / downloaded (a clean cross-platform basis). - Multi-workspace keys. If your API key spans multiple workspaces, add an
X-Workspace-Id: <workspace-id>header. It is optional for a single-workspace key.