Your test card
A real card, held by a real customer on the sandbox. Point your scanner at
the code below: it carries the card's serial and nothing else, which is exactly
what your till sends us as loyalty_id.
- Card serial
947706-732-680- Card
- Demo Restaurant (points per KWD)
- Cardholder
96599901001
Scan it
Whatever the scanner reads is what you send — no prefix to strip, no envelope to unwrap:
curl -s -X POST "$CARDY_URL/customers/identify" \
-H "Authorization: Bearer $CARDY_KEY" \
-H "Content-Type: application/json" \
-d '{"loyalty_id":"947706-732-680"}'
You get back the same customer the phone lookup returns, holding the same
cards with the same allowed_operations. That agreement is the thing
worth testing: if your scan path and your keypad path ever resolved differently,
a cashier could be shown one person's balance and spend another's.
No scanner to hand?
Type the serial. loyalty_id is an opaque string to us — we have
no opinion about how it reached your till.
Put it in the drawer
Print this page: the navigation, the prose and the examples drop away, and what lands on paper is the card. Leave it by the terminal and whoever is testing has a customer to scan.
Confirmed against the sandbox on
2026-08-29. We reseed rarely — but if a scan of this card
ever answers CUSTOMER_NOT_FOUND, tell us. That one is ours, not
yours.