User Look-up and Fetch Balance
This API looks up a loyalty guest using an identifier to retrieve guest data and to assign the user to the check or transaction.
Fields Used for User Look-up
The following table summarizes the different look-up fields that are used in the request of this API endpoint. The POS makes a call using one of these identifiers (e.g., email address, phone number, QR code, or loyalty card number) to look up the loyalty user on the Punchh platform. Sending one of the query parameters (see below) is required. Note: User QR codes appear in three different ways, hence the three descriptions below.
| Type | Character Length | Character Type | How To Identify |
| Phone Number | 10 | Numeric | 10 digits |
| 6-255 | Alphanumeric | String including @ | |
| User QR Code | 2-12 | Alphanumeric | Starts with "P" |
| 13-512 | Alphanumeric | Starts and ends with "Punchh" | |
| 8 | Alphanumeric | Starts with "S" | |
| Single Scan Code | 6-34 | Alphanumeric | Hexadecimal digits |
| Redemption Code | 7 | Numeric | 7 digits |
| Card Number | 16 | Numeric | 16 digits |
| Drive-Thru Short Code | 4 | Numeric/ Alphanumeric |
4 digits or string |
POS Single Scan Flow (SSF) User Look-up API
Punchh supports SSF token. The SSF token is used to make payments for the purchases made at POS stores.
This token is a UUID string, which is made up of alphanumeric characters and passed in the User Look-up API request in the single_scan_code parameter. The SSF token that is generated from the guest’s mobile app is used to look up the information required for processing the payment, such as the payment mode that the user selected for the purchase, the selected discount that the user wants to redeem, and the selected tip amount.
For more information, see Single Scan Flow.
- Type: string
email Email address of the user.
- Type: string
phone Phone number of the user.
- Type: string
card _number Physical loyalty card generated by Punchh.
- Type: string
user _as _qrcode QR code of the user.
- Type: string
single _scan _code Single scan code of the user to be used in single scan flow.
- Type: string
redemption _code Redemption code of the user as generated on the app or web.
- Type: string
apple _nfc _data User identifier that enables look-up of user information generated from the Apple Pass. See Implement Apple Pass Integration With POS
- Type: string
drive _thru _code 4-digit numeric/alphanumeric drive-thru short code generated by the user from the brand's mobile app that enables look-up of user details and balance. The short code is mapped to the guest_id. The API returns a 404 or 410 status code with the error message "CODE_EXPIRED" for an expired short code, and a 404 status code with the error message "CODE_NOT_FOUND" for an invalid or unmapped short code. See Generate a Drive-Thru Short Code
- Type: string
Authorization requiredThis is a combination of unique API key as well as business key (UUID) as the Authorization header.
- Type: string
Accept - Language Short code for locale variant (e.g., fr-ca, es-ES, en-EN, etc.)
- Type: object
200 - Type: string
address _line1 Full address of the user
- Type: boolean
age _verified Is the age of user verified or not
- Type: boolean
age _verified _status Whether or not the user has undergone age verification by Koupon Media. Possible values: true, false. The value is set to true if the user's age is verified by Koupon Media; otherwise, it is set to false. The response returns this parameter in sign-in, sign-up, and user update APIs if Koupon Media is selected as the age verification adapter for the business in the Punchh platform. Contact your Punchh representative to update this Punchh platform configuration setting.
- Type: stringFormat: date
anniversary Anniversary date of the user in YYYY-MM-DD format
- Type: string
avatar _remote _url Avatar remote URL the of user profile image
- Type: Balance (Object)
balance Account balance of the user
- Type: stringFormat: date
birthday Birthday date string of the user in YYYY-MM-DD format
- Type: string
city City in which the user lives
- Type: array Converted Category Balances (Array Object)[]
converted _category _balances - Type: stringFormat: date-time
created _at Date/time string when the user was created in the system in ISO 8601 format
- Type: string
discount _type Discount types include: reward, redeemable
- Type: string
email Email address of the user
- Type: boolean
email _verified Is the email address of the user verified or not
- Type: string
fb _uid Facebook ID of the user
- Type: string
first _name First name of the user
- Type: string
gender Gender of the user
- Type: integer
id Unique ID of the user
- Type: string
last _name Last name of the user
- Type: string
payment _mode This value is set only in a single scan flow. Returns payment mode selected as a part of single scan flow. Currently supported values are
GiftCard,CreditCard, andrecurring. - Type: string
phone Phone number of the user
- Type: boolean
privacy _policy Has the user agreed to the privacy policy or not
- Type: array Rewards (Array Object)[]
rewards Shows the details of rewards in the user account.
- Type: string
selected _card _number This value is set only in single scan flow. This is the gift card that the user wants to use for payment. If this value is set, use it to make the payment for the order.
- Type: array Selected Coupons (Array Object)[]
selected _coupons This object is set only in the single scan flow (SSF). The
selected_couponsobject shows one or more Punchh coupon codes if the user would like to redeem them as part of the single scan flow. The user selects the coupon(s) when generating the single scan code on the mobile application. If this value is set, trigger the redemption flow. See Single Scan Flow - Type: Selected Discount Amount (Object)
selected _discount _amount This object is set for the single scan flow (SSF) for users who are on the Banked Rewards loyalty program. The
selected_discount_amountobject shows the banked currency amount if the user would like to redeem it as part of the single scan flow. The user selects the banked currency when generating the single scan code on the mobile application. If this value is set, trigger the redemption flow. See Single Scan Flow - Type: array Selected Redeemable Cards (Array Object)[]
selected _redeemable _cards This object is set for the single scan flow (SSF) for users that are on the Visit-based loyalty program. The
selected_redeemable_cardsobject shows one or more reedemable cards if the user would like to redeem them as part of the single scan flow. The user selects the redeemable cards when generating the single scan code on the mobile application. If this value is set, trigger the redemption flow. See Single Scan Flow - Type: array Selected Redeemables (Array Object)[]
selected _redeemables This object is set for the single scan flow (SSF) for users that are on the Points Unlock Redeemables loyalty program. The
selected_redeemablesobject shows one or more redeemables if the user would like to redeem them as part of the single scan flow. The user selects the redeemable(s) when generating the single scan code on the mobile application. If this value is set, trigger the redemption flow. See Single Scan Flow - Type: array Selected Rewards (Array Object)[]
selected _rewards This object is set only in the single scan flow (SSF). The
selected_rewardsobject shows one or more user-selected rewards if the user would like to redeem them as part of the single scan flow. The user selects the reward when generating the single scan code on the mobile application. If this value is set, trigger the redemption flow. See Single Scan Flow - Type: array Selected Subscriptions (Array Object)[] 1…
selected _subscriptions This object is set only in the single scan flow (SSF). The
selected_subscriptionsarray object shows one or more user-selected subscriptions if the user would like to redeem them as part of the single scan flow. The user selects the subscription(s) when generating the single scan code on the mobile application. See Single Scan Flow - Type: string
selected _tip _amount This value is set only in single scan flow. This is the amount that the user selected as a tip amount on the mobile app during SSF code generation.
- Type: string
state State in which the user lives.
- Type: array Subscriptions (Array Object)[]
subscriptions This object is returned when the subscriptions feature is available for the business. In case a guest does not have active subscriptions, an empty object is returned.
- Type: stringFormat: date-time
updated _at Date/time string when the user was last updated in the system in ISO 8601 format.
- Type: string
user _digest User digest token of the user
- Type: string
zip _code Zip code of the user.
- Type: object
400 - Type: string
error
- Type: object
404 - Type: string
error
{
"address_line1": "string",
"age_verified": true,
"anniversary": "2025-12-19",
"avatar_remote_url": "string",
"balance": {
"banked_rewards": "string",
"expired_membership_level": "string",
"initial_visits": 1,
"membership_level": "string",
"membership_level_id": "string",
"net_balance": 1,
"net_debits": 1,
"pending_points": 1,
"points_balance": 1,
"signup_anniversary_day": "string",
"total_credits": 1,
"total_debits": "string",
"total_point_credits": 1,
"total_redeemable_visits": 1,
"total_visits": 1,
"unredeemed_cards": "string"
},
"birthday": "2025-12-19",
"city": "string",
"created_at": "2025-12-19T16:32:19.137Z",
"discount_type": "string",
"email": "string",
"email_verified": true,
"fb_uid": "string",
"first_name": "string",
"gender": "string",
"id": 1,
"last_name": "string",
"phone": "string",
"privacy_policy": true,
"rewards": [
{
"created_at": "YYYY-MM-DDThh:mm:ssZ",
"description": "string",
"discount_amount": 1,
"start_date_tz": "2025-12-19T16:32:19.137Z",
"end_date_tz": "YYYY-MM-DDThh:mm:ssZ",
"id": -9007199254740991,
"image": "string",
"name": "string",
"points": 1,
"redeemable_properties": "string",
"status": "string",
"updated_at": "string",
"type": "string",
"meta_data": "string"
}
],
"selected_card_number": "string",
"state": "string",
"updated_at": "2025-12-19T16:32:19.137Z",
"user_digest": "string",
"zip_code": "string",
"converted_category_balances": [
{
"name": "string",
"balance": "string",
"discount_type": "string"
}
],
"payment_mode": "string",
"selected_discount_amount": {
"banked_currency": "string",
"discount_type": "string"
},
"selected_rewards": [
{
"id": -9007199254740991,
"name": "string",
"description": "string",
"created_at": "YYYY-MM-DDThh:mm:ssZ",
"start_date_tz": "YYYY-MM-DDThh:mm:ssZ",
"end_date_tz": "YYYY-MM-DDThh:mm:ssZ",
"updated_at": "YYYY-MM-DDThh:mm:ssZ",
"image": "string",
"status": "string",
"points": 1,
"discount_amount": 1,
"discount_type": "string",
"redeemable_properties": "string"
}
],
"selected_redeemables": [
{
"id": -9007199254740991,
"name": "string",
"description": "string",
"created_at": "YYYY-MM-DDThh:mm:ssZ",
"count": 1,
"start_date_tz": "YYYY-MM-DDThh:mm:ssZ",
"end_date_tz": "YYYY-MM-DDThh:mm:ssZ",
"updated_at": "2025-12-19T16:32:19.137Z",
"image": "string",
"status": "string",
"points": 1,
"discount_amount": 1,
"discount_type": "string",
"redeemable_properties": "string"
}
],
"selected_redeemable_cards": [
{
"id": -9007199254740991,
"name": "string",
"description": "string",
"count": "string",
"created_at": "YYYY-MM-DDThh:mm:ssZ",
"start_date_tz": "YYYY-MM-DDThh:mm:ssZ",
"end_date_tz": "YYYY-MM-DDThh:mm:ssZ",
"updated_at": "YYYY-MM-DDThh:mm:ssZ",
"image": "string",
"status": "string",
"points": 1,
"discount_amount": 1,
"discount_type": "string",
"redeemable_properties": "string"
}
],
"selected_coupons": [
{
"code": "string",
"name": "string",
"description": "string",
"start_date_tz": "YYYY-MM-DDThh:mm:ssZ",
"end_date_tz": "YYYY-MM-DDThh:mm:ssZ",
"image": "string",
"discount_type": "string"
}
],
"selected_tip_amount": "string",
"subscriptions": [
{
"plan_name": "string",
"pos_meta": "string",
"subscription_id": "string"
}
],
"age_verified_status": true,
"selected_subscriptions": [
{
"subscription_id": 1,
"start_time": "2025-12-19T16:32:19.137Z",
"end_time": "2025-12-19T16:32:19.137Z",
"external_plan_identifier": "string",
"plan_id": 1,
"cancelled_at": "2025-12-19T16:32:19.137Z",
"name": "string",
"description": "string",
"miscellaneous": "string",
"status": "string"
}
]
}