Punchh · OpenAPI Overlay 1.0.0
API Evangelist conversational phrasing for Punchh Users API
44 actions
44 updates
phrasing
extends
openapi/punchh-users-api-openapi.yml
Generated by API Evangelist
Written by API Evangelist tooling for Punchh's API. It is a proposal applied on top of the contract, not a document Punchh publishes.
What the actions change
x-apievangelist-phrasing
Targets 44 · first 16 shown; the file carries all of them
$.info
$.paths['/api2/mobile/users/login'].post
$.paths['/api2/mobile/users/connect_with_facebook'].post
$.paths['/api2/mobile/apple_registrations'].post
$.paths['/api2/mobile/users/logout'].delete
$.paths['/api2/mobile/users/profile'].get
$.paths['/api2/mobile/users'].put
$.paths['/api2/mobile/users'].post
$.paths['/api2/mobile/users'].delete
$.paths['/api2/mobile/users/forgot_password'].post
$.paths['/api2/mobile/users/account_history'].get
$.paths['/api2/mobile/user_relations/{id}'].put
$.paths['/api2/mobile/user_relations/{id}'].delete
$.paths['/api2/mobile/user_relations'].post
$.paths['/api2/mobile/users/send_verification_email'].post
$.paths['/api2/mobile/session_tokens'].post
OpenAPI Overlay
# 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'