# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand. overlay: 1.0.0 info: title: API Evangelist conversational phrasing for Punchh Users API version: 1.0.0 extends: openapi/punchh-users-api-openapi.yml actions: - target: $.info update: x-apievangelist-phrasing: method: generated generated: '2026-10-01' generator: build-phrasing.py label: Generated by API Evangelist operations: 43 - target: $.paths['/api2/mobile/users/login'].post update: x-apievangelist-phrasing: intent: Sign a guest in to the loyalty app effect: write questions: - How do I log a guest into a restaurant's loyalty app with their email and password? - What user details come back when a guest signs in to the mobile app? instructions: - text: Sign in guest {user} to the mobile loyalty app. slots: user: requestBody.user - text: Log guest {user} in from device {device} and return their profile. slots: user: requestBody.user device: header.punchh-app-device-id method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users/connect_with_facebook'].post update: x-apievangelist-phrasing: intent: Register or log in a guest with Facebook effect: write questions: - Can guests register on the loyalty app using their Facebook account? - Which Facebook details are passed when a guest connects with Facebook? instructions: - text: Connect guest {user} to the app using their Facebook ID. slots: user: requestBody.user - text: Register a new app guest through Facebook login with details {user}. slots: user: requestBody.user method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/apple_registrations'].post update: x-apievangelist-phrasing: intent: Sign a guest in with Apple effect: write questions: - Does the loyalty app support Sign in with Apple using Apple's private relay email? - What happens to a guest's session if they revoke app access from their Apple ID? instructions: - text: Sign guest {user} in with their Apple ID. slots: user: requestBody.user - text: Register guest {user} through Apple sign-in for app client {client}. slots: user: requestBody.user client: requestBody.client method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users/logout'].delete update: x-apievangelist-phrasing: intent: Log a guest out of the mobile app effect: destructive questions: - How do I end a guest's session in the mobile loyalty app? - Can I clear the push token when a guest logs out of the app? instructions: - text: Log out the guest on device {device}. slots: device: header.punchh-app-device-id - text: End app session {access_token} and drop push token {gcm_token}. slots: access_token: requestBody.access_token gcm_token: requestBody.gcm_token method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users/profile'].get update: x-apievangelist-phrasing: intent: Get the signed-in guest's profile effect: read questions: - What profile details can the app show for the guest who is signed in? - Where do I read a logged-in app user's name, email and other details? instructions: - text: Fetch the profile of the guest signed in on device {device}. slots: device: header.punchh-app-device-id - text: Show my loyalty app profile details. method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users'].put update: x-apievangelist-phrasing: intent: Update the signed-in guest's profile effect: write questions: - Can a guest change their own name or phone number from the mobile app? - Why does a guest's birthday not change after the second update even though I get a 200? instructions: - text: Update my app profile with {user}. slots: user: requestBody.user - text: Change the signed-in guest's profile on device {device} to {user} right away. slots: device: header.punchh-app-device-id user: requestBody.user method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users'].post update: x-apievangelist-phrasing: intent: Register a new guest in the mobile app effect: write questions: - How do I sign up a new guest on a business's loyalty app? - Why must I pass a real first and last name when the business uses referral codes? instructions: - text: Register new app guest {user}. slots: user: requestBody.user - text: Sign up {user} for the loyalty program from device {device}. slots: user: requestBody.user device: header.punchh-app-device-id method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users'].delete update: x-apievangelist-phrasing: intent: Request deletion of the guest's own account effect: destructive questions: - Can a guest ask to have their loyalty account deleted from inside the app? - How long until a guest's account is actually deleted after they request it? instructions: - text: Mark the account signed in on device {device} for deletion. slots: device: header.punchh-app-device-id - text: Submit my own account deletion request from the app. method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users/forgot_password'].post update: x-apievangelist-phrasing: intent: Email a guest a password reset link effect: write questions: - How does a guest who forgot their app password get a reset link? - Can the mobile app trigger a password reset email for a guest? instructions: - text: Send a password reset email to app guest {user}. slots: user: requestBody.user - text: Start the forgot-password flow for {user} in the mobile app. slots: user: requestBody.user method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users/account_history'].get update: x-apievangelist-phrasing: intent: Show a guest's loyalty account history effect: read questions: - Where can a guest see their past check-ins and redemptions in the app? - Does the app's account history include gift card transactions? - Can I filter a guest's account history to only certain event types? instructions: - text: Show my loyalty account history in the app. - text: List my account history filtered to {event_filter} events. slots: event_filter: requestBody.event_filter method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/user_relations/{id}'].put update: x-apievangelist-phrasing: intent: Update a guest's spouse or kid entry effect: write questions: - Can a guest fix the birthday of a child they already added to their profile? - Is it possible to rename a spouse saved on a loyalty account? instructions: - text: Change the birthday on relation {id} to {birthday}. slots: id: path.id birthday: requestBody.birthday - text: Rename existing family relation {id} to {name}. slots: id: path.id name: requestBody.name method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/user_relations/{id}'].delete update: x-apievangelist-phrasing: intent: Remove a spouse or kid from a guest's profile effect: destructive questions: - How do I remove a child or spouse a guest previously added to their account? - Can a family relation be deleted from the loyalty profile? instructions: - text: Delete family relation {id} from my profile. slots: id: path.id - text: Remove the spouse or kid saved as relation {id}. slots: id: path.id method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/user_relations'].post update: x-apievangelist-phrasing: intent: Add a spouse or kid to a guest's profile effect: write questions: - Can guests add their kids' birthdays to their loyalty profile? - Which relation types can a guest add besides a spouse? instructions: - text: Add my kid {name} born {birthday} to my profile. slots: name: requestBody.name birthday: requestBody.birthday - text: Create a {relation} relation named {name} with birthday {birthday}. slots: relation: requestBody.relation name: requestBody.name birthday: requestBody.birthday method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users/send_verification_email'].post update: x-apievangelist-phrasing: intent: Send a guest an account verification email effect: write questions: - How do I resend the account verification email to a guest? - Can the app ask Punchh to email a guest to verify their address? instructions: - text: Send a verification email to the guest signed in to app client {client}. slots: client: requestBody.client - text: Resend my account verification email. method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/session_tokens'].post update: x-apievangelist-phrasing: intent: Get a short-lived token for POS or kiosk lookup effect: write questions: - Can a guest identify themselves at a kiosk using a temporary token from the app? - What is the session token used for when looking a guest up at the POS? instructions: - text: Generate a short-lived session token for app client {client}. slots: client: requestBody.client - text: Create a temporary token so the POS can look me up. method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/async_users'].patch update: x-apievangelist-phrasing: intent: Update a guest's profile asynchronously effect: write questions: - Is there a way to queue a guest profile change instead of applying it immediately? - Which endpoint updates a guest's details in the background rather than synchronously? instructions: - text: Queue an asynchronous profile update with {user}. slots: user: requestBody.user - text: Update guest details {user} in the background. slots: user: requestBody.user method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/aws_s3_pre_signed_url'].post update: x-apievangelist-phrasing: intent: Get a pre-signed URL to upload an image effect: write questions: - How does the app upload a guest's image file, such as a receipt photo? - Can I get a pre-signed upload URL for an image from the app? instructions: - text: Get a pre-signed upload URL for image {filename}. slots: filename: requestBody.filename - text: Upload the photo named {filename} to storage. slots: filename: requestBody.filename method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users/balance'].get update: x-apievangelist-phrasing: intent: Get the guest's balance, badges and redemptions effect: read questions: - What does the app's user balance call return besides points? - Where can I see a guest's active redemptions, badges and notification count together? instructions: - text: Fetch my balance summary with active redemptions and badges. - text: Show the balance, notifications and badges for app client {client}. slots: client: requestBody.client method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/conversions'].post update: x-apievangelist-phrasing: intent: Convert a guest's points to cash, fuel or charity effect: write questions: - Can guests turn their loyalty points into a fuel discount or a charity donation? - What conversion rule does a points-to-cash conversion need? instructions: - text: Convert {source_value} points into {converted_value} using rule {rule}. slots: source_value: requestBody.source_value converted_value: requestBody.converted_value rule: requestBody.conversion_rule_id - text: Apply conversion rule {rule} to {source_value} of my points. slots: rule: requestBody.conversion_rule_id source_value: requestBody.source_value method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/deals'].get update: x-apievangelist-phrasing: intent: List deals available to the guest in the app effect: read questions: - Which deals can a guest browse in the mobile app? - How many deals come back per page if I don't set a page size? instructions: - text: List the deals available to me in the app. - text: Show page {page} of my app deals with {per_page} per page. slots: page: requestBody.page per_page: requestBody.per_page method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/deals'].post update: x-apievangelist-phrasing: intent: Save a deal to the guest's account effect: write questions: - How does a guest claim a deal so it shows up in their account? - Can I add a specific deal to a guest's account from the app? instructions: - text: Save deal {redeemable_uuid} to my account. slots: redeemable_uuid: requestBody.redeemable_uuid - text: Claim the deal {redeemable_uuid} for me in the app. slots: redeemable_uuid: requestBody.redeemable_uuid method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/estimate_points'].get update: x-apievangelist-phrasing: intent: Estimate points a purchase would earn effect: read questions: - Can I show a guest how many points an order will earn before they pay? - Does the points estimate include special promotions or campaigns? instructions: - text: Estimate the points I'd earn on a {receipt_amount} order. slots: receipt_amount: requestBody.receipt_amount - text: Predict points for a {receipt_amount} receipt at store {store_number}. slots: receipt_amount: requestBody.receipt_amount store_number: requestBody.store_number method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/balance_timelines'].get update: x-apievangelist-phrasing: intent: Show a guest's currency and fuel balance timeline effect: read questions: - How has a guest's banked currency or fuel discount changed over time? - What does the balance timeline return for a business that only uses currency? instructions: - text: Show the balance timeline for session {access_token}. slots: access_token: requestBody.access_token - text: Get my currency and fuel discount timeline in the app. method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/user_enrollments'].post update: x-apievangelist-phrasing: intent: Enroll the guest in a social cause campaign effect: write questions: - Can a guest join a social cause campaign from the mobile app? - Which campaign types support guest enrollment today? instructions: - text: Enroll me in campaign {item_id} of type {item_type}. slots: item_id: requestBody.item_id item_type: requestBody.item_type - text: Sign me up for social cause campaign {item_id} in the app. slots: item_id: requestBody.item_id method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/user_enrollments'].patch update: x-apievangelist-phrasing: intent: Remove the guest from a social cause campaign effect: write questions: - How does a guest leave a social cause campaign they joined in the app? - Can I unenroll a guest from a campaign without deleting their account? instructions: - text: Unenroll me from {item_type} campaign {item_id} in the app. slots: item_type: requestBody.item_type item_id: requestBody.item_id - text: Take me out of my current {item_type} campaign. slots: item_type: requestBody.item_type method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/deals/{redeemable_uuid}'].get update: x-apievangelist-phrasing: intent: Get the details of one deal effect: read questions: - What are the terms of a specific deal shown in the app? - Can I look up one deal by its UUID? instructions: - text: Show the details of deal {redeemable_uuid}. slots: redeemable_uuid: path.redeemable_uuid - text: Open deal {redeemable_uuid} and tell me what it offers. slots: redeemable_uuid: path.redeemable_uuid method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users/lifetime_stats'].get update: x-apievangelist-phrasing: intent: Show a guest's lifetime loyalty stats effect: read questions: - How many visits and points has a guest racked up since they joined? - Is there a summary of a member's loyalty activity since sign-up? instructions: - text: Show my lifetime loyalty stats since I signed up. - text: Get lifetime statistics for the guest on app client {client}. slots: client: requestBody.client method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users/points_expiry_timeline'].get update: x-apievangelist-phrasing: intent: Show when a guest's points expire each month effect: read questions: - When are a guest's loyalty points going to expire? - Which settings must be on before the points expiry timeline works? instructions: - text: Show my upcoming points expiry dates. - text: List points expiring with status {status} over a {lookback_period} lookback. slots: status: requestBody.status lookback_period: requestBody.lookback_period method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users/google_sign_in'].post update: x-apievangelist-phrasing: intent: Sign a guest in with Google effect: write questions: - Can guests log into the loyalty app with their Google account? - What must be enabled before Google Sign-in works for a business? instructions: - text: Sign in with Google using ID token {google_id_token}. slots: google_id_token: requestBody.google_id_token - text: Register {first_name} {last_name} via Google token {google_id_token}. slots: first_name: requestBody.first_name last_name: requestBody.last_name google_id_token: requestBody.google_id_token method: generated generated: '2026-10-01' - target: $.paths['/api2/mobile/users/request_reactivation'].post update: x-apievangelist-phrasing: intent: Request reactivation of a deactivated profile effect: write questions: - Can a guest whose profile was deactivated ask to be reactivated from the app? - When is a guest allowed to request their own reactivation? instructions: - text: Request reactivation of the deactivated profile for {email}. slots: email: requestBody.email - text: Ask to reactivate my account with email {email} and phone {phone}. slots: email: requestBody.email phone: requestBody.phone method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/users/ban'].post update: x-apievangelist-phrasing: intent: Ban a guest from the loyalty program effect: destructive questions: - How do I stop a fraudulent guest from checking in or redeeming rewards? - Can a ban also cover every device linked to the guest? instructions: - text: Ban user {user_id} for reason {reason}. slots: user_id: requestBody.user_id reason: requestBody.reason - text: 'Ban guest {user_id} for {reason}, banning all linked devices: {all_devices}.' slots: user_id: requestBody.user_id reason: requestBody.reason all_devices: requestBody.ban_all_associated_devices method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/users/ban'].delete update: x-apievangelist-phrasing: intent: Lift a ban on a guest effect: destructive questions: - How do I let a banned guest check in and redeem again? - Can an admin remove a ban placed on a loyalty member? instructions: - text: Unban user {user_id}. slots: user_id: query.user_id - text: Remove the ban on guest {user_id} so they can redeem again. slots: user_id: query.user_id method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/users/send_message'].post update: x-apievangelist-phrasing: intent: Message a guest and gift points or rewards effect: write questions: - Can I send a guest a message and gift them points at the same time? - Is it possible to advance a guest's challenge progress with an admin message? - Which reward types can be gifted in a single message to a user? instructions: - text: Send user {user_id} a message titled {subject} saying {message}. slots: user_id: requestBody.user_id subject: requestBody.subject message: requestBody.message - text: Gift {gift_count} points to user {user_id} for {gift_reason}. slots: gift_count: requestBody.gift_count user_id: requestBody.user_id gift_reason: requestBody.gift_reason - text: Give user {user_id} redeemable {redeemable_id} expiring {end_date}. slots: user_id: requestBody.user_id redeemable_id: requestBody.redeemable_id end_date: requestBody.end_date method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/users/reactivate'].post update: x-apievangelist-phrasing: intent: Reactivate a deactivated guest effect: write questions: - How do admins bring a deactivated guest back so they can check in again? - Can a deactivated loyalty member be restored from the dashboard? instructions: - text: Reactivate user {user_id}. slots: user_id: query.user_id - text: Restore deactivated guest {user_id} to active status. slots: user_id: query.user_id method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/users/deactivate'].delete update: x-apievangelist-phrasing: intent: Deactivate a guest effect: destructive questions: - What is the first step before deleting a guest from the platform? - Can I suspend a guest's check-ins and emails without deleting them? instructions: - text: Deactivate user {user_id}. slots: user_id: query.user_id - text: Suspend guest {user_id} from check-ins, redemptions and emails. slots: user_id: query.user_id method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/users'].delete update: x-apievangelist-phrasing: intent: Mark a deactivated guest for deletion effect: destructive questions: - How do admins permanently delete a guest who was already deactivated? - Does a guest have to be deactivated before they can be deleted? instructions: - text: Delete deactivated user {user_id}. slots: user_id: requestBody.user_id - text: Mark guest {user_id} for deletion because {reason}. slots: user_id: requestBody.user_id reason: requestBody.reason method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/users'].patch update: x-apievangelist-phrasing: intent: Update any field on a guest as an admin effect: write questions: - Can an admin edit a guest's profile fields from the dashboard? - Why didn't an admin birthday change stick for a guest? instructions: - text: As an admin, update user {id} with {user}. slots: id: requestBody.id user: requestBody.user - text: Edit the guest with email {email} and set {user}. slots: email: requestBody.email user: requestBody.user method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/users/send_user_details_export'].post update: x-apievangelist-phrasing: intent: Email a guest their data export effect: write questions: - How do I send a guest a copy of their personal data? - Can the guest data export go only to the admin who asked for it? instructions: - text: Email a data export for user {user_id}. slots: user_id: requestBody.user_id - text: Send the export for user {user_id} to me only, admin-only set to {email_admin_only}. slots: user_id: requestBody.user_id email_admin_only: requestBody.email_admin_only method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/users/extensive_timeline'].get update: x-apievangelist-phrasing: intent: Get a guest's extended timeline effect: read questions: - Where can support staff see a guest's full extended activity timeline? - Is there a more detailed history view for a single guest than the app shows? instructions: - text: Get the extended timeline for user {user_id}. slots: user_id: query.user_id - text: Pull guest {user_id}'s full activity history from the dashboard. slots: user_id: query.user_id method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/user_favourite_locations'].get update: x-apievangelist-phrasing: intent: List a guest's favorite locations effect: read questions: - Which stores has a guest marked as their favorites? - Can I see a guest's favorite locations for eClub? instructions: - text: List favorite locations for user {user_id}. slots: user_id: query.user_id - text: Show which stores guest {user_id} favorited. slots: user_id: query.user_id method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/user_favourite_locations'].delete update: x-apievangelist-phrasing: intent: Remove one of a guest's favorite locations effect: destructive questions: - How do I remove a store from a guest's favorites? - Can several favorite locations be deleted in one call? instructions: - text: Remove favorite location {fav_id} from user {user_id}. slots: fav_id: query.user_favourite_location_id user_id: query.user_id - text: Unfavorite entry {fav_id} for guest {user_id}. slots: fav_id: query.user_favourite_location_id user_id: query.user_id method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/users/info'].get update: x-apievangelist-phrasing: intent: Look up a guest by ID, email or phone effect: read questions: - How can an admin find a guest by email address or phone number? - Why can't I search guests by phone number? instructions: - text: Find the guest with email {email}. slots: email: requestBody.email - text: Look up user information for phone {phone}. slots: phone: requestBody.phone - text: Get the profile of user {user_id} as an admin. slots: user_id: requestBody.user_id method: generated generated: '2026-10-01' - target: $.paths['/api2/dashboard/users/redemption'].get update: x-apievangelist-phrasing: intent: Look up redemptions applied to an order effect: read questions: - Which offers and discounts were applied to a specific online or POS order? - Can I reconcile redemptions by transaction number? instructions: - text: Look up redemptions on transaction {transaction_no}. slots: transaction_no: requestBody.transaction_no - text: Show which discounts were applied to order {transaction_no}. slots: transaction_no: requestBody.transaction_no method: generated generated: '2026-10-01'