List customers
Returns a cursor-paginated list of customers in the calling organization, sorted by created_at descending (newest first).
Filtering
Filters combine with AND. Two categories:
- Lookup filters (rate-limited more strictly - used to find a specific record):
email,phone,external_id - Scan filters (standard rate limit - used to iterate a subset):
card_id,location_id,status,device,created[gte|lte],updated[gte|lte] - Serial number lookup (standard rate limit - returns at most one customer):
serial_number, the value in the customer’s wallet pass QR code or barcode, or the number on a physical card. Send it exactly as you have it; it is not the customerid.
Lookup filters are stricter because they can be used to enumerate the organization’s customers.
See Pagination for the cursor pattern and Rate Limits for the per-key ceilings.
Date filters
created[gte|lte] and updated[gte|lte] accept ISO-8601 timestamps (with timezone) or Unix seconds - either format works interchangeably.
Authorizations
Your secret API key as a Bearer token: Authorization: Bearer vxn_sk_.... Keys are created and scoped in the dashboard - see Authentication.
Query Parameters
Restrict to customers enrolled on this card template.
^crd_[A-Za-z0-9]+$Exact-match lookup. Rate-limited (5/sec/org). Case-insensitive.
3 - 254Exact-match lookup in E.164 form. Rate-limited (5/sec/org).
4 - 20^\+[1-9]\d{1,14}$Exact-match lookup against your partner-side reference. Highest-priority dedupe field on POST.
1 - 191Look up a customer by serial number: the value encoded in their wallet pass QR code or barcode and printed on physical cards (see Customer.serial_number). Send it exactly as you have it, for example as scanned, typed or stored from a webhook. Accepts the platform-assigned serial (a 24-character hex value), a referral-link QR (https://www.vexioncards.one/ref/<serial>), a gift-card QR (https://www.vexioncards.one/gfc/<serial>, returns the gift-card customer) and a merchant-assigned custom serial (serial_number_locked: true). Returns at most one customer; an unknown value returns an empty list, not an error. Standard rate limit (not the 5/sec lookup tier).
1 - 256Lower bound on created_at, inclusive. ISO-8601 datetime with timezone, or unix seconds.
Upper bound on created_at, inclusive.
Lower bound on updated_at, inclusive. Use this for delta-sync loops driven by customer.updated webhooks.
Upper bound on updated_at, inclusive.
Page size, 1-100. Default 25. Server may return fewer if the page reaches the end.
1 <= x <= 100Cursor: customer id from the previous page. Returns customers created strictly BEFORE this one. Mutually exclusive with ending_before. Numeric offset or page parameters are not supported; cursors are the only supported paging mechanism.
^cus_[A-Za-z0-9]+$Cursor: customer id from the previous page. Returns customers created strictly AFTER this one (reverse pagination). Mutually exclusive with starting_after.
^cus_[A-Za-z0-9]+$Filter by signup_location_id (where the customer first joined).
^loc_[A-Za-z0-9]+$Filter by the customer's card pass-install status. Matches the status field on the customer's card object in the response.
installed, not_installed, deleted, disputed Filter by which wallet the customer's pass is installed on. Matches the device field on the customer's card object in the response.
apple_wallet, google_wallet Response
The customer object.
Cursor-paginated list of Customer objects.
Always 'list'. Type discriminator.
list Array of Customer objects on this page. Up to limit items (default 25, max 100).
True if more results exist beyond this page.
Cursor for the next page in the direction you are already paging, or null when this page ends the collection. has_more: true always comes with a non-null next_cursor.
Feed it back to the SAME parameter you used: starting_after when paging forward (the default), or ending_before when paging backward. Treat it as opaque and do not parse it.
You no longer need to take the last object's id yourself. That still works and is unchanged, but deriving the cursor from the page put the burden of knowing the sort direction on you, and it broke silently on any endpoint whose cursor is not the object id.
"cus_iofv5j4hn6bphinmmyat27tc5y"
Stable collection URL.