x-stoplight:
id: 7d3d29e919e4b
info:
title: POS API
version: '1.0'
contact:
name: Punchh Dev Support
url: https://developers.punchh.com
description: Punchh provides robust APIs for integrating POS (Point-of-Sale) terminals with its back
end. The integration helps businesses to offer their customers loyalty programs directly from their
POS systems.
paths:
/api/pos/locations/configuration:
get:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
banked_rewards_mode:
type: boolean
description: 'Set to 1 if program type of business is banked rewards. If this is 1,
visits_mode and points_unlock_mode will be 0. Note: This parameter, along
with `visits_mode` and `points_unlock_mode` parameters, is included in the response
if the option to display the loyalty program structure in the POS API response is
enabled in the Punchh platform for the business. Contact your Punchh representative
to update this configuration setting.'
business_name:
type: string
description: Business ID and business name.
header:
type: string
description: Header message of location on receipt.
location_id:
type: integer
description: Punchh's internal location ID.
location_name:
type: string
description: Location ID and location name.
log_level:
type: integer
description: 'Log level (0-6) of the location:
0 - None - no logs generated
1 - System - system level logs
2 - Error - any error from API or system errors
3 - Warning - app level or system level warning
4 - Information - app level logs
5 - Request - logs for all request data
6 - Response - logs for all request and response details'
points_unlock_mode:
type: boolean
description: 'Set to 1 if program type of business is points unlock redeemables. If
this is 1, banked_rewards_mode and visits_mode will be 0. Note: This parameter,
along with `visits_mode` and `banked_rewards_mode` parameters, is included in the
response if the option to display the loyalty program structure in the POS API response
is enabled in the Punchh platform for the business. Contact your Punchh representative
to update this configuration setting.'
print_barcodes:
type: boolean
description: Set '1' to print the generated barcode on receipt; else '0'.
send_to_datasink:
type: boolean
description: Send receipt details to Datasink API if set to 1 once receipt is closed.
short_key:
type: integer
description: Short location access key, by which location can be accessible
trailer_1:
type: string
description: Line 1 of receipt message
trailer_2:
type: string
description: Line 2 of receipt message
trailer_3:
type: string
description: Line 3 of receipt message
trailer_4:
type: string
description: Line 4 of receipt message
trailer_5:
type: string
description: Line 5 of receipt message
update_interval:
type: integer
description: The time polling interval between the POS and Punchh is known as the
update_interval (minutes).
visits_mode:
type: boolean
description: 'Set to 1 if program type of business is visit-based. If this is 1, banked_rewards_mode
and points_unlock_mode will be 0. Note: This parameter, along with `banked_rewards_mode`
and `points_unlock_mode` parameters, is included in the response if the option to
display the loyalty program structure in the POS API response is enabled in the
Punchh platform for the business. Contact your Punchh representative to update this
configuration setting.'
multiple_redemption_on_location:
type: boolean
x-stoplight:
id: uvxd2oc1qw9uu
description: Indicates whether the multiple redemptions feature is enabled for a particular
location. You can access this setting for a location on the Punchh platform under
Store Locations > All Store Locations > [choose location] > Location > Allow Location
for Multiple Redemption.
examples:
default:
value:
banked_rewards_mode: '1'
business_name: BUSINESS_NAME_GOES_HERE
header: Header Punchh
location_id: '327922'
location_name: 327922-punchh-demo
log_level: '6'
points_unlock_mode: '0'
print_barcodes: '1'
send_to_datasink: '1'
short_key: '6624'
trailer_1: 'Barcode Punchh Line #1'
trailer_2: 'Barcode Punchh Line #2'
trailer_3: 'Barcode Punchh Line #3'
trailer_4: 'Barcode Punchh Line #4'
trailer_5: THANKS Punchh
update_interval: '60'
visits_mode: '0'
multiple_redemption_on_location: true
summary: Location Configuration
description: "Get the configuration for a location using a unique API key (i.e., location key).\n\
\nThis API call requires the API key as well as the business key to be sent in the HTTP Authorization\
\ header in the following format:\n\nAuthorization: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE\n\
\nwhere \n\nLOCATION_KEY_GOES_HERE is the API key (which is unique for a location) and BUSINESS_KEY_GOES_HERE\
\ is the business key (which is unique for a business). \n\nSee cURL examples for more details.\n"
operationId: pos_location_config
tags:
- Point Of Sale
parameters:
- schema:
type: string
default: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE
in: header
name: Authorization
required: true
description: This is a combination of unique API key as well as business key (UUID) as the Authorization
header.
- schema:
type: string
default: en
in: header
name: Accept-Language
description: Short code for locale variant (e.g., fr-ca, es-ES, en-EN, etc.)
x-stoplight:
id: 319b73fb3a8de
/api/pos/meta:
get:
responses:
'200':
description: 'Automated approach based on different programs: A partner could use different
values and also programmatically identify to display them accordingly via the Program Meta
API.
1. For program_type as “visits”, in order to fetch the count for available unredeemed cards,
use the “unredeemed_cards” field. In this case, net_balance will show the available visits
balance earned for a user.
2. For program_type as “points” -- “points_conversion_type”: “currency” -- in order to fetch
the value for dollar amount available in the user’s account, use the “banked_rewards” field.
In this case, net_balance will also show banked reward currency available, but if you want
to display current points available, use points_balance. This gets reset once it reaches the
threshold value (returned in meta API under “points_conversion_threshold”) where those points
are converted to fixed banked reward value as configured in the platform. For example, if
as per business setup every 100 points earned get converted to $10 and the user currently
has 40 points, then the points_balance value will be 40 until the user earns 60 more points
where they will get converted to $10. Once the user earns 60 more points, the points_balance
reaches 100 where it will get converted to $10 and the points_balance value will become 0.
3. For program_type as “points_unlock_redeemables” -- “points_conversion_type”: “staged” or
“points_conversion_type”: “none” -- in this case, in order to fetch the current balance, you
can use the net_balance value from the balance object which will get updated after every check-in
or redemption. The points_balance value will also update based on earnings but will reset
once it reaches the threshold value. Here, we do not recommend the point_balance value to
be displayed as there is no conversion into currency or reward.
4. For program_type as "points" -- “points_conversion_type”: “rewards” -- in this case, the
points_balance will show current points which will get reset once it reaches the threshold
value (returned in meta API under “points_conversion_threshold”) where points are converted
to a reward. Also, net_balance will display total available points of the user. For example,
if as per business setup every 100 points earned get converted to a reward and the user currently
has 40 points, then the points_balance value will be 40 until the user earns 60 more points
where they will get converted to a reward. Once the user earns 60 more points, the points_balance
reaches 100 where it will get converted to a reward and the points_balance value will become
0.'
content:
application/json:
schema:
type: object
properties:
minimum_payable_price:
type: number
description: Minimum price per unit (e.g., gallon) that needs to be paid for fuel
at the time of fuel discount redemption as configured in the platform.
format: float
maximum_discountable_quantity:
type: number
description: Maximum fuel volume on which a discount can be applied at the time of
fuel discount redemption.
format: float
program_type:
type: string
description: Provides information about the program type configured for the business
in the Punchh platform.
points_conversion_type:
type: string
description: 'Provides information about the conversion type configured for the business
in the Punchh platform: “staged”, “currency”, “rewards”, “no conversion”.'
visits_per_card:
type: integer
description: Number of visits that are required for a single card completion.
card_redemption_value:
type: number
description: The value an end-user gets after a complete card is redeemed by the user.
format: float
minimum_visit_amount:
type: number
description: Minimum amount in selected currency that is required for a visit/check-in
to be counted.
format: float
minimum_visit_hours:
type: integer
description: Minimum duration between two consecutive visits of an end-user so that
both visits are counted separately.
minimum_age_to_signup:
type: integer
description: Minimum age at which an end-user is allowed to sign up.
earning_unit:
type: string
description: The value an end-user earns as the result of a check-in and as configured
in the platform.
currency_earned:
type: number
description: Value of points/visits earned as the result of a check-in as configured
in the platform.
format: float
points_conversion_threshold:
type: integer
description: The threshold value at which an end-user's accumulated points get converted
to rewards as configured in the platform.
redemption_expiry_minutes:
type: integer
description: The duration after which a redemption code generated by an end-user expires.
pending_points:
type: boolean
description: Values can be true or false based on the Punchh platform configuration.
For example, if no pending check-in is selected, then its value should be 0 or false.
Contact your Punchh representative for more information about this Punchh platform
configuration setting.
pending_points_duration:
type: integer
description: Pending points value configured in minutes as “Receipt update delay minutes”
if pending point strategy is “Automatic after a configured time delay”.
configurable_default_time_eod:
type: string
description: All of the pending checks will be settled at this time or after the configured
"Receipt update delay minutes”, whichever is earlier.
enum:
- In HH:MM:SS
format: time
autocreate_user_phone:
type: boolean
description: This determines whether user creation should be allowed via phone number
through POS or not. The values can be true or false depending on the platform configuration.
coupon_prefix:
type: string
description: This field is used to provide the coupon prefix as configured in the
Punchh platform.
redeemables:
type: array
description: Returns the redeemables object. Refer to the redeemables object documentation
for details.
items:
type: object
properties:
redeemable_image_url:
type: string
description: URL of the image displayed in the app to depict the redeemable.
redeemable_properties:
type: string
description: Properties such as "Merchandise", "Food Item", etc. can be added
to a particular redeemable.
redeemable_id:
type: integer
description: Unique ID to identify a redeemable in the system.
name:
type: string
description: Name of the redeemable.
description:
type: string
description: Description of the redeemable that appears in the app. It should
lure the end-users in to redeeming.
points_required_to_redeem:
type: integer
description: Value of points required to redeem a particular redeemable.
meta_data:
type: string
description: Meta data that can be added to a redeemable. This can be used to
program mobile apps to have certain behavior when specific data are received
from the server, OR it can be used as the business wishes. This can be configured
from the Punchh platform and has a maximum length of 255 characters.
multiple_redemptions_enabled:
type: boolean
x-stoplight:
id: tau684ctggtyg
description: Indicates whether the multiple redemptions feature is enabled for the
business. If set to true, the API returns the `multiple_redemptions` object in the
response.
multiple_redemptions:
$ref: '#/components/schemas/multiple-redemptions'
examples:
200 OK:
value:
minimum_payable_price: null
maximum_discountable_quantity: null
program_type: points_unlock_redeemables
points_conversion_type: staged
visits_per_card: 5
card_redemption_value: 2
minimum_visit_amount: 5
minimum_visit_hours: 4
minimum_age_to_signup: 0
earning_unit: point
currency_earned: 0
points_conversion_threshold: 50
redemption_expiry_minutes: 24
pending_points: true
pending_points_duration: 15
configurable_default_time_eod: '23:59:59'
autocreate_user_phone: true
coupon_prefix: ''
redeemables:
- redeemable_image_url: IMAGE_URL_GOES_HERE
redeemable_properties: null
meta_data: Meta data
redeemable_id: REDEEMABLE_ID_GOES_HERE
name: 'Test Redeemable #2'
description: Test redeemable description
points_required_to_redeem: 20
- redeemable_image_url: IMAGE_URL_GOES_HERE
redeemable_properties: null
redeemable_id: REDEEMABLE_ID_GOES_HERE
name: Chips & Salsa
description: Chips & Salsa redeemable. only be used in the redemption of Chips &
Salsa
points_required_to_redeem: 35
- redeemable_image_url: IMAGE_URL_GOES_HERE
redeemable_properties: null
meta_data: deal 1
redeemable_id: REDEEMABLE_ID_GOES_HERE
name: 50% off
description: Test Description
points_required_to_redeem: 200
- redeemable_image_url: IMAGE_URL_GOES_HERE
redeemable_properties: null
redeemable_id: REDEEMABLE_ID_GOES_HERE
name: Test Redeemable
description: Redeemable to test redemption!
points_required_to_redeem: 1500
multiple_redemptions:
exclude_interoperability_strategy_between:
- offer|loyalty
- loyalty|pre_purchased
- promo_coupon|offer
- pre_purchased|promo_coupon
auto_unlock_duration: 100
discount_processing_strategy: date_of_expiry
processing_priority_by_discount_type:
- reward
allow_multiple_redemption_on_item: true
allow_qualifying_items_reused: true
auto_redemption: true
auto_redemption_discounts:
- offer
- subscription
enable_auto_unlock: true
enable_discount_locking: true
max_redemptions_in_transaction: 20
processing_priority_by_acquisition_type:
- code: offer
priority: 1
multiplication_factor: 20
- code: loyalty
priority: 2
multiplication_factor: 10
- code: promo_coupon
priority: 3
multiplication_factor: 5
- code: pre_purchased
priority: 4
multiplication_factor: 4
multiple_redemptions_enabled: true
summary: Program Meta
operationId: pos_program_meta
tags:
- Point Of Sale
parameters:
- schema:
type: string
default: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE
in: header
name: Authorization
description: This is a combination of unique API key as well as business key (UUID) as the Authorization
header.
required: true
- schema:
type: string
default: en
in: header
name: Accept-Language
description: Short code for locale variant (e.g., fr-ca, es-ES, en-EN, etc.)
description: 'Get information about business-level data, such as program type, platform configurations,
list of redeemables (in case of points unlock redeemable program), etc.
>Any update made to the configuration in the platform will be reflected in the response after
15 minutes, instead of in real time, in order to improve the response time.
'
x-stoplight:
id: c6b60d909fe82
/api/pos/users:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
address_line1:
type: string
description: Address of the user
age_verified:
type: boolean
description: Is the age of the user verified or not
anniversary:
type: string
enum:
- YYYY-MM-DD
format: date
description: Anniversary of the user in YYYY-MM-DD format
avatar_remote_url:
type: string
description: Avatar URL of the user profile image
balance:
type: object
title: Balance
description: Balance Object
properties:
banked_rewards:
type: string
description: Banked rewards of the user account. This value is set only if the
program type is banked rewards based; else it will be 0.
expired_membership_level:
type: string
description: Expired membership level
x-nullable: true
initial_visits:
type: integer
description: Captures all of the visits that the guest made up to the time of
migration
membership_level:
type: string
description: Membership level of the user
x-nullable: true
membership_level_id:
type: string
description: Membership level ID of the user
x-nullable: true
net_balance:
type: number
description: Net available balance of the current account. This value always shows
the available balance of the user, whether visits, banked rewards, or points.
net_debits:
type: number
description: Net debits of the user
pending_points:
type: integer
description: Pending points of the user
points_balance:
type: integer
description: 'Returns the points balance of the user account. This value gets
reset based on the point conversion value once reached, as configured in the
Punchh platform.
Note: It will increase only as per points earned, and it resets once the threshold
value is reached to convert points into currency or reward.'
signup_anniversary_day:
type: string
description: Sign-up anniversary day of the current account
total_credits:
type: number
format: double
description: Total credits of the current account
total_debits:
type: string
description: Total debits of the current account
total_point_credits:
type: integer
description: Total points credits of the user
total_redeemable_visits:
type: integer
description: Total redeemable visits of the user
total_visits:
type: integer
description: Total number of loyalty visits
unredeemed_cards:
type: integer
description: Number of unredeemed cards of a user. This value is set only if the
program type is visit-based; else it will be 0.
birthday:
type: string
description: Birthday date of the user in YYYY-MM-DD format
city:
type: string
description: City in which the user lives
created_at:
type: string
description: Date/time when the user was created in the system in ISO 8601 format
discount_type:
type: string
description: Discount type. e.g., 'card_completion' || 'reward' || 'discount_amount'
|| 'redemption_code'
email:
type: string
description: Email address of the user
email_verified:
type: boolean
description: Is the email address of the user verified or not
fb_uid:
type: string
description: Unique Facebook ID of the user
first_name:
type: string
description: First name of the user
gender:
type: string
description: Gender of the user
id:
type: integer
description: Unique ID of the user
last_name:
type: string
description: Last name of the user
phone:
type: string
description: Phone number of the user
privacy_policy:
type: boolean
description: Has the user agreed to the privacy policy or not
rewards:
type: object
title: Rewards Object
properties:
rewards:
type: array
items:
type: object
properties:
created_at:
type: string
description: Date/time when the reward was created (in ISO 8601 format)
description:
type: string
description: Description that explains rewards as configured in the Punchh
platform
discount_amount:
type: integer
description: Discount amount associated with the current reward
end_date_tz:
type: string
description: Expiry date of the reward in ISO 8601 format
id:
type: integer
description: Reward ID
format: int64
image:
type: string
description: Image URL of the reward
name:
type: string
description: Name of the reward
points:
type: integer
description: Points associated with the current reward
redeemable_properties:
type: string
description: Comma-separated values that provide additional details about
a redeemable. For example, a redeemable could be a "Food_Item" or "Merchandise",
etc. Can be configured for a business in the Punchh platform and attached
to a redeemable. If no value is attached to a redeemable, a blank field
will be returned.
start_date_tz:
type: string
description: Start date of the reward in ISO 8601 format
status:
type: string
description: The redemption status of a reward. Currently only the value
"Unredeemed" will be returned. This signifies that the reward has not
been redeemed by an end-user.
updated_at:
type: string
description: Date/time when the reward was updated (in ISO 8601 format)
type:
type: string
description: 'This will be either redeemable or reward. Possible Redemptions
and Create Redemption API requests depend on what is returned in this
field.
In cases where this field is not returned, assume that the type is reward.'
meta_data:
type: string
description: Meta data that can be added to a redeemable. This will be returned
only if it is configured in the Punchh platform. The maximum length is
255 characters.
selected_card_number:
type: string
selected_discount_amount:
type: string
selected_reward_id:
type: integer
state:
type: string
description: State in which the user lives
updated_at:
type: string
description: Date/time when the user was updated in the system in ISO 8601 format
user_digest:
type: string
zip_code:
type: string
description: Zip code of the user
age_verified_status:
type: boolean
x-stoplight:
id: h2n1oeu4hqoc9
description: '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.'
examples:
default:
value:
address_line1: null
anniversary: null
avatar_remote_url: null
birthday: '1999-01-01'
city: null
created_at: '2020-10-06T14:59:18Z'
email: test@example.com
email_verified: false
fb_uid: null
first_name: FIRST_NAME_GOES_HERE
age_verified: false
privacy_policy: false
gender: male
id: 60389313
last_name: LAST_NAME_GOES_HERE
state: null
updated_at: '2020-10-06T14:59:18Z'
zip_code: '12344'
balance:
banked_rewards: 0
membership_level: null
membership_level_id: null
net_balance: 0
net_debits: 0
pending_points: 0
points_balance: 0
signup_anniversary_day: 10/06
total_credits: 0
total_debits: '0.0'
total_point_credits: 0
total_redeemable_visits: 0
expired_membership_level: null
total_visits: 0
initial_visits: 0
unredeemed_cards: 0
user_digest: USER_DIGEST_GOES_HERE
selected_card_number: null
selected_reward_id: null
selected_redeemable_id: null
rewards: []
discount_type: null
phone: '1111111111'
age_verified_status: true
summary: Create New User
description: 'This API creates a new user account by using phone or email or card (at least one
of them).
'
operationId: pos_create_user
tags:
- Point Of Sale
parameters:
- schema:
type: string
default: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE
in: header
name: Authorization
description: This is a combination of unique API key as well as business key (UUID) as the Authorization
header.
required: true
x-stoplight:
id: 4d4a03b9a5f32
requestBody:
content:
application/json:
schema:
type: object
properties:
phone:
type: string
description: Phone number of the user. The phone number parameter accepts various formats,
including 1111-111-111, 111-111-1111, or 1111111111.
email:
type: string
description: Email address of the user
card_number:
type: string
description: Loyalty card number of the user
first_name:
type: string
description: First name of the user
last_name:
type: string
description: Last name of the user
birthday:
type: string
description: Birth date of the user
enum:
- YYYY-MM-DD
format: date
address_line1:
type: string
description: Address of the user
city:
type: string
description: City in which the user lives
gender:
type: string
description: Gender of the user (i.e., `male` ,`female`, or `declined`)
terms_and_conditions:
type: boolean
description: Whether the end-user has agreed to the terms and conditions to use the
app as per the configuration. Possible values - `True`, `true`, `False`, `false`
send_compliance_sms:
type: boolean
description: Send true in order to trigger a compliance / opt-in SMS for the user. Possible
values - `True`, `true`, `False`, `false`. Both `terms_and_conditions` and `send_compliance_sms`
must be set to "true" for the API to trigger a compliance (opt-in) SMS.
favourite_locations:
type: string
description: List of favorite locations of the end-user. You can fetch location_name
and location_id from the Location Configuration API. The parameter accepts an empty
value ("") for the blank favorite locations list.
signup_channel:
type: string
default: POS
description: 'By default, the sign-up channel will always be “POS” when the user is
created at POS. However, a business can allow users to sign up through channels other
than POS. If a user has already signed up with the business through a channel other
than POS when creating the user in Punchh, you can override the default channel of
“POS” and instead specify the sign-up channel of the user.
When a user is created
through channels other than POS, the user is created in a non-Punchh system as configured
by the business. For example, a user who signs up with the business through the "MobileFacebook"
sign-up channel is created in a non-Punchh system. If this same user is created in
Punchh using the Create New User API, you can override the default value of "POS"
in the signup_channel parameter with "MobileFacebook" (i.e., the channel through which
the user first signed up with the business).
The possible values are: `MobileEmail`,
`MobileFacebook`, `POS`, `WebEmail`, `WebFacebook`, `eClub`, `OnlineOrder`, `Chatbot`,
`Wifi`, `MobileApple`'
age_verified_status:
type: boolean
x-stoplight:
id: ah01xp6xtby27
description: 'Whether or not the user has undergone age verification by Koupon Media.
Possible values: true, false. The parameter is accepted in the request 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.'
required:
- phone
examples:
default:
value:
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
phone: '1111111111'
email: test@example.com
terms_and_conditions: true
send_compliance_sms: true
favourite_locations: 352704,359591
zip_code: 12344
birthday: '1999-01-01'
gender: male
marketing_email_subscription: true
age_verified_status: true
description: "For authentication, the location key token must be provided as a parameter.\n\n\
**Using a Loyalty Card** \n\nCard numbers are generated in the Punchh platform. By using a card,\
\ an end-user can earn loyalty without registering. A business usually distributes physical\
\ cards to end-users with a PIN. The cards are scanned by the barcode reader at the POS. Card\
\ numbers are usually 16 digits."
/api/pos/users/search:
get:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
address_line1:
type: string
description: Full address of the user
age_verified:
type: boolean
description: Is the age of user verified or not
anniversary:
type: string
description: Anniversary date of the user in YYYY-MM-DD format
format: date
avatar_remote_url:
type: string
description: Avatar remote URL the of user profile image
balance:
$ref: '#/components/schemas/balance'
birthday:
type: string
description: Birthday date string of the user in YYYY-MM-DD format
format: date
city:
type: string
description: City in which the user lives
created_at:
type: string
description: Date/time string when the user was created in the system in ISO 8601
format
format: date-time
discount_type:
type: string
description: 'Discount types include: reward, redeemable'
email:
type: string
description: Email address of the user
email_verified:
type: boolean
description: Is the email address of the user verified or not
fb_uid:
type: string
description: Facebook ID of the user
first_name:
type: string
description: First name of the user
gender:
type: string
description: Gender of the user
id:
type: integer
description: Unique ID of the user
last_name:
type: string
description: Last name of the user
phone:
type: string
description: Phone number of the user
privacy_policy:
type: boolean
description: Has the user agreed to the privacy policy or not
rewards:
$ref: '#/components/schemas/rewards'
selected_card_number:
type: string
description: 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.
state:
type: string
description: State in which the user lives.
updated_at:
type: string
description: Date/time string when the user was last updated in the system in ISO
8601 format.
format: date-time
user_digest:
type: string
description: User digest token of the user
zip_code:
type: string
description: Zip code of the user.
converted_category_balances:
$ref: '#/components/schemas/converted_category_balances'
payment_mode:
type: string
description: 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`,
and `recurring`.
selected_discount_amount:
$ref: '#/components/schemas/selected_discount_amount'
selected_rewards:
$ref: '#/components/schemas/selected_rewards'
selected_redeemables:
$ref: '#/components/schemas/selected_redeemables'
selected_redeemable_cards:
$ref: '#/components/schemas/selected_redeemables_card'
selected_coupons:
$ref: '#/components/schemas/selected_coupons'
selected_tip_amount:
type: string
description: 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.
single_scan_code:
type: string
description: Single scan code of the user to be used in the Single Scan Flow at the
POS. This parameter is included in the response when the POS sends a short code
for which payment is enabled.
subscriptions:
$ref: '#/components/schemas/subscriptions'
age_verified_status:
type: boolean
x-stoplight:
id: 5kjbncvz9kmjc
description: '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.'
selected_subscriptions:
$ref: '#/components/schemas/selected_subscriptions'
examples:
200 OK:
value:
address_line1: ''
age_verified: false
anniversary: null
avatar_remote_url: null
balance:
banked_rewards: '3339.69'
expired_membership_level: null
initial_visits: 0
membership_level: null
membership_level_id: null
net_balance: 3339.69
net_debits: 425.31
pending_points: 434
points_balance: 41
signup_anniversary_day: 10/17
total_credits: 21091
total_debits: '425.31'
total_point_credits: 21091
total_redeemable_visits: 210
total_visits: 201
unredeemed_cards: 0
birthday: null
city: ''
created_at: '2017-10-17T18:40:05Z'
discount_type: null
email: test@example.com
email_verified: false
fb_uid: null
first_name: FIRST_NAME_GOES_HERE
gender: ''
id: 1107620
last_name: LAST_NAME_GOES_HERE
phone: 1111111111
privacy_policy: false
rewards:
- created_at: '2019-07-30T10:36:23Z'
description: Test Test
discount_amount: 0
end_date_tz: null
id: 1380722
image: IMAGE_URL_GOES_HERE
name: Test1
points: 0
redeemable_properties: null
start_date_tz: '2019-07-30T10:36:23Z'
status: unredeemed
updated_at: '2019-07-30T10:36:23Z'
- created_at: '2019-09-28T07:05:50Z'
description: ''
discount_amount: 5
end_date_tz: null
id: 1399333
image: IMAGE_URL_GOES_HERE
name: Test (basic)
points: 0
redeemable_properties: null
start_date_tz: '2019-09-28T07:05:50Z'
status: unredeemed
updated_at: '2020-04-20T19:36:03Z'
- created_at: '2019-09-28T07:05:50Z'
description: ''
discount_amount: 5
end_date_tz: null
id: 1399334
image: IMAGE_URL_GOES_HERE
name: Test (basic)
points: 0
redeemable_properties: null
start_date_tz: '2019-09-28T07:05:50Z'
status: unredeemed
updated_at: '2019-09-28T07:05:50Z'
- created_at: '2019-09-28T07:05:50Z'
description: ''
discount_amount: 5
end_date_tz: null
id: 1399335
image: IMAGE_URL_GOES_HERE
name: Test (basic)
points: 0
redeemable_properties: null
start_date_tz: '2019-09-28T07:05:50Z'
status: unredeemed
updated_at: '2019-09-28T07:05:50Z'
- created_at: '2019-09-28T07:05:50Z'
description: ''
discount_amount: 5
end_date_tz: null
id: 1399336
image: IMAGE_URL_GOES_HERE
name: Test (basic)
points: 0
redeemable_properties: null
start_date_tz: '2019-09-28T07:05:50Z'
status: unredeemed
updated_at: '2019-09-28T07:05:50Z'
- created_at: '2020-01-30T13:26:40Z'
description: ''
discount_amount: 0
end_date_tz: null
id: 1425570
image: IMAGE_URL_GOES_HERE
name: Test QC static discounrt
points: 0
redeemable_properties: null
start_date_tz: '2020-01-30T13:26:40Z'
status: unredeemed
updated_at: '2020-01-30T13:26:40Z'
- created_at: '2020-01-30T13:41:40Z'
description: ''
discount_amount: 0
end_date_tz: null
id: 1425572
image: IMAGE_URL_GOES_HERE
name: Test QC static discounrt
points: 0
redeemable_properties: null
start_date_tz: '2020-01-30T13:41:40Z'
status: unredeemed
updated_at: '2020-01-30T13:41:40Z'
- created_at: '2020-01-30T13:57:07Z'
description: ''
discount_amount: 0
end_date_tz: null
id: 1425574
image: IMAGE_URL_GOES_HERE
name: Test QC static discounrt
points: 0
redeemable_properties: null
start_date_tz: '2020-01-30T13:57:07Z'
status: unredeemed
updated_at: '2020-01-30T13:57:07Z'
- created_at: '2020-04-20T18:17:40Z'
description: ''
discount_amount: 2
end_date_tz: null
id: 1478745
image: IMAGE_URL_GOES_HERE
name: Test $2
points: 0
redeemable_properties: null
start_date_tz: '2020-04-20T18:17:40Z'
status: unredeemed
updated_at: '2020-04-20T18:17:40Z'
- created_at: '2020-04-20T18:18:04Z'
description: ''
discount_amount: 2
end_date_tz: null
id: 1478746
image: IMAGE_URL_GOES_HERE
name: Test $2
points: 0
redeemable_properties: null
start_date_tz: '2020-04-20T18:18:04Z'
status: unredeemed
updated_at: '2020-04-20T18:18:04Z'
selected_card_number: null
selected_discount_amount: null
selected_reward_id: null
selected_subscriptions:
- subscription_id: 331
start_time: '2024-06-05T17:21:48+05:30'
end_time: '2024-07-25T23:59:59+05:30'
external_plan_identifier: null
plan_id: 14
cancelled_at: null
name: Sub plan
description: ''
miscellaneous: ''
status: active
state: ''
updated_at: '2020-04-28T14:43:15Z'
user_digest: USER_DIGEST_GOES_HERE
zip_code: null
age_verified_status: true
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
x-stoplight:
id: 5e3kgbv8bm9ri
examples:
Missing or invalid drive_thru_code:
value:
error: drive_thru_code required or Invalid code
Invalid drive_thru_code length:
value:
error: Invalid drive_thru_code length
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
x-stoplight:
id: 7pjrq73h3qlqs
examples:
User not found:
value:
error: User not found
drive_code_thru not found:
value:
error: CODE_NOT_FOUND
drive_thru_code expired:
value:
error: CODE_EXPIRED
summary: User Look-up and Fetch Balance
description: '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 |
| Email |
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 |
| Apple NFC Data |
N/A |
Alphanumeric |
Hexadecimal |
| NFC Token |
N/A |
Alphanumeric |
Hexadecimal |
| Reward ID |
11-20 |
Numeric |
N/A |
## 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](/docs/dev-portal-pos/additional-topics/single-scan-flow).
## User Look-up with Loyalty Short Code
The Loyalty Short Code is generated in the mobile app. When only the guest identification using
the short code at drive-thru is enabled for a business, the short code is used for loyalty identification
only. When **Single Scan Flow (SSF)** and **Payment with Short Code using SSF** are also enabled,
the short code is used for both loyalty identification and payment.
A short code used only for loyalty identification is generated using the [Generate a Drive-Thru
Short Code API](https://developers.partech.com/docs/dev-portal-mobile/apis/mobile-api/tag/drive-thru/post/api2/mobile/drivethru_code).
When the short code is used for look-up, the User Look-up API returns the user profile data, balance,
and rewards in the response.
A short code used for both loyalty identification and payment is generated using [Generate Single
Scan Code API](https://developers.partech.com/docs/dev-portal-mobile/apis/mobile-api/tag/single-scan-code/post/api2/mobile/single_scan_tokens).
When the POS calls the User Look-up API with the short code (passed in the `drive_thru_code` parameter),
Punchh uses the short code and the user ID mapped to it to retrieve the associated `single_scan_code`.
Punchh then uses the `single_scan_code` to look up the user and returns it in the response, along
with any rewards and payment information selected by the user when generating the short code from
the mobile app. The POS can use the `single_scan_code` for check-in, redemptions, and payments.
'
operationId: pos_user_search
tags:
- Point Of Sale
parameters:
- schema:
type: string
default: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE
in: header
name: Authorization
required: true
description: This is a combination of unique API key as well as business key (UUID) as the Authorization
header.
- schema:
type: string
default: en
in: header
name: Accept-Language
description: Short code for locale variant (e.g., fr-ca, es-ES, en-EN, etc.)
- schema:
type: string
in: query
name: email
description: Email address of the user.
- schema:
type: string
in: query
name: phone
description: Phone number of the user.
- schema:
type: string
in: query
name: card_number
description: Physical loyalty card generated by Punchh.
- schema:
type: string
in: query
name: user_as_qrcode
description: QR code of the user.
- schema:
type: string
in: query
name: single_scan_code
description: 'Single scan code of the user to be used in single scan flow. '
- schema:
type: string
in: query
name: redemption_code
description: Redemption code of the user as generated on the app or web.
- schema:
type: string
in: query
name: reward_id
description: ID of the user’s reward as generated on the app or web.
- schema:
type: string
in: query
name: apple_nfc_data
description: User identifier that enables look-up of user information generated from the Apple
Pass. See [Implement Apple Pass Integration With POS](/docs/dev-portal-pos/ea3c77d831261-implement-apple-pass-integration-with-pos)
- schema:
type: string
in: query
name: nfc_token
description: User identifier that enables the look-up of user information generated from the Google
Pass. See [Implement Google Pass Integration With POS](/docs/dev-portal-pos/additional-topics/implement-google-pass-integration-with-pos)
- schema:
type: string
in: query
name: drive_thru_code
description: '4-digit numeric/alphanumeric drive-thru short code generated by the user from the
brand''s mobile app that enables lookup of user details and balance. The short code is mapped
to the user ID. See [Generate a Drive-Thru Short Code](https://developers.partech.com/docs/dev-portal-mobile/647b28e02d630-generate-a-drive-thru-short-code).
When the short code passed in the API is enabled for payments, Punchh uses the short code and
the user ID mapped to it to retrieve the associated single scan code. Punchh then uses the single
scan code to look up the user and returns it in the response, along with any rewards and payment
information selected when the short code was generated.
The POS can use the single_scan_code for check-in, redemptions, and payments. See [Generate
Single Scan Code API](https://developers.partech.com/docs/dev-portal-mobile/apis/mobile-api/tag/single-scan-code/post/api2/mobile/single_scan_tokens).
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.
'
x-stoplight:
id: 4ffb5dc3916f7
/api/pos/checkins:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties:
address_line1:
type: string
description: Address of the user
age_verified:
type: boolean
description: Age verified or not
anniversary:
type: string
format: date
description: Anniversary of the user in `YYYY-MM-DD` format
avatar_remote_url:
type: string
description: Avatar URL of the user profile image
balance:
$ref: '#/components/schemas/balance'
birthday:
type: string
format: date
description: Birthday date of the user in `YYYY-MM-DD` format
city:
type: string
description: City of the user
created_at:
type: string
format: date-time
description: Date/time when the user was created in the system in [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601)
format
email:
type: string
description: Email address of the user
email_verified:
type: boolean
description: Email address verified or not
fb_uid:
type: string
description: Facebook ID of the user
first_name:
type: string
description: First name of the user
gender:
type: string
description: Gender of the user
id:
type: integer
description: Unique ID of the user
last_name:
type: string
description: Last name of the user
phone:
type: string
description: Phone number of the user
points_earned:
type: integer
description: Returns points earned on the check-in
privacy_policy:
type: boolean
description: Privacy policy agreed upon or not
rewards:
type: object
title: Rewards Object
properties:
rewards:
type: array
items:
type: object
properties:
created_at:
type: string
description: Date/time when the reward was created (in ISO 8601 format)
description:
type: string
description: Description that explains rewards as configured in the Punchh
platform
discount_amount:
type: integer
description: Discount amount associated with the current reward
end_date_tz:
type: string
description: Expiry date of the reward in ISO 8601 format
id:
type: integer
description: Reward ID
format: int64
image:
type: string
description: Image URL of the reward
name:
type: string
description: Name of the reward
points:
type: integer
description: Points associated with the current reward
redeemable_properties:
type: string
description: Comma-separated values that provide additional details about
a redeemable. For example, a redeemable could be a "Food_Item" or "Merchandise",
etc. Can be configured for a business in the Punchh platform and attached
to a redeemable. If no value is attached to a redeemable, a blank field
will be returned.
start_date_tz:
type: string
description: Start date of the reward in ISO 8601 format
status:
type: string
description: The redemption status of a reward. Currently only the value
"Unredeemed" will be returned. This signifies that the reward has not
been redeemed by an end-user.
updated_at:
type: string
description: Date/time when the reward was updated (in ISO 8601 format)
type:
type: string
description: 'This will be either redeemable or reward. Possible Redemptions
and Create Redemption API requests depend on what is returned in this
field.
In cases where this field is not returned, assume that the type is reward.'
meta_data:
type: string
description: Meta data that can be added to a redeemable. This will be returned
only if it is configured in the Punchh platform. The maximum length is
255 characters.
state:
type: string
description: State in which the user lives
updated_at:
type: string
description: Date/time when the user was updated in the system in [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601)
format
format: date-time
user_digest:
type: string
description: User digest token of the user
zip_code:
type: string
description: Zip code of the user
selected_card_number:
type: string
description: This value is set only in single scan flow. This is the gift card the
user wants to use to make the payment. If this value is set, use it to make the
payment for the order.
selected_discount_amount:
$ref: '#/components/schemas/selected_discount_amount'
selected_redeemables:
$ref: '#/components/schemas/selected_redeemables'
selected_rewards:
$ref: '#/components/schemas/selected_rewards'
selected_redeemable_cards:
$ref: '#/components/schemas/selected_redeemables_card'
selected_coupons:
$ref: '#/components/schemas/selected_coupons'
examples:
default:
value:
address_line1: ''
age_verified: false
anniversary: null
avatar_remote_url: null
balance:
banked_rewards: '3120.85'
expired_membership_level: null
initial_visits: 0
membership_level: null
membership_level_id: null
net_balance: 3120.85
net_debits: 424.15
pending_points: 434
points_balance: 42
signup_anniversary_day: 10/17
total_credits: 19342
total_debits: '424.15'
total_point_credits: 19342
total_redeemable_visits: 187
total_visits: 178
unredeemed_cards: 0
birthday: null
city: ''
created_at: '2017-10-17T18:40:05Z'
discount_type: null
email: test@example.com
email_verified: false
fb_uid: null
first_name: FIRST_NAME_GOES_HERE
gender: ''
id: 1107620
last_name: LAST_NAME_GOES_HERE
phone: 1111111111
points_earned: 113
privacy_policy: false
rewards:
- created_at: '2019-07-30T10:36:23Z'
description: Test Test
discount_amount: 0
end_date_tz: null
id: 1380722
image: IMAGE_URL_GOES_HERE
name: Test1
points: 0
redeemable_properties: null
start_date_tz: '2019-07-30T10:36:23Z'
status: unredeemed
updated_at: '2019-07-30T10:36:23Z'
- created_at: '2019-09-28T07:05:50Z'
description: ''
discount_amount: 5
end_date_tz: null
id: 1399333
image: IMAGE_URL_GOES_HERE
name: Test (basic)
points: 0
redeemable_properties: null
start_date_tz: '2019-09-28T07:05:50Z'
status: unredeemed
updated_at: '2019-09-28T07:05:50Z'
- created_at: '2019-09-28T07:05:50Z'
description: ''
discount_amount: 5
end_date_tz: null
id: 1399334
image: IMAGE_URL_GOES_HERE
name: Test (basic)
points: 0
redeemable_properties: null
start_date_tz: '2019-09-28T07:05:50Z'
status: unredeemed
updated_at: '2019-09-28T07:05:50Z'
- created_at: '2019-09-28T07:05:50Z'
description: ''
discount_amount: 5
end_date_tz: null
id: 1399335
image: IMAGE_URL_GOES_HERE
name: Test (basic)
points: 0
redeemable_properties: null
start_date_tz: '2019-09-28T07:05:50Z'
status: unredeemed
updated_at: '2019-09-28T07:05:50Z'
- created_at: '2019-09-28T07:05:50Z'
description: ''
discount_amount: 5
end_date_tz: null
id: 1399336
image: IMAGE_URL_GOES_HERE
name: Test (basic)
points: 0
redeemable_properties: null
start_date_tz: '2019-09-28T07:05:50Z'
status: unredeemed
updated_at: '2019-09-28T07:05:50Z'
- created_at: '2020-01-30T13:26:40Z'
description: ''
discount_amount: 0
end_date_tz: null
id: 1425570
image: IMAGE_URL_GOES_HERE
name: Test QC static discounrt
points: 0
redeemable_properties: null
start_date_tz: '2020-01-30T13:26:40Z'
status: unredeemed
updated_at: '2020-01-30T13:26:40Z'
- created_at: '2020-01-30T13:41:40Z'
description: ''
discount_amount: 0
end_date_tz: null
id: 1425572
image: IMAGE_URL_GOES_HERE
name: Test QC static discounrt
points: 0
redeemable_properties: null
start_date_tz: '2020-01-30T13:41:40Z'
status: unredeemed
updated_at: '2020-01-30T13:41:40Z'
- created_at: '2020-01-30T13:57:07Z'
description: ''
discount_amount: 0
end_date_tz: null
id: 1425574
image: IMAGE_URL_GOES_HERE
name: Test QC static discounrt
points: 0
redeemable_properties: null
start_date_tz: '2020-01-30T13:57:07Z'
status: unredeemed
updated_at: '2020-01-30T13:57:07Z'
selected_card_number: null
selected_discount_amount: null
selected_reward_id: null
state: ''
updated_at: '2020-03-23T13:37:20Z'
user_digest: USER_DIGEST_GOES_HERE
zip_code: null
summary: Create Check-in
description: 'Creates a check-in for a customer.
'
operationId: pos_checkin
tags:
- Point Of Sale
parameters:
- schema:
type: string
default: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE
in: header
name: Authorization
description: This is a combination of unique API key as well as business key (UUID) as the Authorization
header.
required: true
- schema:
type: string
default: en
in: header
name: Accept-Language
description: Short code for locale variant (e.g., fr-ca, es-ES, en-EN, etc.)
x-stoplight:
id: 52632fd1c0ab1
requestBody:
content:
application/json:
schema:
type: object
properties:
pos_version:
type: string
description: POS version
sequence_no:
type: integer
description: Sequence number of check details required to be sent for the same transaction
transaction_no:
type: integer
description: Trasaction number
receipt_datetime:
type: string
enum:
- YYYY-MM-DDThh:mm:ssZ
format: date-time
description: Timestamp of receipt per ISO 8601 format including TZ offset from UTC (YYYY-MM-DDThh:mm:ss-±hh:mm)
revenue_code:
type: string
description: Name of the POS function that designates order fulfillment method (e.g.,
dine-in, to-go/take-out, call-in pickup, call-in deliver, etc). Some POS call this
Revenue Center, Order Method, Order Mode, etc. The values assigned here should represent
the way the order is fulfilled for the customer, not the area in the restaurant where
the order is placed (e.g., not bar, patio, dining room, etc.).
revenue_id:
type: string
description: 'ID of the POS function that designates the order fulfillment method. Example:
1 for dine-in; 2 for to-go/take out; 3 for call-in pickup; 4 for call-in deliver,
etc. Some POS call this revenue center, order method, order mode, etc. The values
assigned here should represent the way the order is fulfilled for the customer, not
the area in the restaurant where the order is placed (e.g., not bar, patio, dining
room, etc.).'
menu_items:
$ref: '#/components/schemas/menu_items'
employee_id:
type: string
description: Employee ID
employee_name:
type: string
description: Name of the employee
receipt_amount:
type: number
format: double
description: Order amount before taxes, calculated as the sum of all item amounts minus
any discounts. This is the amount used to calculate loyalty points/visits. The value
of this parameter should match `subtotal_amount`. For example, if the order amount
is $10, both `receipt_amount` and `subtotal_amount` will be 10. If a $2 discount is
applied, both will be 8.
subtotal_amount:
type: number
format: double
description: Order amount before taxes (sum of all item amounts minus any discounts).
Same as `receipt_amount`. For historical reasons, include this parameter along with
`receipt_amount` in the API request.
cc_last4:
type: integer
description: Last 4 digits of the user's credit card number
punchh_key:
type: string
description: Unique Punchh key
pos_type:
type: string
description: "Name of the POS client that is sending the receipts. \n\nPossible values:\
\ A1 POS, Adora POS, Aloha, Aloha (Secure), Appetize, Auphan, Bite Kiosk, Brink, Comtrex,\
\ DataPoint, EPoint, Focus, Focus POS Systems, FoodTec, FoodTec V2, Gilbarco, GJS\
\ Kiosk, Granbury, Grubburr Kiosk, HoneyBakedHam POS, Hooters Hoa, HungerRush POS\
\ (Formerly Revention), InfoKING, Itwercs POS, iVend POS, Maitre’D, Marble Kiosk,\
\ Marblepos, Micros RES 3700, Micros Simphony, NCR ISS45 POS, NCR kiosk, NCR RPOS,\
\ NCR Silver, NCR Silver Essential, NCR Silver Pro, NCR Storepoint, Nextep kiosk,\
\ Onetap, PAR, PiZMET, Plum POS, Positouch, PosNet, Proprietary POS, Punchh Kiosk,\
\ Punchh Secure, QikServe Kiosk, Quardzilla, QuBeyond POS (Formerly Gusto), QuickServe,\
\ Ready (Pay-on-the-GO), Revel, SICOM, SpeedLine, Squirrel, Steak n Shake, TCPOS,\
\ Tevalis POS, Toast, Toast V3, Tray POS, Treatware, Verifone, VisualTouch POS, XPO\
\ Pay@Table, Xchangexec (Task retail), Xenial Cloud, Xpient, Xpient (Secure), Zonal\
\ POS"
external_uid:
type: string
description: 'Unique ID generated by your system. We use this to prevent duplicates
in the case same transactions get triggered twice.
'
channel:
type: string
description: 'Channel through which the check-in was requested. Possible values are:
online_order, pos, web, mobile, dashboard, chatbot, kiosk.'
email:
type: string
description: Email address of the user. In the case of single scan flow, email is not
a required parameter.
single_scan_code:
type: string
description: Single scan code of the user is a required parameter when a check-in is
created through the single scan flow on the POS. The code identifies the user.
payable:
type: number
format: double
description: Amount paid after applying discounts and adding any taxes or service charges.
For example, if the order amount is $10, the values of the `receipt_amount` and `subtotal_amount`
parameters will be $10. If a $2 discount is applied, `subtotal_amount` becomes $8.
However, if there are $3 service charges and $1 tax, the value of the `payable` parameter
becomes $12 (10 – 2 + 3 + 1 = 12).
required:
- pos_version
- transaction_no
- receipt_datetime
- revenue_code
- revenue_id
- menu_items
- receipt_amount
- subtotal_amount
- punchh_key
- pos_type
- channel
- email
- single_scan_code
- payable
examples:
By Email:
value:
pos_version: V03
amp: null
sequence_no: '2124'
transaction_no: '4488'
receipt_datetime: '2018-10-26T23:59:59-07:00'
revenue_id: Dine In
revenue_code: '4'
menu_items:
- item_name: White rice
item_qty: 1
item_amount: 2.86
menu_item_type: M
menu_item_id: '3419'
menu_family: '800'
menu_major_group: '152'
serial_number: '1.0'
- item_name: Brown rice
item_qty: 1
item_amount: 7.86
menu_item_type: M
menu_item_id: '3418'
menu_family: '800'
menu_major_group: '152'
serial_number: '2.0'
- item_name: Free rice
item_qty: 1
item_amount: 2.86
menu_item_type: D
menu_item_id: '3419'
menu_family: '800'
menu_major_group: '152'
serial_number: '3.0'
employee_id: '135'
employee_name: EMPLOYEE_NAME_GOES_HERE
subtotal_amount: 7.86
receipt_amount: 7.86
cc_last4: '0000'
punchh_key: PUNCHH_KEY_GOES_HERE
pos_type: Micros Simphony
external_uid: a unique id
process: 'true'
channel: pos
email: test@example.com
By Phone:
value: "{\n \"pos_version\": \"V03\",\n \"amp\": null,\n \"sequence_no\": \"2124\"\
,\n \"transaction_no\": \"4488\",\n \"receipt_datetime\": \"2018-10-26T23:59:59-07:00\"\
,\n \"revenue_id\": \"Dine In\",\n \"revenue_code\": \"4\",\n \"menu_items\": [\n\
\ {\n \"item_name\": \"White rice\",\n \"item_qty\": 1,\n \"item_amount\"\
: 2.86,\n \"menu_item_type\": \"M\",\n \"menu_item_id\": \"3419\",\n \
\ \"menu_family\": \"800\",\n \"menu_major_group\": \"152\",\n \"serial_number\"\
: \"1.0\"\n },\n {\n \"item_name\": \"Brown rice\",\n \"item_qty\":\
\ 1,\n \"item_amount\": 7.86,\n \"menu_item_type\": \"M\",\n \"menu_item_id\"\
: \"3418\",\n \"menu_family\": \"800\",\n \"menu_major_group\": \"152\",\n\
\ \"serial_number\": \"2.0\"\n },\n {\n \"item_name\": \"Free rice\"\
,\n \"item_qty\": 1,\n \"item_amount\": 2.86,\n \"menu_item_type\": \"\
D\",\n \"menu_item_id\": \"3419\",\n \"menu_family\": \"800\",\n \"menu_major_group\"\
: \"152\",\n \"serial_number\": \"3.0\"\n }\n ],\n \"employee_id\": \"135\"\
,\n \"employee_name\": \"EMPLOYEE_NAME_GOES_HERE\",\n \"subtotal_amount\": 7.86,\n\
\ \"receipt_amount\": 7.86,\n \"cc_last4\": \"0000\",\n \"punchh_key\": \"PUNCHH_KEY_GOES_HERE\"\
,\n \"pos_type\": \"micros\",\n \"external_uid\": \"a unique id\",\n \"process\"\
: \"true\",\n \"channel\": \"pos\",\n \"phone\":\"1111111111\"\n}\n"
By Card Number:
value:
card_number: CARD_NUMBER_GOES_HERE
cc_last4: '0000'
subtotal_amount: 7.86
receipt_amount: 7.86
employee_id: '135'
employee_name: EMPLOYEE_NAME_GOES_HERE
revenue_id: Dine In
revenue_code: '4'
menu_items:
- item_name: White rice
item_qty: 1
item_amount: 2.86
menu_item_type: M
menu_item_id: '3419'
menu_family: '800'
menu_major_group: '152'
serial_number: '1.0'
- item_name: Brown rice
item_qty: 1
item_amount: 7.86
menu_item_type: M
menu_item_id: '3418'
menu_family: '800'
menu_major_group: '152'
serial_number: '2.0'
- item_name: Free rice
item_qty: 1
item_amount: 2.86
menu_item_type: D
menu_item_id: '3419'
menu_family: '800'
menu_major_group: '152'
serial_number: '3.0'
pos_type: micros
pos_version: V03
process: 'true'
punchh_key: PUNCHH_KEY_GOES_HERE
receipt_datetime: '2018-10-26T23:59:59-07:00'
sequence_no: '2124'
external_uid: a unique id
transaction_no: '4488'
by Redemption Code:
value:
redemption_code: REDEMPTION_CODE_GOES_HERE
cc_last4: '0000'
subtotal_amount: 7.86
receipt_amount: 7.86
employee_id: '135'
employee_name: EMPLOYEE_NAME_GOES_HERE
revenue_id: Dine In
revenue_code: '4'
menu_items:
- item_name: White rice
item_qty: 1
item_amount: 2.86
menu_item_type: M
menu_item_id: '3419'
menu_family: '800'
menu_major_group: '152'
serial_number: '1.0'
- item_name: Brown rice
item_qty: 1
item_amount: 7.86
menu_item_type: M
menu_item_id: '3418'
menu_family: '800'
menu_major_group: '152'
serial_number: '2.0'
- item_name: Free rice
item_qty: 1
item_amount: 2.86
menu_item_type: D
menu_item_id: '3419'
menu_family: '800'
menu_major_group: '152'
serial_number: '3.0'
pos_type: micros
pos_version: V03
process: 'true'
punchh_key: PUNCHH_KEY_GOES_HERE
receipt_datetime: '2018-10-26T23:59:59-07:00'
sequence_no: '2124'
external_uid: a unique id
transaction_no: '4488'
by QR Code:
value:
user_as_qrcode: QR_CODE_GOES_HERE
cc_last4: '0000'
subtotal_amount: 7.86
receipt_amount: 7.86
employee_id: '135'
employee_name: EMPLOYEE_NAME_GOES_HERE
revenue_id: Dine In
revenue_code: '4'
menu_items:
- item_name: White rice
item_qty: 1
item_amount: 2.86
menu_item_type: M
menu_item_id: '3419'
menu_family: '800'
menu_major_group: '152'
serial_number: '1.0'
- item_name: Brown rice
item_qty: 1
item_amount: 7.86
menu_item_type: M
menu_item_id: '3418'
menu_family: '800'
menu_major_group: '152'
serial_number: '2.0'
- item_name: Free rice
item_qty: 1
item_amount: 2.86
menu_item_type: D
menu_item_id: '3419'
menu_family: '800'
menu_major_group: '152'
serial_number: '3.0'
pos_type: micros
pos_version: V03
process: 'true'
punchh_key: PUNCHH_KEY_GOES_HERE
receipt_datetime: '2018-10-26T23:59:59-07:00'
sequence_no: '2124'
external_uid: a unique id
transaction_no: '4488'
/receipt_details:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: object
properties: {}
'400':
description: Not found
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: 'Required parameter missing or the value is empty: location_key'
'401':
description: Not authorized. Location token missing/invalid.
content:
application/json:
schema:
type: array
items:
type: string
examples:
default:
value:
- Invalid LocationKey
operationId: receipt_details
description: "This API call requires the API key as well as the business key to be sent in the HTTP\
\ Authorization header in the following format:\n\nAuthorization: Token token=LOCATION_KEY_GOES_HERE,\
\ btoken=BUSINESS_KEY_GOES_HERE\n\nwhere \n\nLOCATION_KEY_GOES_HERE is the API key (which is unique\
\ for a location) and BUSINESS_KEY_GOES_HERE is the business key (which is unique for a business).\
\ \n\nSee cURL examples for more details. \n\n1\\. The receipt_details endpoint can store the\
\ same receipt multiple times. If the POS client sends the same receipt (same punchh_key, same\
\ location_key) many times, we store all the versions of that same receipt, provided that the\
\ time between HTTP requests is 1 second or more. However, if the same receipt is received via\
\ multiple HTTP calls in about the same time (less than 1 second), the last one overwrites the\
\ previous version of that receipt.\n\n2\\. The endpoint accepts parameters in JSON as well.\n\
\n3\\. “isl receipt details” endpoint for ALL transactions.\n\n4\\. “checkins” for registered\
\ Punchh users wanting credit at the register via email, phone, QR code, or card number\n\n5\\\
. All transactions generate the barcode / Punchh key.\n\n6\\. All transactions print a barcode\
\ (?) on the receipt with that Punchh key.\n\n7\\. In the event of a network outage, we expect\
\ data that was to be sent to the ISL and check-in endpoints to be queued and sent later. We do\
\ not expect the redemptions to work in that case as there is no way to receive the amount from\
\ Punchh.\n"
summary: Store Receipt Details From POS
parameters:
- schema:
type: string
default: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE
in: header
name: Authorization
required: true
description: This is a combination of unique API key as well as business key (UUID) as the Authorization
header.
tags:
- Point Of Sale
x-stoplight:
id: a8dca5f5b047e
requestBody:
content:
application/json:
schema:
type: object
properties:
transaction_no:
type: integer
description: 'Transaction number of the receipt
'
vendor_transaction_no:
type: integer
description: Transaction number coming from online order, kiosk, or any other source
(required only if orders from other sources need to be linked to avoid double earnings
for the same order)
employee_id:
type: string
description: 'ID of employee
'
employee_name:
type: string
description: 'Name of employee
'
revenue_id:
type: string
description: 'ID of the POS function that designates the order fulfillment method. Example:
1 for dine-in; 2 for to-go/take out; 3 for call-in pickup; 4 for call-in deliver,
etc. Some POS call this revenue center, order method, order mode, etc. The values
assigned here should represent the way the order is fulfilled for the customer, not
the area in the restaurant where the order is placed (e.g., not bar, patio, dining
room, etc.).'
revenue_code:
type: string
description: Name of the POS function that designates the order fulfillment method (e.g.,
dine-in, to-go/take-out, call-in pickup, call-in deliver, etc). Some POS call this
Revenue Center, Order Method, Order Mode, etc. The values assigned here should represent
the way the order is fulfilled for the customer, not the area in the restaurant where
the order is placed (e.g., not bar, patio, dining room, etc.).
amount:
type: number
format: double
description: Order amount before any taxes (sum of all amounts minus any discounts).
Same as `receipt_amount` and `subtotal_amount`.
receipt_datetime:
type: string
description: Timestamp of the receipt per ISO 8601 format including TZ offset from UTC
(e.g., YYYY-MM-DDThh:mm:ss-±hh:mm)
cc_last4:
type: integer
description: Last 4 digits of the user's credit card number
payable:
type: number
description: Amount paid after applying discounts and adding any taxes or service charges.
For example, if the order amount is $10, the values of the `receipt_amount` and `subtotal_amount`
parameters will be $10. If a $2 discount is applied, `subtotal_amount` becomes $8.
However, if there are $3 service charges and $1 tax, the value of the `payable` parameter
becomes $12 (10 – 2 + 3 + 1 = 12).
format: double
pos_version:
type: string
description: 'Version of the client software
'
menu_items:
$ref: '#/components/schemas/menu_items'
punchh_key:
type: string
description: 'Punchh key (barcode without parity bit) of the receipt as generated by
the POS. Should be 11 or 12, 20 digits
'
pos_type:
type: string
description: "Name of the POS client that is sending the receipts. \n\nPossible values:\
\ A1 POS, Adora POS, Aloha, Aloha (Secure), Appetize, Auphan, Bite Kiosk, Brink, Comtrex,\
\ DataPoint, EPoint, Focus, Focus POS Systems, FoodTec, FoodTec V2, Gilbarco, GJS\
\ Kiosk, Granbury, Grubburr Kiosk, HoneyBakedHam POS, Hooters Hoa, HungerRush POS\
\ (Formerly Revention), InfoKING, Itwercs POS, iVend POS, Maitre’D, Marble Kiosk,\
\ Marblepos, Micros RES 3700, Micros Simphony, NCR ISS45 POS, NCR kiosk, NCR RPOS,\
\ NCR Silver, NCR Silver Essential, NCR Silver Pro, NCR Storepoint, Nextep kiosk,\
\ Onetap, PAR, PiZMET, Plum POS, Positouch, PosNet, Proprietary POS, Punchh Kiosk,\
\ Punchh Secure, QikServe Kiosk, Quardzilla, QuBeyond POS (Formerly Gusto), QuickServe,\
\ Ready (Pay-on-the-GO), Revel, SICOM, SpeedLine, Squirrel, Steak n Shake, TCPOS,\
\ Tevalis POS, Toast, Toast V3, Tray POS, Treatware, Verifone, VisualTouch POS, XPO\
\ Pay@Table, Xchangexec (Task retail), Xenial Cloud, Xpient, Xpient (Secure), Zonal\
\ POS"
status:
type: string
description: Receipt status. Use void to cancel/void a receipt. Not sending this optional
parameter is assumed that it is a valid receipt.
is_test:
type: boolean
description: 'Accepts any one of two values: 1 (True) - it is a test receipt, or 0 (False)
- it is a normal receipt.'
receipt_amount:
type: number
format: double
description: Order amount before taxes, calculated as the sum of all item amounts minus
any discounts. This is the amount used to calculate loyalty points/visits. The value
of this parameter should match `subtotal_amount`. For example, if the order amount
is $10, both `receipt_amount` and `subtotal_amount` will be 10. If a $2 discount is
applied, both will be 8.
subtotal_amount:
type: number
format: double
description: Order amount before taxes (sum of all item amounts minus any discounts).
Same as `receipt_amount`. For historical reasons, include this parameter along with
`receipt_amount` in the API request.
channel:
type: string
description: 'Channel through which the check-in was requested. Possible values are:
online_order, pos, web, mobile, dashboard, chatbot, kiosk.
Optional, though if not provided in the receipt details request, defaults to the value
used in the associated check-in call.'
required:
- transaction_no
- amount
- receipt_datetime
- payable
- pos_version
- menu_items
- punchh_key
- pos_type
- receipt_amount
- subtotal_amount
examples:
Request:
value:
transaction_no: 20095
vendor_transaction_no: 1095
employee_id: '5208'
employee_name: EMPLOYEE_NAME_GOES_HERE
revenue_id: Dine In
revenue_code: '4'
amount: 15.99
receipt_datetime: '2015-03-20T15:23:20+05:30'
cc_last4: 4321
receipt_amount: 15.99
subtotal_amount: 15.99
payable: 17.27
pos_version: V03
menu_items:
- item_name: Capastrami
item_qty: 1
item_amount: '15.99'
menu_item_type: M
menu_item_id: '1015'
menu_family: '52'
menu_major_group: '52'
serial_number: '1'
- item_name: Drink
item_qty: 1
item_amount: 2.86
menu_item_type: M
menu_item_id: '1234'
menu_family: '800'
menu_major_group: '152'
serial_number: '1'
- item_name: Free Drink with White Rice
item_qty: 1
item_amount: 2.86
menu_item_type: D
menu_item_id: '5678'
menu_family: '801'
menu_major_group: '153'
serial_number: '1'
punchh_key: PUNCHH_KEY_GOES_HERE
pos_type: Aloha
channel: POS
/api/pos/transactions:
post:
responses:
'200':
description: ''
headers: {}
content:
application/json:
schema:
type: object
properties:
anniversary:
type: string
format: date
description: Anniversary date of the user in `YYYY-MM-DD` format
avatar_remote_url:
type: string
description: Avatar URL of the user profile image
birthday:
type: string
format: date
description: 'Birth date of the user '
created_at:
type: string
format: date-time
description: Date time when the user was created in system in [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601)
format
email:
type: string
description: Email address of the user
fb_uid:
type: string
description: Facebook ID of the user
first_name:
type: string
description: First name of the user
gender:
type: string
description: Gender of the user
id:
type: integer
description: Unique ID of the user
last_name:
type: string
description: Last name of the user
updated_at:
type: string
description: Date/time when the user was last updated in system in [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601)
format
balance:
$ref: '#/components/schemas/balance'
address_line1:
type: string
description: Address of the user
zip_code:
type: string
description: Zip code of the user
phone:
type: string
description: Phone number of the user
rewards:
$ref: '#/components/schemas/rewards'
examples:
200 OK:
value:
anniversary: null
avatar_remote_url: URL_GOES_HERE
birthday: '1999-01-01'
created_at: '2012-11-21T10:52:32Z'
email: test@example.com
fb_uid: FB_UID_GOES_HERE
first_name: FIRST_NAME_GOES_HERE
gender: male
id: 542057
last_name: LAST_NAME_GOES_HERE
updated_at: '2015-05-15T18:53:38Z'
balance:
banked_rewards: '259.00'
membership_level: CAPADDICT
membership_level_id: 16
membership_program_id: null
net_balance: 259
net_debits: 0
pending_points: 0
points_balance: 59
signup_anniversary_day: 05/06
total_credits: 259
total_debits: 0
total_point_credits: 185
total_redeemable_visits: 12
expired_membership_level: CAPREHENSIVE
total_visits: 8
address_line1: null
zip_code: null
phone: null
rewards:
- created_at: '2015-05-08T13:30:18Z'
end_date_tz: '2016-05-08T06:59:59Z'
start_date_tz: '2015-05-07T18:30:00Z'
updated_at: '2015-05-08T13:30:18Z'
id: 619162
image: IMAGE_URL_GOES_HERE
description: Happy Birthday! Here's a 9" Sub for you to enjoy.
discount_amount: 0
name: 9" Sub!
points: 0
summary: Create Transaction
description: Use the Create Transaction API to create a transaction for a customer (provided this
functionality is enabled for the business by Punchh). The transaction registers the visit of the
customer at a certain store, but the customer will not earn loyalty (points, etc.). One of the
identifiers (`email`, `phone`, `card_number`, `user_as_qrcode`, `single_scan_token` or `redemption_code`)
must be provided along with `location_key`.
operationId: pos_create_transaction
tags:
- Point Of Sale
parameters:
- schema:
type: string
default: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE
in: header
name: Authorization
required: true
description: This is a combination of unique API key as well as business key (UUID) as the Authorization
header.
- schema:
type: string
default: en
in: header
name: Accept-Language
description: Short code for locale variant (e.g., fr-ca, es-ES, en-EN, etc.)
x-stoplight:
id: e214e96e0b2e9
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: Email address of the user
receipt_amount:
type: number
format: double
description: Order amount before taxes, calculated as the sum of all item amounts minus
any discounts. This is the amount used to calculate loyalty points/visits. The value
of this parameter should match `subtotal_amount`. For example, if the order amount
is $10, both `receipt_amount` and `subtotal_amount` will be 10. If a $2 discount is
applied, both will be 8.
subtotal_amount:
type: number
format: double
description: Order amount before taxes (sum of all item amounts minus any discounts).
Same as `receipt_amount`. For historical reasons, include this parameter along with
`receipt_amount` in the API request.
receipt_datetime:
type: string
format: date-time
description: Timestamp of receipt per ISO 8601 format including TZ offset from UTC (YYYY-MM-DDThh:mm:ss-±hh:mm)
sequence_no:
type: integer
description: Sequence number of check details required to be sent for the same transaction
punchh_key:
type: string
description: Unique Punchh key
transaction_no:
type: integer
description: Trasaction number
channel:
type: string
description: 'Channel through which the check-in was requested. Possible values are:
online_order, pos, web, mobile, dashboard, chatbot, kiosk.'
revenue_id:
type: string
description: 'ID of the POS function that designates the order fulfillment method. Example:
1 for dine-in; 2 for to-go/take out; 3 for call-in pickup; 4 for call-in deliver,
etc. Some POS call this revenue center, order method, order mode, etc. The values
assigned here should represent the way the order is fulfilled for the customer, not
the area in the restaurant where the order is placed (e.g., not bar, patio, dining
room, etc.).'
revenue_code:
type: string
description: Name of the POS function that designates the order fulfillment method (e.g.,
dine-in, to-go/take-out, call-in pickup, call-in deliver, etc). Some POS call this
Revenue Center, Order Method, Order Mode, etc. The values assigned here should represent
the way the order is fulfilled for the customer, not the area in the restaurant where
the order is placed (e.g., not bar, patio, dining room, etc.).
employee_id:
type: string
description: Employee ID
employee_name:
type: string
description: Name of the employee
payable:
type: number
description: Amount paid after applying discounts and adding any taxes or service charges.
For example, if the order amount is $10, the values of the `receipt_amount` and `subtotal_amount`
parameters will be $10. If a $2 discount is applied, `subtotal_amount` becomes $8.
However, if there are $3 service charges and $1 tax, the value of the `payable` parameter
becomes $12 (10 – 2 + 3 + 1 = 12).
format: double
menu_items:
$ref: '#/components/schemas/menu_items'
phone:
type: string
description: Phone number of the user
card_number:
type: string
description: Loyalty card number of the user
user_as_qrcode:
type: string
description: QR code of the user
single_scan_code:
type: string
description: Single scan code of the user to be used in the single scan flow.
amount:
type: number
format: double
description: 'Order amount before any taxes (sum of all amounts minus any discounts).
Same as `receipt_amount` and `subtotal_amount`. '
cc_last4:
type: integer
description: Last 4 digits of the user's credit card number
external_uid:
type: string
description: Unique ID generated by your system. We use this to prevent duplicates in
the case same transactions get triggered twice.
required:
- email
- receipt_amount
- subtotal_amount
- receipt_datetime
- punchh_key
- transaction_no
- channel
- payable
- menu_items
- amount
examples:
By Email:
value: "{\n \"email\":\"test@example.com\",\n \"receipt_amount\":40,\n \"receipt_datetime\"\
:\"2018-12-17T03:14:00-08:00\",\n \"sequence_no\":12345,\n \"punchh_key\":\"PUNCHH_KEY_GOES_HERE\"\
,\n \"transaction_no\":3502723201,\n \"subtotal_amount\":40,\n \"channel\":\"pos\"\
,\n \"revenue_id\":\"Dine In\",\n \"revenue_code\":\"4\",\n \"employee_id\":\"135\"\
,\n \"employee_name\":\"EMPLOYEE_NAME_GOES_HERE\",\n \"payable\":44.50,\n \"menu_items\"\
:\n [\n {\n \"item_name\":\"REG SIERRA MIST\",\n \
\ \"item_qty\":1,\n \"item_amount\":40,\n \"\
menu_item_type\":\"M\",\n \"menu_item_id\":\"2032\",\n \
\ \"menu_family\":\"106\",\n \"menu_major_group\":\"152\",\n \
\ \"serial_number\":\"1\"\n }\n ]\n}'"
By Phone:
value:
phone: '1111111111'
receipt_amount: 40
receipt_datetime: '2018-12-17T03:14:00-08:00'
sequence_no: '12345'
punchh_key: PUNCHH_KEY_GOES_HERE
transaction_no: '3502723201'
subtotal_amount: 40
revenue_id: Dine In
revenue_code: '4'
employee_id: '135'
employee_name: EMPLOYEE_NAME_GOES_HERE
menu_items:
- item_name: REG SIERRA MIST
item_qty: 1
item_amount: 40
menu_item_type: M
menu_item_id: '2032'
menu_family: '106'
menu_major_group: '152'
serial_number: '1'
/api/pos/payments:
post:
responses:
'200':
description: 'Successful response
'
content:
application/json:
schema:
type: object
properties:
first_name:
type: string
description: 'First name of the user
'
last_name:
type: string
description: 'Last name of the user
'
transaction_no:
type: string
description: "Unique identifier for the transaction request \n"
payment_reference_id:
type: string
description: 'Payment reference identifier from the payment processor
'
status:
type: string
description: "* processing - Intermediate status while processing payment (e.g., when\
\ the user approves payment)\n* unable_to_process - Failure with payment on the\
\ provider side \n* success - Payment success"
payment_type:
type: string
description: 'Payment type used for the single scan flow transaction (e.g., CreditCard,
recurring, etc.). See [Single Scan Flow](/docs/dev-portal-pos/54e5a71a7205c-single-scan-flow)
'
payment_transaction_id:
type: string
description: Transaction ID provided by the provider. This should be printed by the
POS on receipts for user reference.
response_message:
type: string
description: '* CREATED
* COMPLETED
'
created_at:
type: string
description: 'Date/time in ISO 8601 format
'
updated_at:
type: string
description: 'Date/time in ISO 8601 format
'
card_type:
type: string
x-stoplight:
id: 5ed838suvtt99
description: 'Payment card type as received from the payment service provider when
PAR Pay is the payment service provider of the business. For other payment service
providers, this parameter returns a null value. Possible values:
VIC - Visa
MCC - Mastercard
AXC - American Express Credit Card (AMEX)
DCC - Diners Club Credit Card
NVC - Discover Credit Card
JCB Card - JCB Card
GCC - Gift Card'
examples:
default:
value:
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
transaction_no: '5678'
payment_reference_id: '1562'
status: Processing
payment_type: CreditCard
payment_transaction_id: TRANSACTION_ID_GOES_HERE
response_message: CREATED
created_at: '2021-05-01T12:00:00.000Z'
updated_at: '2021-05-01T12:00:00.000Z'
card_type: VIC
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: Invalid Location Key
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: User not found
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: Invalid payment type
tags:
- Payments
summary: Create Payment
description: "The Create Payment API commits the payment via the PAR Payment Services Gateway.\n\
\nFor more information, see: [Creating Payment](/docs/dev-portal-pos/fc53c158c75c6-pos-payments#creating-payments)\n\
\n### Headers\n\n#### `Token token`\nThe Location API key from the Punchh platform located under\
\ **Store Locations** > **All Store Locations** > **[Choose your location]** > **POS tab** > **Location\
\ key**\n#### `btoken`\nThe API key for the business, located in the Punchh platform. **Note:**\
\ This can be obtained only from Punchh administrators (e.g., Customer Success Manager). \n\n\
_For assistance with any API keys, reach out to your Punchh Customer Success Manager (CSM) or\
\ Implementation Manager (if applicable)._\n"
operationId: pos_create_payment_ssf
parameters:
- schema:
type: string
default: Token token="LOCATION_KEY_GOES_HERE" btoken="BUSINESS_KEY_GOES_HERE"
in: header
name: Authorization
description: '**Token token** Location API key from the Punchh platform. **btoken** Business API
key from the Punchh platform.'
- schema:
type: string
default: application/json
in: header
name: Content-Type
description: Set to **application/json**
x-stoplight:
id: 41617c28303e8
requestBody:
content:
application/json:
schema:
type: object
properties:
payment_type:
type: string
description: 'Enter one of the following values for the Punchh single scan flow payment:
* Credit Card = CreditCard
* Recurring = recurring
See [Single Scan Flow](/docs/dev-portal-pos/54e5a71a7205c-single-scan-flow)'
single_scan_code:
type: string
description: Single scan code of the user is a required parameter when the user makes
a payment through the single scan flow. The single scan code identifies the user making
the payment.
payable:
type: integer
description: 'Total amount the customer paid after taxes, service charges, and discounts
'
pos_type:
type: string
description: 'Name of the POS system
'
pos_version:
type: string
description: 'Version number of the POS system
'
cc_last4:
type: string
description: 'Last 4 digits of the user''s credit card number
'
employee_id:
type: string
description: 'POS employee ID
'
employee_name:
type: string
description: 'POS employee name
'
revenue_id:
type: string
description: "ID of the POS function that designates order fulfillment. \nAlso known\
\ as order mode or order type (e.g., dine in, take out)\n\nNot be to confused with\
\ revenue center (e.g., bar, patio, dining room)\n"
revenue_code:
type: string
description: "Name of the POS function that designates order fulfillment. \nAlso known\
\ as order mode or order type (e.g., dine in, take out)\n\nNot be to confused with\
\ revenue center (e.g., bar, patio, dining room)\n"
amount:
type: number
description: 'Receipt amount excluding taxes and inclusive of discounts
'
subtotal_amount:
type: number
description: 'Receipt amount excluding taxes and inclusive of discounts
'
currency_code:
type: string
description: 'Code of the currency in ISO 4217 format
'
receipt_datetime:
type: string
description: 'Date/time when the check was opened in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)
'
punchh_key:
type: string
description: 'Value of the [Punchh QR code or Punchh barcode](/docs/dev-portal-pos/33262bfade37e-implement-the-punchh-barcode-algorithm) '
transaction_no:
type: string
description: "Unique identifier for the transaction request. Regardless of success or\
\ failure, only one transaction number per request. This is NOT to be confused with\
\ the POS check number. \n"
menu_items:
$ref: '#/components/schemas/menu_items'
required:
- payment_type
- single_scan_code
- payable
- pos_type
- pos_version
- amount
- subtotal_amount
- currency_code
- receipt_datetime
- punchh_key
- transaction_no
- menu_items
examples:
Payment via SSF Flow QR Code:
value:
payment_type: CreditCard
single_scan_code: SINGLE_SCAN_CODE_GOES_HERE
payable: 46
pos_type: Aloha
pos_version: v1.0
cc_last4: ''
employee_id: '01'
employee_name: EMPLOYEE_NAME_GOES_HERE
revenue_id: '111'
revenue_code: CODE_GOES_HERE
amount: 12.72
subtotal_amount: 12.72
currency_code: USD
receipt_datetime: '2020-02-25T20:10:45+05:30'
punchh_key: PUNCHH_KEY_GOES_HERE
transaction_no: '3387553'
menu_items:
- item_name: White rice
item_qty: 1
item_amount: 2.86
menu_item_type: M
menu_item_id: '3419'
menu_family: '800'
menu_major_group: '152'
- item_name: Brown rice
item_qty: 1
item_amount: 7.86
menu_item_type: M
menu_item_id: '3418'
menu_family: '800'
menu_major_group: '152'
description: ''
put:
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
type: object
properties:
first_name:
type: string
description: First name of the user
last_name:
type: string
description: Last name of the user
transaction_no:
type: string
description: Unique identifier for the transaction request
payment_reference_id:
type: string
description: Payment reference identifier from the payment processor
status:
type: string
description: 'Punchh payment processing status. Possible values:
* processing: An intermediate status indicating that the payment is being processed
(e.g., when the user approves the payment)
* processed: Indicates that the POS has sent the payment status as complete, and
the system has marked the payment as processed
* unable_to_process: Indicates a failure in processing the payment on the provider''s
side
* success: Indicates that the payment was successfully completed
* unable_to_refund: Indicates that the system was unable to refund the payment
* refunded: Indicates that the payment has been successfully refunded
* refunding: An intermediate status between success/unused and refunded/not refunded'
response_message:
type: string
description: Status as returned by the provider for payments
payment_type:
type: string
description: Payment type used for the single scan flow transaction (e.g., CreditCard,
recurring, etc.). See [Single Scan Flow](/docs/dev-portal-pos/54e5a71a7205c-single-scan-flow)
created_at:
type: string
description: Date/time in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)
card_type:
type: string
x-stoplight:
id: 1asbbrfv1egzb
description: 'Payment card type as received from the payment service provider when
PAR Pay is the payment service provider of the business. For other payment service
providers, this parameter returns a null value. Possible values:
VIC - Visa
MCC - Mastercard
AXC - American Express Credit Card (AMEX)
DCC - Diners Club Credit Card
NVC - Discover Credit Card
JCB Card - JCB Card
GCC - Gift Card'
examples:
default:
value:
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
transaction_no: 352083094-10040
payment_reference_id: '14000'
status: processed
response_message: COMPLETED
payment_type: CreditCard
created_at: '2020-12-18T07:05:11Z'
card_type: VIC
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: Invalid Location Key
'404':
description: Not Found
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: User not found
'422':
description: Unprocessable Entity
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: Invalid payment type
description: "The Update Payment Status API updates the payment status in the Punchh platform after\
\ the POS marks the payment as complete. \n\nFor more information, see: [Updating Payment Status](/docs/dev-portal-pos/fc53c158c75c6-pos-payments#updating-payments)\n\
\n### Headers\n\n#### `Token token` \nThe Location API key from the Punchh platform located under\
\ **Store Locations** > **All Store Locations** > **[Choose your location]** > **POS tab** > **Location\
\ key**\n#### `btoken`\nThe API key for the business, located in the Punchh platform. **Note:**\
\ This can be obtained only from Punchh administrators (e.g., Customer Success Manager). \n\n\
_For assistance with any API keys, reach out to your Punchh Customer Success Manager (CSM) or\
\ Implementation Manager (if applicable)._\n"
summary: Update Payment Status
operationId: pos_update_payments
tags:
- Payments
parameters:
- schema:
type: string
default: Token token="LOCATION_KEY_GOES_HERE" btoken="BUSINESS_KEY_GOES_HERE"
in: header
name: Authorization
description: '**Token token** Location API key from the Punchh platform. **btoken** Business API
key from the Punchh platform.'
- schema:
type: string
default: application/json
in: header
name: Content-type
description: Set to **aplication/json**
x-stoplight:
id: 61f48ba9babb2
requestBody:
content:
application/json:
schema:
type: object
properties:
payment_reference_id:
type: string
x-stoplight:
id: 42dfle71x6g2a
description: Payment reference identifier from the payment processor. This is obtained
from the response of the [Create Payment API](/docs/dev-portal-pos/b3A6NTAyODM5Mjg-create-a-payment).
payment_type:
type: string
description: "Enter one of the following values for the Punchh single scan flow payment:\
\ \n* Credit Card = CreditCard\n* Recurring = recurring\nSee [Single\
\ Scan Flow](/docs/dev-portal-pos/54e5a71a7205c-single-scan-flow)"
email:
type: string
description: Email address of the user. Required for loyalty guests. In the case of
single scan flow, email is not a required parameter.
status:
type: string
description: Send "completed" to update the payment status and finalize payment processing.
Use the [Get Payment Status](/docs/dev-portal-pos/63dd6a196a566-get-payment-status)
endpoint to obtain the current status and status updates.
single_scan_code:
type: string
description: Single scan code of the user is a required parameter when the user makes
a payment through the single scan flow. The single scan code identifies the user making
the payment.
required:
- payment_type
- email
- status
examples:
Example:
value:
payment_type: CreditCard
email: test@example.com
status: completed
single_scan_code: SINGLE_SCAN_CODE_GOES_HERE
delete:
responses:
'200':
description: ''
headers: {}
content:
application/json:
schema:
type: array
items:
type: object
properties:
first_name:
type: string
description: First name of the user
last_name:
type: string
description: Last name of the user
transaction_no:
type: string
description: Unique identifier for the transaction request
payment_reference_id:
type: string
description: Payment reference identifier from the payment processor
status:
type: string
description: 'Punchh status returned as: processing, processed, unable_to_process,
success, unable_to_refund, refunded, refunding'
response_message:
type: string
description: 'Status returned by the provider for payments as: AWAITING_USER_INPUT,
SUCCESS, ABORTED, FAILED, CANCELLED, CREATED, COMPLETED
'
payment_type:
type: string
description: Payment type used for the single scan flow transaction (e.g., CreditCard,
recurring, etc.). See [Single Scan Flow](/docs/dev-portal-pos/54e5a71a7205c-single-scan-flow)
created_at:
type: string
description: Date/time in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)
updated_at:
type: string
description: Date/time in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)
payment_transaction_id:
type: string
description: Transaction ID provided by the provider. This should be printed by
the POS on receipts for user reference.
card_type:
type: string
x-stoplight:
id: qft5xmuo5royq
description: 'Payment card type as received from the payment service provider when
PAR Pay is the payment service provider of the business. For other payment service
providers, this parameter returns a null value. Possible values:
VIC - Visa
MCC - Mastercard
AXC - American Express Credit Card (AMEX)
DCC - Diners Club Credit Card
NVC - Discover Credit Card
JCB Card - JCB Card
GCC - Gift Card'
examples:
Example:
value:
- first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
transaction_no: 352083094-10040
payment_reference_id: '14000'
status: unable_to_process
response_message: CANCELLED
payment_type: CreditCard
created_at: '2020-12-18T07:05:11Z'
card_type: VIC
summary: Void/Cancel Payment
operationId: pos_void_payments
tags:
- Payments
description: "The Void/Cancel Payments API voids the payment request. \n\nFor more information,\
\ see: [Voiding Payments](/docs/dev-portal-pos/additional-topics/pos-payments#voiding-payment)\n\
\n### Headers\n\n#### `Token token`\nThe Location API key from the Punchh platform located under\
\ **Store Locations** > **All Store Locations** > **[Choose your location]** > **POS tab** > **Location\
\ key** \n#### `btoken`\nThe API key for the business, located in the Punchh platform. **Note:**\
\ This can be obtained only from Punchh administrators (e.g., Customer Success Manager). \n\n\
_For assistance with any API keys, reach out to your Punchh Customer Success Manager (CSM) or\
\ Implementation Manager (if applicable)._"
parameters:
- schema:
type: string
default: Token token="LOCATION_KEY_GOES_HERE" btoken="BUSINESS_KEY_GOES_HERE"
in: header
name: Authorization
description: '**Token token** Location API key from the Punchh platform. **btoken** Business API
key from the Punchh platform.'
- schema:
type: string
default: application/json
in: header
name: Content/type
description: Set to **application/json**
x-stoplight:
id: 8712860d53e95
requestBody:
content:
application/json:
schema:
type: object
properties:
payment_reference_id:
type: string
description: Payment reference identifier from the payment processor. This is obtained
from the response of the [Create Payment API](/docs/dev-portal-pos/b3A6NTAyODM5Mjg-create-a-payment).
payment_type:
type: string
description: "Enter one of the following values for the Punchh single scan flow payment:\
\ \n* Credit Card = CreditCard\n* Recurring = recurring\nSee [Single\
\ Scan Flow](/docs/dev-portal-pos/54e5a71a7205c-single-scan-flow)"
transaction_no:
type: string
description: "Unique identifier for the transaction request. Regardless of success or\
\ failure, only one transaction number per request. This is NOT to be confused with\
\ the POS check number. \n"
examples:
default:
value: {}
/api/pos/payments/status:
get:
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
type: object
properties:
first_name:
type: string
description: First name of the user
last_name:
type: string
description: Last name of the user
transaction_no:
type: string
description: Unique identifier for the transaction request
payment_reference_id:
type: string
description: Payment reference identifier from the payment processor
status:
type: string
description: 'Punchh payment processing status. Possible values:
* processing: An intermediate status indicating that the payment is being processed
(e.g., when the user approves the payment)
* processed: Indicates that the POS has sent the payment status as complete, and
the system has marked the payment as processed
* unable_to_process: Indicates a failure in processing the payment on the provider''s
side
* success: Indicates that the payment was successfully completed
* unable_to_refund: Indicates that the system was unable to refund the payment
* refunded: Indicates that the payment has been successfully refunded
* refunding: An intermediate status between success/unused and refunded/not refunded'
response_message:
type: string
description: Status as returned by the provider for payments
payment_type:
type: string
description: 'Payment type used for the single scan flow transaction (e.g., CreditCard,
recurring, etc.). See [Single Scan Flow](/docs/dev-portal-pos/54e5a71a7205c-single-scan-flow)
'
created_at:
type: string
description: Date/time in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)
updated_at:
type: string
description: Date/time in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)
payment_transaction_id:
type: string
description: Transaction ID provided by the provider. This should be printed by
the POS on receipts for user reference.
card_type:
type: string
x-stoplight:
id: o5rpdm29k03v1
description: "Payment card type as received from the payment service provider when\
\ PAR Pay is the payment service provider of the business. For other payment service\
\ providers, this parameter returns a null value. Possible values:\n\nVIC - Visa\n\
\nMCC - Mastercard\n\nAXC - American Express Credit Card (AMEX) \n\nDCC - Diners\
\ Club Credit Card \n\nNVC - Discover Credit Card\n\nJCB Card - JCB Card\n\nGCC\
\ - Gift Card"
examples:
Current Business Day:
value:
- first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
transaction_no: 014038904-10012
payment_reference_id: '14232'
status: success
response_message: COMPLETED
payment_type: CreditCard
payment_transaction_id: TRANSACTION_ID_GOES_HERE
created_at: '2021-01-14T18:48:39Z'
updated_at: '2020-11-19T06:25:59Z'
card_type: 'null'
- first_name: null
last_name: null
transaction_no: 014029904-10011
payment_reference_id: '14231'
status: success
response_message: SUCCESS
payment_type: CreditCard
payment_transaction_id: TRANSACTION_ID_GOES_HERE
created_at: '2021-01-14T16:18:35Z'
updated_at: '2020-11-19T06:25:59Z'
card_type: 'null'
- first_name: null
last_name: null
transaction_no: 014029819-10010
payment_reference_id: '14230'
status: success
response_message: SUCCESS
payment_type: CreditCard
payment_transaction_id: TRANSACTION_ID_GOES_HERE
created_at: '2021-01-14T16:17:09Z'
updated_at: '2020-11-19T06:25:59Z'
card_type: 'null'
Specific Business Day:
value:
- first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
transaction_no: 352080019-10037
payment_reference_id: '13998'
status: success
response_message: COMPLETED
payment_type: CreditCard
created_at: '2020-12-18T06:13:55Z'
updated_at: '2020-11-19T06:25:59Z'
card_type: VIC
payment_transaction_id: TRANSACTION_ID_GOES_HERE
- first_name: null
last_name: null
transaction_no: 352074560-10033
payment_reference_id: '13997'
status: success
response_message: SUCCESS
payment_type: CreditCard
created_at: '2020-12-18T04:42:52Z'
updated_at: '2020-11-19T06:25:59Z'
card_type: VIC
payment_transaction_id: TRANSACTION_ID_GOES_HERE
- first_name: null
last_name: null
transaction_no: 352074486-10032
payment_reference_id: '13996'
status: success
response_message: SUCCESS
payment_type: CreditCard
created_at: '2020-12-18T04:41:37Z'
updated_at: '2020-11-19T06:25:59Z'
card_type: VIC
payment_transaction_id: TRANSACTION_ID_GOES_HERE
payment_reference_id:
value:
first_name: FIRST_NAME_GOES_HERE
last_name: LAST_NAME_GOES_HERE
transaction_no: 352080019-10037
payment_reference_id: '13998'
status: success
response_message: COMPLETED
payment_type: CreditCard
created_at: '2020-12-18T06:13:55Z'
updated_at: '2020-11-19T06:25:59Z'
card_type: VIC
payment_transaction_id: TRANSACTION_ID_GOES_HERE
'401':
description: '"Invalid Location Key"'
'422':
description: '"Incorrect reference_id"'
summary: Get Payment Status
description: "The Get Payment Status API retrieves the correct status and response message to know\
\ how to handle the next step (e.g., success--apply payment, cancel--payment cancelled by user,\
\ etc.). \n\nFor more information, see: [Getting Payment Status](/docs/dev-portal-pos/fc53c158c75c6-pos-payments#getting-payment-status)\n\
\n### Headers\n\n#### `Token token` \nThe Location API key from the Punchh platform located under\
\ **Store Locations** > **All Store Locations** > [**Choose your location**] > **POS tab** > **Location\
\ key**\n\n#### `btoken`\nThe API key for the business, located in the Punchh platform. **Note:**\
\ This can be obtained only from Punchh administrators (e.g., Customer Success Manager). \n\n\
_For assistance with any API keys, reach out to your Punchh Customer Success Manager (CSM) or\
\ Implementation Manager (if applicable)._\n"
tags:
- Payments
operationId: pos_get_payments_status
parameters:
- schema:
type: string
default: Token token="LOCATION_KEY_GOES_HERE" btoken="BUSINESS_KEY_GOES_HERE"
in: header
name: Authorization
description: '**Token token** Location API key from the Punchh platform. **btoken** Business API
key from the Punchh platform.'
- schema:
type: string
default: application/json
in: header
name: Content-Type
description: Set to **application/json**.
x-stoplight:
id: 63dd6a196a566
requestBody:
content:
application/json:
schema:
type: object
properties:
payment_date:
type: string
x-stoplight:
id: 83kv0ru0jct24
description: Payment date/time in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)
format: date-time
payment_reference_id:
type: string
x-stoplight:
id: mydgbjrdiz1eq
description: Payment reference identifier from the payment processor. This is obtained
from the response of the [Create Payment API](/docs/dev-portal-pos/b3A6NTAyODM5Mjg-create-a-payment).
When used with the **payment_date** parameter, returns any payment with this reference
ID on the specified date. Without payment_date, the API returns any payment with the
corresponding reference ID.
examples:
Example:
value:
payment_date: '2019-08-24T14:15:22Z'
payment_reference_id: '14000'
/api/pos/payments/refund:
post:
responses:
'200':
description: ''
content:
application/json:
schema:
type: array
items:
type: object
properties:
first_name:
type: string
description: First name of the user
x-nullable: true
last_name:
type: string
description: Last name of the user
x-nullable: true
transaction_no:
type: string
description: Unique identifier for the transaction request
payment_reference_id:
type: string
description: Payment reference identifier from the payment processor
status:
type: string
description: Punchh status returned as processing, processed, unable_to_process,
success, unable_to_refund, refunded, refunding
response_message:
type: string
description: 'Status returned by the provider for payments as AWAITING_USER_INPUT,
SUCCESS, ABORTED, FAILED, CANCELLED, CREATED, COMPLETED
'
payment_type:
type: string
description: Payment type used for the single scan flow transaction (e.g., CreditCard,
recurring, etc.). See [Single Scan Flow](/docs/dev-portal-pos/54e5a71a7205c-single-scan-flow)
created_at:
type: string
description: Date/time in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)
updated_at:
type: string
description: Date/time in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)
payment_transaction_id:
type: string
description: Transaction ID provided by the provider. This should be printed by
the POS on receipts for user reference.
card_type:
type: string
x-stoplight:
id: vze4lqnoj773v
description: 'Payment card type as received from the payment service provider when
PAR Pay is the payment service provider of the business. For other payment service
providers, this parameter returns a null value. Possible values:
VIC - Visa
MCC - Mastercard
AXC - American Express Credit Card (AMEX)
DCC - Diners Club Credit Card
NVC - Discover Credit Card
JCB Card - JCB Card
GCC - Gift Card'
examples:
default:
value:
first_name: null
last_name: null
transaction_no: '3387553'
payment_reference_id: '784733681950555245904'
status: refunded
response_message: COMPLETED
payment_type: CreditCard
created_at: '2021-02-01T20:58:10Z'
updated_at: '2021-02-08T05:40:09Z'
payment_transaction_id: TRANSACTION_ID_GOES_HERE
card_type: VIC
description: "After an accepted/processed payment, you can use the Refund Payments API to refund\
\ the payment. \n\nFor more information, see [Refunding Payment](/docs/dev-portal-pos/additional-topics/pos-payments#refunding-payment)\n\
\n### Headers\n\n#### `Token token` \nThe Location API key from the Punchh platform located under\
\ **Store Locations** > **All Store Locations** > [**Choose your location**] > **POS tab** > **Location\
\ key**\n\n#### `btoken`\nThe API key for the business, located in the Punchh platform. Note:\
\ This can be obtained only from Punchh administrators (e.g., Customer Success Manager).\n\n_For\
\ assistance with any API keys, reach out to your Punchh Customer Success Manager (CSM) or Implementation\
\ Manager (if applicable)._\t"
operationId: pos_refund_payments
tags:
- Payments
parameters:
- schema:
type: string
default: Token token="LOCATION_KEY_GOES_HERE" btoken="BUSINESS_KEY_GOES_HERE"
in: header
name: Authorization
description: '**Token token** Location API key from the Punchh platform. **btoken** Business API
key from the Punchh platform.'
- schema:
type: string
default: application/json
in: header
name: Content-type
description: Set to **application/json**
summary: Refund Payment
x-stoplight:
id: e0ad46ac95f92
requestBody:
content:
application/json:
schema:
type: object
properties:
payment_type:
type: string
x-stoplight:
id: 9rfc3ofelpz8d
description: "Enter one of the following values for the Punchh single scan flow payment:\
\ \n* Credit Card = CreditCard\n* Recurring = recurring\nSee [Single\
\ Scan Flow](/docs/dev-portal-pos/54e5a71a7205c-single-scan-flow)"
payment_reference_id:
type: string
x-stoplight:
id: nf8p86c6z6ecr
description: Payment reference identifier from the payment processor. This is obtained
from the response of the [Create Payment API](/docs/dev-portal-pos/b3A6NTAyODM5Mjg-create-a-payment).
transaction_no:
type: string
x-stoplight:
id: 9vcw8ilu76ucs
description: Unique identifier for the transaction request. Regardless of success or
failure, only one transaction number per request. This is NOT to be confused with
the POS check number.
required:
- payment_type
- payment_reference_id
- transaction_no
examples:
default:
value:
payment_type: CreditCard
payment_reference_id: '784733681950555245904'
transaction_no: '3387553'
/api/pos/users/balance:
get:
summary: Fetch Account Balance
tags:
- Point Of Sale
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
account_balance:
$ref: '#/components/schemas/account_balance'
subscriptions:
$ref: '#/components/schemas/user_subscriptions'
examples:
Subscriptions discounts shown for Points unlock redeemables:
value:
account_balance:
net_balance: 108
points_balance: 8
net_debits: 100
pending_points: 0
total_credits: 208
total_debits: '100.0'
total_point_credits: 208
subscriptions:
- subscription_id: 39
benefits:
- benefit_id: 1
benefit_type: sku_discounting
discounts:
- discount_id: 42
threshold: 2
discounted_value: $0.00
discounted_quantity: 0
threshold_discount: 2
discount_type: '%_or_$_off'
Subscriptions discounts shown for Visit-based:
value:
account_balance:
total_redeemable_visits: 210
total_visits: 201
unredeemed_cards: 0
subscriptions:
- subscription_id: 39
benefits:
- benefit_id: 1
benefit_type: sku_discounting
discounts:
- discount_id: 42
threshold: 2
discounted_value: $0.00
discounted_quantity: 0
threshold_discount: 2
discount_type: '%_or_$_off'
Subscriptions discounts shown for Points convert to currency:
value:
account_balance:
banked_rewards: '3339.69'
subscriptions:
- subscription_id: 39
benefits:
- benefit_id: 1
benefit_type: sku_discounting
discounts:
- discount_id: 42
threshold: 2
discounted_value: $0.00
discounted_quantity: 0
threshold_discount: 2
discount_type: '%_or_$_off'
Subscriptions discounts shown for Points to Manual:
value:
account_balance:
banked_currency: 35
balance: 20
subscriptions:
- subscription_id: 39
benefits:
- benefit_id: 1
benefit_type: sku_discounting
discounts:
- discount_id: 42
threshold: 2
discounted_value: $0.00
discounted_quantity: 0
threshold_discount: 2
discount_type: '%_or_$_off'
'400':
description: 'Bad Request: Missing user ID parameter or value is empty'
content:
application/json:
schema:
type: object
properties:
error:
type: string
examples:
default:
value:
error: 'Required parameter missing or the value is empty: user_id'
'404':
description: 'Not Found: Sending invalid user ID'
content:
application/json:
schema:
type: array
items: {}
examples:
default:
value:
- User not found
operationId: get-api-pos-users-balance
description: "The API fetches the account balance details of the user based on the program type\
\ of the business and different subscriptions if purchased by the user along with their benefits\
\ and discounts. \n\nNote: \n\n1\\. The `net_balance`, `points_balance`, `net_debits`, `pending_points`,\
\ `total_credits`, `total_debits`, and `total_points_credits` parameters are applicable if the\
\ program type is Points unlock redeemables. \n\n2\\. The `total_redeemable_visits`, `total_visits`,\
\ and `unredeemed_cards` parameters are applicable if the program type is Visit-based. \n\n3\\\
. The `banked_rewards` parameter is applicable if the program type is Points convert to currency.\n\
\n4\\. The `banked_currency` and `balance` parameters are applicable if the program type is Points\
\ to Manual."
parameters:
- $ref: '#/components/parameters/Authorization'
x-stoplight:
id: fbbeada074c40
requestBody:
content:
application/json:
schema:
type: object
properties:
user_id:
type: string
description: System-generated unique ID of the user
discount_type:
type: array
description: Type of discount for which discounts are returned in the response. The
valid value for this parameter is ‘subscription’.
items:
type: string
enum:
- subscription
examples:
default:
value:
user_id: '111111'
discount_type:
- subscription
description: ''
tags:
- name: Point Of Sale
- name: Payments
openapi: 3.1.1
servers:
- url: https://SERVER_NAME_GOES_HERE.punchh.com
components:
schemas:
account_balance:
title: Account Balance (Object)
x-stoplight:
id: 3miulxn3op5yf
type: object
description: The object contains the user's account balance details based on the program type of
the business.
properties:
net_balance:
type: number
description: Net available balance of the user account
points_balance:
type: number
description: Loyalty points balance of the user account
net_debits:
type: number
description: Net debits of the user
pending_points:
type: number
description: Pending points of the user. This value is set only if the Pending Points setting
is enabled for the business.
total_credits:
type: number
format: double
description: Total credits of the current account
total_debits:
type: number
description: Total debits of the current account
total_point_credits:
type: number
description: Total points credits of the user
total_redeemable_visits:
type: number
description: Total redeemable visits of the user
total_visits:
type: number
description: Total number of loyalty visits
unredeemed_cards:
type: number
description: Number of unredeemed cards of the user
banked_currency:
type: number
description: Banked currency balance of the user
balance:
type: number
description: Fuel balance of the user
banked_rewards:
type: number
description: 'Banked rewards of the user account. '
x-examples:
Points unlock redeemables:
net_balance: 108
points_balance: 8
net_debits: 100
pending_points: 0
total_credits: 208
total_debits: '100.0'
total_point_credits: 208
Points convert to currency:
banked_rewards: '3339.69'
Visit-based:
total_redeemable_visits: 210
total_visits: 201
unredeemed_cards: 0
Points to Manual:
banked_currency: 35
balance: 20
balance:
type: object
title: Balance (Object)
description: Account balance of the user
x-stoplight:
id: 2860cdb5c385a
properties:
banked_rewards:
type: string
x-stoplight:
id: s9azb7sq7v7a7
description: Banked rewards of the user account. This value is set only if the program type
is banked rewards based; else it will be 0.
expired_membership_level:
type: string
x-stoplight:
id: 7ll6shmnyoq1k
description: Expired membership level
x-nullable: true
initial_visits:
type: integer
x-stoplight:
id: o56ro09d36949
description: Captures all of the visits that the guest made up to the time of migration
membership_level:
type: string
x-stoplight:
id: rbizsxqgeuvmv
description: Membership level of the user
x-nullable: true
membership_level_id:
type: string
x-stoplight:
id: 6imlg0oigvm61
description: Membership level ID of the user
x-nullable: true
net_balance:
type: number
x-stoplight:
id: xjqs7fj807lp3
description: Net available balance of the current account. This value always shows the available
balance of the user, whether visits, banked rewards, or points.
net_debits:
type: number
x-stoplight:
id: 1esd934uke4fv
description: Net debits of the user
pending_points:
type: integer
x-stoplight:
id: uvygafo95ytjg
description: Pending points of the user
points_balance:
type: integer
x-stoplight:
id: 5xaa0f7l7b341
description: 'Returns the points balance of the user account. This value gets reset based on
the point conversion value once reached, as configured in the Punchh platform.
Note: It will increase only as per points earned, and it resets once the threshold value is
reached to convert points into currency or reward.'
signup_anniversary_day:
type: string
x-stoplight:
id: 5i2amz3lrt52e
description: Sign-up anniversary day of the current account
total_credits:
type: number
format: double
x-stoplight:
id: oi85i9hfuacvy
description: Total credits of the current account
total_debits:
type: string
x-stoplight:
id: rhkeop02nmk3x
description: Total debits of the current account
total_point_credits:
type: integer
x-stoplight:
id: zfegz75tgm5oy
description: Total points credits of the user
total_redeemable_visits:
type: integer
x-stoplight:
id: 6kdl323x4lq6c
description: Total redeemable visits of the user
total_visits:
type: integer
x-stoplight:
id: tionfl6ij3p87
description: Total number of loyalty visits
unredeemed_cards:
type: string
x-stoplight:
id: izzbyzykv9r7x
description: Number of unredeemed cards of a user. This value is set only if the program type
is visit-based; else it will be 0.
converted_category_balances:
type: array
title: Converted Category Balances (Array Object)
x-internal: false
x-stoplight:
id: 312d2f1c0a2d1
items:
x-stoplight:
id: ybdja8636otq1
type: object
properties:
name:
type: string
x-stoplight:
id: 98igz82l399a5
description: Name of the reward (e.g., Fun Cash, Fuel, Charity, etc.)
balance:
type: string
x-stoplight:
id: t1vdvli81llnz
description: Balance available for the user for this type of reward
discount_type:
type: string
x-stoplight:
id: 9jn5edlti8czo
description: 'Type of discount. Possible values are: “currency", "fuel_discount", or "charity”
depending on the platform configuration.'
menu_items:
type: array
title: Menu Items (Array Object)
description: The array contains one or more menu item objects added to an order. You send one of
these arrays per API call. See [How To Send Menu Items to Punchh](/docs/dev-portal-pos/5277d762b8c6d-how-to-send-menu-items-to-punchh)
x-examples: []
x-stoplight:
id: 999c1d2fce704
items:
x-stoplight:
id: ua9wyw12mqzms
type: object
properties:
item_name:
type: string
x-stoplight:
id: rwiq1fr8m64uz
description: Name of the menu item as it displays in the POS catalog
menu_item_id:
type: string
x-stoplight:
id: puslpoyol0fta
description: Unique identifier that your POS system uses for the item
item_qty:
type: string
x-stoplight:
id: 09u6t66ixp3l5
description: Quantity ordered by the customer. If the item is a modifier (such as extra cheese
on a pizza base item), make sure the quantity reflects the total number of base items included.
For example, if you have a pizza base item with a certain item ID and a quantity of two,
and the pizzas each have an extra cheese modifier added to them, then the modifier quantity
should be two to account for the modifier across both pizzas. This applies only to base
items of the same ID. If different base items include the same modifier, you do not need
to sum the modifiers.
item_amount:
type: number
x-stoplight:
id: enlxfkrx0rn4y
description: The total price of the line item or the amount of the discount that you applied
to an item. In case of multiple quantities, this means the sum total of all item amounts.
Always represent this value as a positive number, even when the item is a discount.
format: float
menu_item_type:
type: string
x-stoplight:
id: s9g0hrpzxtlmj
description: 'The classification of the item. Choose from the following types based on the
item:
M - Menu item ( + or - )
D - Discount (negative). Either internal or Punchh will always evaluate lines as ( - ) regardless
of the sign assigned in the API call
S - Service item. Any item representing money received that is not a sale. For example,
service charges, delivery fees, tips, purchase of gift cards/certificates, etc. In the case
of single scan flow, send a menu item with service menu item type for the selected tip amount.
T - Tax item. Taxes of all sorts
P - Payment item. Visa, MasterCard, cash, gift card/certificate (when used to pay for the
order)'
menu_major_group:
type: string
x-stoplight:
id: vfop7bejx00ec
description: The major group that the item belongs to. The major group is the parent category
for the item. Even though the parameter is required, you can pass it in the request with
a blank value. You can leave this blank if the item does not belong to a major group.
menu_family:
type: string
x-stoplight:
id: 1fv71gjx6ks8i
description: The family that the item belongs to. The family is the subcategory for the item.
Even though the parameter is required, you can pass it in the request with a blank value.
You can leave this blank if the item does not belong to a family.
serial_number:
type: string
x-stoplight:
id: iqs1adyj21swi
description: A serialized number that differentiates distinct items on the check. The purpose
of this field is to identify which items on the check are base items and which items are
modifiers to the base items. For example, a main menu item (such as pizza) may have serial
number "1.0", and the associated modifiers (such as "extra cheese", "olives", and "jalapenos")
may have serial numbers "1.1", "1.2", and "1.3" respectively. Serialization is limited to
one decimal point, so you can only modify the base item. You cannot modify a modifier with
1.x.x, and so on.
required:
- item_name
- menu_item_id
- item_qty
- item_amount
- menu_item_type
- menu_major_group
- menu_family
- serial_number
multiple-redemptions:
title: Multiple Redemptions (Object)
x-stoplight:
id: pmmem8gh940r7
type: object
description: Lists the Punchh platform settings for multiple redemptions for the business. This
object is returned in the API response if the `multiple_redemptions_enabled` response parameter
is set to true in the Program Meta API for the business.
properties:
auto_redemption:
type: boolean
x-stoplight:
id: dqiu3pr7t2iis
description: Indicates whether auto-redemption of discounts is enabled for the business
enable_discount_locking:
type: boolean
x-stoplight:
id: 87xke1u2q4q2j
description: Indicates whether reward locking on the transaction is enabled for the business
enable_auto_unlock:
type: boolean
x-stoplight:
id: 347agzkuud2hu
description: Indicates whether auto-unlocking of the guest account after a time interval is
enabled for the business
max_redemptions_in_transaction:
type: integer
x-stoplight:
id: fdo71lexjzldo
description: Maximum number of discounts that can be applied in a single transaction
auto_redemption_discounts:
type: array
x-stoplight:
id: 43vrsvfj377ov
description: 'Discount categories eligible for the auto-application of discounts. Possible values:
offer, subscription, fuel_reward, discount_amount'
items:
x-stoplight:
id: e6h8nv489mo4v
type: string
allow_multiple_redemption_on_item:
type: boolean
x-stoplight:
id: raauwtezy9njd
description: Indicates whether multiple discounts can be stacked on a menu item for the business
allow_qualifying_items_reused:
type: boolean
x-stoplight:
id: sa9em3fu5nt98
description: Indicates whether the reuse of qualifier items for the application of multiple
discounts is enabled for the business
discount_processing_strategy:
type: string
x-stoplight:
id: kshs05y2fagbk
description: 'Condition that determines the order in which discounts are applied to a transaction.
Possible value: date_of_expiry'
processing_priority_by_discount_type:
type: array
x-stoplight:
id: ccvzotvox36t0
description: 'Determines the order in which discounts are applied to a transaction based on
the discount type. Possible values: reward, promo_coupon, subscription, discount_amount'
items:
x-stoplight:
id: quad9iz4zkk70
type: string
processing_priority_by_acquisition_type:
type: array
x-stoplight:
id: jmfde8aaimg3r
description: Determines the order in which discounts are applied to a transaction based on the
acquisition type
items:
x-stoplight:
id: uln9f0hwe7qsc
type: object
properties:
code:
type: string
x-stoplight:
id: 2lsboj0pv3n2y
description: 'Type of acquisition. Possible values: loyalty, pre_purchased, offer, promo_coupon'
priority:
type: integer
x-stoplight:
id: rkqrtlh2rjpkr
description: Order in which a discount of an acquisition type is applied in a transaction
(lower numbers indicate higher priority)
multiplication_factor:
type: integer
x-stoplight:
id: y1ht5l2m3zf1z
description: Maximum number of discount units per category that can be applied in a transaction
exclude_interoperability_strategy_between:
type: array
x-stoplight:
id: 4bxctaba2zemp
description: 'Defines the rules for excluding interoperability between discounts of different
acquisition types. The parameter value is a pair of pipe-separated values that specify which
discounts from an acquisition type cannot be combined with discounts from another acquisition
type. For example, the parameter value `offer|loyalty` means an offer discount cannot be combined
with a loyalty discount at the time of redemption. Possible values are any combination of
the following: loyalty, pre_purchased, offer, promo_coupon'
items:
x-stoplight:
id: 67oe65dgpud5o
type: string
auto_unlock_duration:
type: integer
x-stoplight:
id: i1o55yrysszfi
description: Time interval (in minutes) after which a guest account will be automatically unlocked
for a transaction
qualified_menu_items:
type: array
title: Qualified Menu Items (Array Object)
description: This object returns one or more menu items that qualify for a specified discount.
x-examples: []
x-stoplight:
id: 151171f838898
items:
x-stoplight:
id: 1yeml8z7ttz73
type: object
properties:
item_name:
type: string
x-stoplight:
id: c7nkpeggstmuh
description: Menu item name
item_qty:
type: string
x-stoplight:
id: 6ykp3sqav6eaz
description: The input of item quantity which reflects the specified number of items ordered
amount:
type: number
x-stoplight:
id: uniauejzwpnst
format: float
description: Total item amount. In case of multiple quantities, this is the sum total of all
item amounts.
item_type:
type: string
x-stoplight:
id: rysuxp6w44q0r
description: 'M - Menu item ( + or - )
D - Discount (negative). Either internal or Punchh will always evaluate lines as ( - ) regardless
of the sign assigned in the API call
S - Service item. Any item representing money received that is not a sale. For example:
service charges, delivery fees, tips, purchase of gift cards/certificates, etc. In the case
of a single scan flow, send a menu item with the service menu item type for the selected
tip amount.
T - Tax item. Taxes of all sorts
P - Payment item. Visa, MasterCard, cash, gift card/certificate (when used to pay for the
order)'
item_id:
type: integer
x-stoplight:
id: p8nav566es7gx
description: Item ID
item_family:
type: string
x-stoplight:
id: zp37pepkt4h7n
description: Item family is required if menu_family is categorized for the item.
item_group:
type: string
x-stoplight:
id: 1x6kuoxtetfi9
description: Item major group. Required if menu_major_group is categorized for the item; else
pass it as a blank field in the API request. Generically, every menu item belongs to a family
group. A family group is a sub-category of a major group.
serial_number:
type: string
x-stoplight:
id: 0oru4hhhczt85
description: Serial numbers are assigned to menu items on a receipt. A main menu item (such
as pizza) may have serial number "1.0", and the associated modifiers (such as "Extra Cheese",
"Olives", and "Jalapenos") may have serial numbers "1.1", "1.2", and "1.3" respectively.
The numbering explains that particular items are modifiers associated with the main item.
rewards:
type: array
title: Rewards (Array Object)
x-examples:
'1':
- created_at: YYYY-MM-DDThh:mm:ssZ
description: string
discount_amount: 0
start_date_tz: '2019-08-24T14:15:22Z'
end_date_tz: YYYY-MM-DDThh:mm:ssZ
id: -9007199254740991
image: string
name: string
points: 0
redeemable_properties: string
status: string
updated_at: string
type: string
meta_data: string
x-stoplight:
id: 5fcf79a179564
description: 'Shows the details of rewards in the user account. '
items:
x-stoplight:
id: z2qxg4h5st1hk
type: object
properties:
created_at:
type: string
x-stoplight:
id: 302vykvbfdcc8
format: date-time
description: Date/time when the reward was created, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
enum:
- YYYY-MM-DDThh:mm:ssZ
description:
type: string
x-stoplight:
id: 0tokrp4jmur0m
description: Description that explains rewards as configured in the Punchh platform
discount_amount:
type: integer
x-stoplight:
id: enayd1bhaifgq
description: Discount amount associated with the current reward
start_date_tz:
type: string
x-stoplight:
id: hlqi63w8exlt1
format: date-time
description: 'Start date/time of the reward, , in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format '
end_date_tz:
type: string
x-stoplight:
id: 3k343j7th91f0
format: date-time
description: Expiry date/time of the reward, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
enum:
- YYYY-MM-DDThh:mm:ssZ
id:
type: integer
x-stoplight:
id: hqoodlzxdn03w
format: int64
description: Reward ID
minimum: -9007199254740991
maximum: 9007199254740991
image:
type: string
x-stoplight:
id: 2bn8v55ogflnz
description: Image URL of the reward
name:
type: string
x-stoplight:
id: g8mfj6gz8mna5
description: Name of the reward
points:
type: integer
x-stoplight:
id: 99xgpw2upw2wv
description: Points associated with the current reward
redeemable_properties:
type: string
x-stoplight:
id: gfihfskyudzpl
description: Comma-separated values that provide additional details about a redeemable. For
example, a redeemable could be a "Food_Item" or "Merchandise", etc. Can be configured for
a business in the Punchh platform and attached to a redeemable. If no value is attached
to a redeemable, a blank field will be returned.
status:
type: string
x-stoplight:
id: zqdgql57wft6g
description: The redemption status of a reward. Currently, only the value "Unredeemed" will
be returned. This signifies that the reward has not been redeemed by the user.
updated_at:
type: string
x-stoplight:
id: 8rc961uxaj7j2
description: Date/time when the reward was updated, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
type:
type: string
x-stoplight:
id: nq5zkwfpaz0h6
description: This value is either redeemable or reward. Possible Redemptions and Create Redemption
API requests depend on what is returned in this field. In cases where this field is not
returned, assume that the type is a reward.
meta_data:
type: string
x-stoplight:
id: sre1fwp6rs7gg
description: Meta data that can be added to a redeemable. This will be returned only if it
is configured in the Punchh platform. The maximum length is 255 characters.
selected_coupons:
type: array
title: Selected Coupons (Array Object)
description: This object is set only in the single scan flow (SSF). The `selected_coupons` object
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](/docs/dev-portal-pos/additional-topics/single-scan-flow)
x-examples:
Example:
- code: COUPON_CODE_GOES_HERE
image_url: IMAGE_URL_GOES_HERE
discount_type: redemption_code
name: Dynamic Coupon - $2.5 OFF
description: ''
start_date: null
end_date: null
x-stoplight:
id: 41d896bc0bfbf
items:
x-stoplight:
id: 3o6bzolby9w8x
type: object
properties:
code:
type: string
x-stoplight:
id: nfpvh33vju1kz
description: Coupon redemption code
name:
type: string
x-stoplight:
id: o381dh34zt8fy
description: Name of the Punchh coupon
description:
type: string
x-stoplight:
id: 3e6ptokraoebm
description: Description that explains Punchh coupon as configured in the Punchh platform
start_date_tz:
type: string
x-stoplight:
id: 8k50vfq6ms2sk
description: 'Start date/time of the Punchh coupon, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format '
format: date-time
enum:
- YYYY-MM-DDThh:mm:ssZ
end_date_tz:
type: string
x-stoplight:
id: 9dcxk5cqp72bs
format: date-time
enum:
- YYYY-MM-DDThh:mm:ssZ
description: Expiry date/time of the Punchh coupon, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
image:
type: string
x-stoplight:
id: hseylarj72v84
description: Image URL of the Punchh coupon
discount_type:
type: string
x-stoplight:
id: yzmpjwxouf4sw
description: Type of discount. The value will be redemption_code.
selected_discount_amount:
title: Selected Discount Amount (Object)
x-stoplight:
id: phfisykhrm5r5
type: object
description: This object is set for the single scan flow (SSF) for users who are on the Banked Rewards
loyalty program. The `selected_discount_amount` object 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](/docs/dev-portal-pos/additional-topics/single-scan-flow)
x-examples:
Example:
banked_currency: '2.2'
discount_type: DISCOUNT_AMOUNT_GOES_HERE
properties:
banked_currency:
type: string
x-stoplight:
id: 067b7baw2yu97
description: Banked currency amount that the user wants to redeem
discount_type:
type: string
x-stoplight:
id: rymdjxo0e0yh7
description: Type of discount. The value will be discount_amount
selected_redeemables:
type: array
title: Selected Redeemables (Array Object)
description: This object is set for the single scan flow (SSF) for users that are on the Points
Unlock Redeemables loyalty program. The `selected_redeemables` object 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](/docs/dev-portal-pos/additional-topics/single-scan-flow)
x-examples:
Example:
- id: ID_GOES_HERE
created_at: '2022-09-02T15:03:00Z'
updated_at: '2022-09-10T15:07:14Z'
status: activated
points: 10
discount_amount: null
name: By points
description: ''
redeemable_properties: ''
count: null
discount_type: redeemable
image: IMAGE_URL_GOES_HERE
end_date_tz: null
start_date_tz: null
x-stoplight:
id: 0c38c3d9e5b8b
items:
x-stoplight:
id: 0iocgq9bjb1ti
type: object
properties:
id:
type: integer
x-stoplight:
id: u4ug2539pji46
format: int64
description: Redeemable ID
minimum: -9007199254740991
maximum: 9007199254740991
name:
type: string
x-stoplight:
id: juk5daqg92fb4
description: Name of the redeemable
description:
type: string
x-stoplight:
id: hob5lq6qutwgh
description: Description that explains redeemable as configured in the Punchh platform
created_at:
type: string
x-stoplight:
id: oe8xkokoviah0
format: date-time
description: Date/time when the user was created in the system, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
enum:
- YYYY-MM-DDThh:mm:ssZ
count:
type: integer
x-stoplight:
id: e3kxficl7751d
description: Number of redeemables selected by the user on the mobile app for redemption at
POS.
start_date_tz:
type: string
x-stoplight:
id: jdjvuq7k4gffq
format: date-time
enum:
- YYYY-MM-DDThh:mm:ssZ
description: Start date/time of the redeemable, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
end_date_tz:
type: string
x-stoplight:
id: yl70yioadwhbw
format: date-time
enum:
- YYYY-MM-DDThh:mm:ssZ
description: Expiry date/time of the redeemable, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
updated_at:
type: string
x-stoplight:
id: w6hmji96h8cfl
format: date-time
description: Date/time when the redeemable was updated, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
image:
type: string
x-stoplight:
id: f104xvt6ohqo0
description: Image URL of the redeemable
status:
type: string
x-stoplight:
id: 6vqg5l4ws2i1j
description: The redemption status of a redeemable. Currently, only the value "Unredeemed"
will be returned. This signifies that the reward has not been redeemed by the user.
points:
type: integer
x-stoplight:
id: iqjaszco20c2j
description: Points associated with the redeemable
discount_amount:
type: integer
x-stoplight:
id: 0jpj0gtghotou
description: Discount amount associated with the redeemable
discount_type:
type: string
x-stoplight:
id: tck11epxxzkri
description: Type of discount. The value will be redeemable.
redeemable_properties:
type: string
x-stoplight:
id: r6m3agn4rough
description: Comma-separated values that provide additional details about a redeemable. For
example, a redeemable could be a "Food_Item" or "Merchandise", etc. Can be configured for
a business in the Punchh platform and attached to a redeemable. If no value is attached
to a redeemable, a blank field will be returned.
selected_redeemables_card:
type: array
title: Selected Redeemable Cards (Array Object)
description: This object is set for the single scan flow (SSF) for users that are on the Visit-based
loyalty program. The `selected_redeemable_cards` object 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](/docs/dev-portal-pos/additional-topics/single-scan-flow)
x-examples:
Example:
- id: 108
created_at: '2022-09-11T12:57:18Z'
updated_at: '2022-09-13T13:21:44Z'
status: activated
points: 0
discount_amount: 5
name: Base Redeemable
description: Donation
redeemable_properties: Donate
count: '2'
discount_type: card
image: IMAGE_URL_GOES_HERE
end_date_tz: null
start_date_tz: null
x-stoplight:
id: e5ee978a0cbc9
items:
x-stoplight:
id: t7g9behlwknst
type: object
properties:
id:
type: integer
x-stoplight:
id: 4b08cwtdi7obi
format: int64
description: Redeemable ID
minimum: -9007199254740991
maximum: 9007199254740991
name:
type: string
x-stoplight:
id: 8tv99f0fkytqo
description: Name of the redeemable
description:
type: string
x-stoplight:
id: uz1xz4dwt2gn3
description: Description that explains redeemable as configured in the Punchh platform
count:
type: string
x-stoplight:
id: auytr7w8fnq55
description: Number of redeemable selected by the user on the mobile app for redemption at
POS.
created_at:
type: string
x-stoplight:
id: lefiy1k4zczfa
description: Date/time when the redeemable was created, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
format: date-time
enum:
- YYYY-MM-DDThh:mm:ssZ
start_date_tz:
type: string
x-stoplight:
id: shdlpmq8g5cd5
format: date-time
description: Start date/time of the redeemable, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
enum:
- YYYY-MM-DDThh:mm:ssZ
end_date_tz:
type: string
x-stoplight:
id: a6w5un81fl3mp
format: date-time
description: Expiry date/time of the redeemable, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
enum:
- YYYY-MM-DDThh:mm:ssZ
updated_at:
type: string
x-stoplight:
id: 7q13qzd3v6ifl
format: date-time
description: Date/time when the redeemable was updated, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
enum:
- YYYY-MM-DDThh:mm:ssZ
image:
type: string
x-stoplight:
id: j878zho7u71tu
description: Image URL of the redeemable
status:
type: string
x-stoplight:
id: 3bww487jgjfol
description: The redemption status of a redeemable. Currently, only the value "Unredeemed"
will be returned. This signifies that the reward has not been redeemed by the user.
points:
type: integer
x-stoplight:
id: e3i9mhq04dhjr
description: Points associated with the redeemable. This parameter will always be set to null
for visit-based program.
discount_amount:
type: integer
x-stoplight:
id: n475lpvtxa3r0
description: Discount amount associated with the redeemable.
discount_type:
type: string
x-stoplight:
id: i6adlydrerye5
description: Type of discount. The value will be card.
redeemable_properties:
type: string
x-stoplight:
id: p3a424r0k3lpy
description: Comma-separated values that provide additional details about a redeemable. For
example, a redeemable could be a "Food_Item" or "Merchandise", etc. Can be configured for
a business in the Punchh platform and attached to a redeemable. If no value is attached
to a redeemable, a blank field will be returned.
selected_rewards:
type: array
title: Selected Rewards (Array Object)
description: This object is set only in the single scan flow (SSF). The `selected_rewards` object
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](/docs/dev-portal-pos/additional-topics/single-scan-flow)
x-examples:
Example:
- id: 2980055562
created_at: '2022-06-08T10:10:10Z'
end_date_tz: null
start_date_tz: '2022-06-08T10:10:10Z'
updated_at: '2022-06-08T10:10:10Z'
image: IMAGE_URL_GOES_HERE
status: unredeemed
points: 0
discount_amount: 3
discount_type: reward
description: Free Entree
name: Entree
redeemable_properties: null
x-stoplight:
id: f8d9807fd8000
items:
x-stoplight:
id: d3bxoxgl3pzhw
type: object
properties:
id:
type: integer
x-stoplight:
id: qr8i6yj4bz2j5
format: int64
description: Reward ID
maximum: 9007199254740991
minimum: -9007199254740991
name:
type: string
x-stoplight:
id: 56b95mdq7h6tm
description: Name of the reward
description:
type: string
x-stoplight:
id: ypfd7pyeevqrv
description: Description that explains rewards as configured in the Punchh platform
created_at:
type: string
x-stoplight:
id: zk3rm4gihdei6
format: date-time
description: Date/time when the reward was created, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
enum:
- YYYY-MM-DDThh:mm:ssZ
start_date_tz:
type: string
x-stoplight:
id: yj0zqpy3do8pv
format: date-time
description: Start date/time of the reward, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
enum:
- YYYY-MM-DDThh:mm:ssZ
end_date_tz:
type: string
x-stoplight:
id: ju37sceg013tn
format: date-time
description: Expiry date/time of the reward, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
enum:
- YYYY-MM-DDThh:mm:ssZ
updated_at:
type: string
x-stoplight:
id: vdpha9kgybnho
format: date-time
description: Date/time when the reward was updated, in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format
enum:
- YYYY-MM-DDThh:mm:ssZ
image:
type: string
x-stoplight:
id: v8ouwawlvax8t
description: Image URL of the reward
status:
type: string
x-stoplight:
id: 7eu7nwyju4llb
description: The redemption status of a reward. Currently, only the value "Unredeemed" will
be returned. This signifies that the reward has not been redeemed by the user.
points:
type: integer
x-stoplight:
id: 6shykrzv80puc
description: Points associated with the current reward
discount_amount:
type: integer
x-stoplight:
id: 7oz5mw2hcg9nj
description: Discount amount associated with the current reward
discount_type:
type: string
x-stoplight:
id: kkir8h2by0728
description: Type of discount. The value will be reward.
redeemable_properties:
type: string
x-stoplight:
id: a7hxwtxhwix0o
description: Comma-separated values that provide additional details about a reward. For example,
a redeemable could be a "Food_Item" or "Merchandise", etc. Can be configured for a business
in the Punchh platform and attached to a redeemable. If no value is attached to a redeemable,
a blank field will be returned.
selected_subscriptions:
title: Selected Subscriptions (Array Object)
x-stoplight:
id: m3j5deilysjtb
type: array
description: This object is set only in the single scan flow (SSF). The `selected_subscriptions`
array 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](/docs/dev-portal-pos/additional-topics/single-scan-flow)
minItems: 1
items:
x-stoplight:
id: k28uw6it1fn1j
type: object
minProperties: 1
properties:
subscription_id:
type: number
x-stoplight:
id: zcz6lj0kj0o2e
description: System-generated unique ID of the subscription that is issued to the guest
start_time:
type: string
x-stoplight:
id: xdtgixd3k1zka
format: date-time
description: Date and time (in ISO 8601 format) from which this current subscription becomes
active for a guest
minLength: 1
end_time:
type: string
x-stoplight:
id: hx644v50ybcsw
format: date-time
description: Date and time (in ISO 8601 format) until which this current subscription remains
active for a guest
minLength: 1
external_plan_identifier:
type: string
x-stoplight:
id: cqfzj879fl406
description: UPC/SKU of the subscription plan as present on third-party applications of enterprise
businesses and is configured on this subscription plan. This will be stored in the database,
and the business can use it for analytics purposes. This value can be used to make the purchase
of the subscription plan instead of using the “plan_id”.
plan_id:
type: number
x-stoplight:
id: d25wjlyacbhq6
description: System-generated unique ID of the plan against which this subscription is issued
for the guest
cancelled_at:
type: string
x-stoplight:
id: 5ew4n5w6bki5d
format: date-time
description: Date and time (in ISO 8601 format) when the subscription is cancelled
name:
type: string
x-stoplight:
id: wiq7ag9q76ynh
description: 'Name of the subscription plan as provided by the admin at the time of subscription
plan creation
Note: The subscription `name` is returned in the language specified in the Accept-Language
request header, provided the name has been translated into the relevant language in the
Punchh platform. If the translation is not available, then no value is returned for this
parameter in the API response. For example, if the header specifies “fr” (French), the subscription
name is returned in French only if a French translation is configured in the Punchh platform.'
description:
type: string
x-stoplight:
id: 0t16963b89xix
description: 'Text description of the subscription plan as configured by the admin on the
subscription plan. This is used to explain the offerings of the subscription plan to guests.
Note: The subscription `description` is returned in the language specified in the Accept-Language
request header, provided the description has been translated into the relevant language
in the Punchh platform. If the translation is not available, then no value is returned for
this parameter in the API response. For example, if the header specifies “fr” (French),
the subscription description is returned in French only if a French translation for the
description is configured in the Punchh platform.'
miscellaneous:
type: string
x-stoplight:
id: hqnkb0bhudeg4
description: 'Free-form text field that can be used by businesses to enter additional information
or a JSON code snippet for greater customization in the mobile app
Note: The subscription `miscellaneous` information is returned in the language specified
in the Accept-Language request header, provided it has been translated into the relevant
language in the Punchh platform. If the translation is not available, then no value is returned
for this parameter in the API response. For example, if the header specifies “fr” (French),
the subscription miscellaneous information is returned in French only if a French translation
for the miscellaneous is configured in the Punchh platform.'
status:
type: string
x-stoplight:
id: yfmzukli8w6qg
description: 'Subscriptions issued to a guest can have multiple statuses. Currently supported
statuses are:
1. active: The subscription is active and the guest can enjoy the benefits until its `end_time`.
2. expired: The subscription is not renewed and expired. The end_time of the subscription
is in the past, and it was not cancelled before its expiration.
3. soft_cancelled: The subscription is cancelled either by the guest or by an admin. The
benefits remain valid until the `end_time`.
4. hard_cancelled: The subscription is cancelled by an admin and the benefits become invalid
immediately from the time of cancellation.
5. renewed: The subscription is renewed.'
subscriptions:
title: Subscriptions (Array Object)
x-stoplight:
id: t2vrovoz4i5qv
type: array
description: 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.
x-examples:
example-1:
subscriptions:
- plan_name: free burger
pos_meta: VIP subs
subscription_id: 123
items:
x-stoplight:
id: 9jb37m7ysdquo
type: object
properties:
plan_name:
type: string
x-stoplight:
id: q2i09ubhdc6x8
description: Name of a subscription plan as provided by the Administrator when creating the
subscription plan.
pos_meta:
type: string
x-stoplight:
id: 2b5gfv264ff03
description: Free form text field to support various subscription related business use cases
at POS. The text field length is 24 characters.
subscription_id:
type: string
x-stoplight:
id: ru921jzzxw2ni
description: System-generated unique ID of the subscription that is issued to the guest.
user_subscriptions:
title: User Subscriptions (Array Object)
x-stoplight:
id: l6z8yy29bwski
type: array
x-examples:
application/json:
- subscription_id: 39
benefits:
- benefit_id: 1
benefit_type: sku_discounting
benefit_name: Plan23
benefit_description: ''
discounts:
- discount_id: 42
threshold: 2
discounted_value: $0.00
discounted_quantity: 0
threshold_discount: 2
discount_type: '%_or_$_off'
description: The array object contains different subscriptions issued to the user.
items:
type: object
properties:
subscription_id:
type: string
description: System-generated unique ID of the subscription that is issued to the guest
benefits:
type: array
description: A subscription plan may contain multiple benefits. This object includes the details
of benefits available and availed by the guest for this subscription ID.
items:
type: object
properties:
benefit_id:
type: number
description: System-generated unique ID of the benefit that is configured on the subscription
plan and is issued to the guest for this subscription
benefit_type:
type: string
description: Benefit type that is configured on the subscription plan
benefit_name:
type: string
description: Benefit name that is configured on the subscription plan
benefit_description:
type: string
description: Benefit description that is configured on the subscription plan
discounts:
type: array
items:
type: object
properties:
discount_id:
type: number
description: System-generated unique ID of the discounting rule configured under
the benefit
threshold:
type: string
description: Maximum number of units that can be discounted for this particular
discounting rule
discounted_quantity:
type: string
description: Number of units discounted as per this discounting rule
threshold_discount:
type: string
description: Maximum number of units that can be discounted for this particular
discounting rule
discount_type:
type: string
description: Discount type of discounting rule configured under the benefit
parameters:
Authorization:
schema:
type: string
default: Token token=LOCATION_KEY_GOES_HERE, btoken=BUSINESS_KEY_GOES_HERE
name: Authorization
in: header
required: true
description: This is a combination of unique API key as well as business key (UUID) as the Authorization
header.
Content-Type:
schema:
type: string
default: application/json
name: Content-Type
in: header
required: false
description: Set to **aplication/json**
securitySchemes: {}
x-ext-urls: {}